summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-02-25 01:01:09 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-02-25 11:39:26 +0100
commit8287b6ffdf2cb631591decb17429701218122259 (patch)
treedd27e493119b4c80c288bb5eeb3fb91ffaa6733d
parente5583e10eed68f75e8981571d322b553b784dd5b (diff)
libtrivfs: improve the mig mutator functions
Previously, the mig mutator functions were in migsupport.c, preventing them from being inlined into the mig-generated server functions. Put them in mig-decls.h instead. Rename mutations.h to mig-mutate.h. This is the naming convention used for pflocal. * libtrivfs/fsmutations.h: Rename to mig-mutate.h, adopt imports. * libtrivfs/Makefile: Adopt accordingly. * libtrivfs/migsupport.c: Rename to mig-decls.h. * libtrivfs/trivfs.h: Move dynamic classes/buckets declarations to mig-decls.h, remove superfluous imports. * exec/execmutations.h: Fix import. * pfinet/mig-mutate.h: Likewise. * trans/Makefile: Likewise.
-rw-r--r--exec/execmutations.h4
-rw-r--r--libtrivfs/Makefile6
-rw-r--r--libtrivfs/mig-decls.h (renamed from libtrivfs/migsupport.c)31
-rw-r--r--libtrivfs/mig-mutate.h (renamed from libtrivfs/fsmutations.h)7
-rw-r--r--libtrivfs/trivfs.h44
-rw-r--r--pfinet/mig-mutate.h4
-rw-r--r--trans/Makefile2
7 files changed, 39 insertions, 59 deletions
diff --git a/exec/execmutations.h b/exec/execmutations.h
index 96b47721..ffcba9cd 100644
--- a/exec/execmutations.h
+++ b/exec/execmutations.h
@@ -3,6 +3,8 @@
#define FILE_INTRAN trivfs_protid_t trivfs_begin_using_protid (file_t)
#define FILE_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
-#define EXEC_IMPORTS import "priv.h";
+#define EXEC_IMPORTS \
+ import "priv.h"; \
+ import "../libtrivfs/mig-decls.h"; \
#define SERVERCOPY 1
diff --git a/libtrivfs/Makefile b/libtrivfs/Makefile
index 3e4c0393..921acbea 100644
--- a/libtrivfs/Makefile
+++ b/libtrivfs/Makefile
@@ -38,7 +38,7 @@ FSYSSRCS=fsys-getroot.c fsys-goaway.c fsys-stubs.c fsys-syncfs.c \
file-get-children.c file-get-source.c
OTHERSRCS=demuxer.c protid-clean.c protid-dup.c cntl-create.c \
- cntl-clean.c migsupport.c times.c startup.c open.c \
+ cntl-clean.c times.c startup.c open.c \
runtime-argp.c set-options.c append-args.c dyn-classes.c \
protid-classes.c cntl-classes.c
@@ -49,7 +49,7 @@ MIGSTUBS=fsServer.o ioServer.o fsysServer.o fsys_replyUser.o
libname = libtrivfs
HURDLIBS = fshelp iohelp ports shouldbeinlibc
OBJS= $(sort $(subst .c,.o,$(SRCS)) $(MIGSTUBS))
-MIGSFLAGS=-imacros $(srcdir)/fsmutations.h
+MIGSFLAGS=-imacros $(srcdir)/mig-mutate.h
MIGCOMSFLAGS = -prefix trivfs_
installhdrs := trivfs.h
mig-sheader-prefix = trivfs_
@@ -59,4 +59,4 @@ endif
include ../Makeconf
-$(MIGSTUBS:%Server.o=%.sdefsi): $(srcdir)/fsmutations.h
+$(MIGSTUBS:%Server.o=%.sdefsi): $(srcdir)/mig-mutate.h
diff --git a/libtrivfs/migsupport.c b/libtrivfs/mig-decls.h
index b2d98e16..2baaee86 100644
--- a/libtrivfs/migsupport.c
+++ b/libtrivfs/mig-decls.h
@@ -15,9 +15,26 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+#ifndef __TRIVFS_MIG_DECLS_H__
+#define __TRIVFS_MIG_DECLS_H__
+
#include "priv.h"
-struct trivfs_protid *
+/* Vectors of dynamically allocated port classes/buckets. */
+
+/* Protid port classes. */
+extern struct port_class **trivfs_dynamic_protid_port_classes;
+extern size_t trivfs_num_dynamic_protid_port_classes;
+
+/* Control port classes. */
+extern struct port_class **trivfs_dynamic_control_port_classes;
+extern size_t trivfs_num_dynamic_control_port_classes;
+
+/* Port buckets. */
+extern struct port_bucket **trivfs_dynamic_port_buckets;
+extern size_t trivfs_num_dynamic_port_buckets;
+
+static inline struct trivfs_protid * __attribute__ ((unused))
trivfs_begin_using_protid (mach_port_t port)
{
if (trivfs_protid_nportclasses + trivfs_num_dynamic_protid_port_classes > 1)
@@ -35,7 +52,7 @@ trivfs_begin_using_protid (mach_port_t port)
return (struct trivfs_protid *) pi;
ports_port_deref (pi);
}
-
+
return 0;
}
else if (trivfs_protid_nportclasses == 1)
@@ -44,14 +61,14 @@ trivfs_begin_using_protid (mach_port_t port)
return ports_lookup_port (0, port, trivfs_dynamic_protid_port_classes[0]);
}
-void
+static inline void __attribute__ ((unused))
trivfs_end_using_protid (struct trivfs_protid *cred)
{
if (cred)
ports_port_deref (cred);
}
-struct trivfs_control *
+static inline struct trivfs_control * __attribute__ ((unused))
trivfs_begin_using_control (mach_port_t port)
{
if (trivfs_cntl_nportclasses + trivfs_num_dynamic_control_port_classes > 1)
@@ -69,7 +86,7 @@ trivfs_begin_using_control (mach_port_t port)
return (struct trivfs_control *) pi;
ports_port_deref (pi);
}
-
+
return 0;
}
else if (trivfs_cntl_nportclasses == 1)
@@ -78,9 +95,11 @@ trivfs_begin_using_control (mach_port_t port)
return ports_lookup_port (0, port, trivfs_dynamic_control_port_classes[0]);
}
-void
+static inline void __attribute__ ((unused))
trivfs_end_using_control (struct trivfs_control *cred)
{
if (cred)
ports_port_deref (cred);
}
+
+#endif /* __TRIVFS_MIG_DECLS_H__ */
diff --git a/libtrivfs/fsmutations.h b/libtrivfs/mig-mutate.h
index d81e5a87..fad5389a 100644
--- a/libtrivfs/fsmutations.h
+++ b/libtrivfs/mig-mutate.h
@@ -21,13 +21,12 @@
#define FILE_INTRAN trivfs_protid_t trivfs_begin_using_protid (file_t)
#define FILE_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
+#define FILE_IMPORTS import "mig-decls.h";
#define IO_INTRAN trivfs_protid_t trivfs_begin_using_protid (io_t)
#define IO_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
+#define IO_IMPORTS import "mig-decls.h";
#define FSYS_INTRAN trivfs_control_t trivfs_begin_using_control (fsys_t)
#define FSYS_DESTRUCTOR trivfs_end_using_control (trivfs_control_t)
-
-#define FILE_IMPORTS import <hurd/trivfs.h>;
-#define IO_IMPORTS import <hurd/trivfs.h>;
-#define FSYS_IMPORTS import <hurd/trivfs.h>;
+#define FSYS_IMPORTS import "mig-decls.h";
diff --git a/libtrivfs/trivfs.h b/libtrivfs/trivfs.h
index 306a4302..bb456ffa 100644
--- a/libtrivfs/trivfs.h
+++ b/libtrivfs/trivfs.h
@@ -37,11 +37,6 @@ struct trivfs_protid
struct trivfs_peropen *po;
};
-/* These can be used as `intran' and `destructor' functions for
- a MiG port type, to have the stubs called with the protid pointer. */
-struct trivfs_protid *trivfs_begin_using_protid (mach_port_t);
-void trivfs_end_using_protid (struct trivfs_protid *);
-
struct trivfs_peropen
{
void *hook; /* for user use */
@@ -62,11 +57,6 @@ struct trivfs_control
void *hook; /* for user use */
};
-/* These can be used as `intran' and `destructor' functions for
- a MiG port type, to have the stubs called with the control pointer. */
-struct trivfs_control *trivfs_begin_using_control (mach_port_t);
-void trivfs_end_using_control (struct trivfs_control *);
-
/* The user must define these variables. */
extern int trivfs_fstype;
@@ -267,41 +257,9 @@ error_t trivfs_add_port_bucket (struct port_bucket **bucket);
/* Remove the previously added dynamic port bucket BUCKET, freeing it
if it was allocated by trivfs_add_port_bucket. */
void trivfs_remove_port_bucket (struct port_bucket *bucket);
-
-/* This stuff is for the sake of MiG stubs and could be in a private
- header. But it might be handy for users that override parts of the
- library. Moreover, since the stub headers will use all the imports we
- need for the stubs, we couldn't make the stub headers public without
- making this public too. */
-
+/* Type-aliases for mig. */
typedef struct trivfs_protid *trivfs_protid_t;
typedef struct trivfs_control *trivfs_control_t;
-struct trivfs_protid *_trivfs_begin_using_protid (mach_port_t);
-void _trivfs_end_using_protid (struct trivfs_protid *);
-struct trivfs_control *_trivfs_begin_using_control (mach_port_t);
-void _trivfs_end_using_control (struct trivfs_control *);
-
-/* Vectors of dynamically allocated port classes/buckets. */
-
-/* Protid port classes. */
-extern struct port_class **trivfs_dynamic_protid_port_classes;
-extern size_t trivfs_num_dynamic_protid_port_classes;
-
-/* Control port classes. */
-extern struct port_class **trivfs_dynamic_control_port_classes;
-extern size_t trivfs_num_dynamic_control_port_classes;
-
-/* Port buckets. */
-extern struct port_bucket **trivfs_dynamic_port_buckets;
-extern size_t trivfs_num_dynamic_port_buckets;
-
-/* These are the MiG-generated headers that declare prototypes
- for the server functions. */
-#include <hurd/trivfs_fs_S.h>
-#include <hurd/trivfs_io_S.h>
-#include <hurd/trivfs_fsys_S.h>
-
-
#endif /* __TRIVFS_H__ */
diff --git a/pfinet/mig-mutate.h b/pfinet/mig-mutate.h
index 4d97408f..b7780776 100644
--- a/pfinet/mig-mutate.h
+++ b/pfinet/mig-mutate.h
@@ -28,7 +28,9 @@
#define SOCKET_INTRAN sock_user_t begin_using_socket_port (socket_t)
#define SOCKET_DESTRUCTOR end_using_socket_port (sock_user_t)
-#define SOCKET_IMPORTS import "mig-decls.h";
+#define SOCKET_IMPORTS \
+ import "mig-decls.h"; \
+ import "../libtrivfs/mig-decls.h"; \
#define ADDRPORT_INTRAN sock_addr_t begin_using_sockaddr_port (addr_port_t)
#define ADDRPORT_DESTRUCTOR end_using_sockaddr_port (sock_addr_t)
diff --git a/trans/Makefile b/trans/Makefile
index 90df4790..e74a8692 100644
--- a/trans/Makefile
+++ b/trans/Makefile
@@ -35,7 +35,7 @@ password-LDLIBS = $(LIBCRYPT)
password-MIGSFLAGS=\
"-DIO_INTRAN=trivfs_protid_t trivfs_begin_using_protid (io_t)" \
"-DIO_DESTRUCTOR=trivfs_end_using_protid (trivfs_protid_t)" \
- "-DPASSWORD_IMPORTS=import <hurd/trivfs.h>;"
+ "-DPASSWORD_IMPORTS=import \"../libtrivfs/mig-decls.h\";"
include ../Makeconf