bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/2] libtrivfs: improve the mig mutator functions


From: Justus Winter
Subject: [PATCH 2/2] libtrivfs: improve the mig mutator functions
Date: Tue, 25 Feb 2014 12:30:03 +0100

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.
---
 exec/execmutations.h    |   4 +-
 libtrivfs/Makefile      |   6 +--
 libtrivfs/fsmutations.h |  33 ---------------
 libtrivfs/mig-decls.h   | 105 ++++++++++++++++++++++++++++++++++++++++++++++++
 libtrivfs/mig-mutate.h  |  32 +++++++++++++++
 libtrivfs/migsupport.c  |  86 ---------------------------------------
 libtrivfs/trivfs.h      |  44 +-------------------
 pfinet/mig-mutate.h     |   4 +-
 trans/Makefile          |   2 +-
 9 files changed, 148 insertions(+), 168 deletions(-)
 delete mode 100644 libtrivfs/fsmutations.h
 create mode 100644 libtrivfs/mig-decls.h
 create mode 100644 libtrivfs/mig-mutate.h
 delete mode 100644 libtrivfs/migsupport.c

diff --git a/exec/execmutations.h b/exec/execmutations.h
index 96b4772..ffcba9c 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 3e4c039..921acbe 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/fsmutations.h b/libtrivfs/fsmutations.h
deleted file mode 100644
index d81e5a8..0000000
--- a/libtrivfs/fsmutations.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-   Copyright (C) 1994,95,2002 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Only CPP macro definitions should go in this file. */
-
-#define REPLY_PORTS
-
-#define FILE_INTRAN trivfs_protid_t trivfs_begin_using_protid (file_t)
-#define FILE_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
-
-#define IO_INTRAN trivfs_protid_t trivfs_begin_using_protid (io_t)
-#define IO_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
-
-#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>;
diff --git a/libtrivfs/mig-decls.h b/libtrivfs/mig-decls.h
new file mode 100644
index 0000000..2baaee8
--- /dev/null
+++ b/libtrivfs/mig-decls.h
@@ -0,0 +1,105 @@
+/* 
+   Copyright (C) 1994, 1995, 1996, 1997, 1999 Free Software Foundation
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   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"
+
+/* 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)
+    {
+      struct port_info *pi = ports_lookup_port (0, port, 0);
+      int i;
+
+      if (pi)
+       {
+         for (i = 0; i < trivfs_protid_nportclasses; i++)
+           if (pi->class == trivfs_protid_portclasses[i])
+             return (struct trivfs_protid *) pi;
+         for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++)
+           if (pi->class == trivfs_dynamic_protid_port_classes[i])
+             return (struct trivfs_protid *) pi;
+         ports_port_deref (pi);
+       }
+
+      return 0;
+    }
+  else if (trivfs_protid_nportclasses == 1)
+    return ports_lookup_port (0, port, trivfs_protid_portclasses[0]);
+  else
+    return ports_lookup_port (0, port, trivfs_dynamic_protid_port_classes[0]);
+}
+
+static inline void __attribute__ ((unused))
+trivfs_end_using_protid (struct trivfs_protid *cred)
+{
+  if (cred)
+    ports_port_deref (cred);
+}
+
+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)
+    {
+      struct port_info *pi = ports_lookup_port (0, port, 0);
+      int i;
+
+      if (pi)
+       {
+         for (i = 0; i < trivfs_cntl_nportclasses; i++)
+           if (pi->class == trivfs_cntl_portclasses[i])
+             return (struct trivfs_control *) pi;
+         for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++)
+           if (pi->class == trivfs_dynamic_control_port_classes[i])
+             return (struct trivfs_control *) pi;
+         ports_port_deref (pi);
+       }
+
+      return 0;
+    }
+  else if (trivfs_cntl_nportclasses == 1)
+    return ports_lookup_port (0, port, trivfs_cntl_portclasses[0]);
+  else
+    return ports_lookup_port (0, port, trivfs_dynamic_control_port_classes[0]);
+}
+
+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/mig-mutate.h b/libtrivfs/mig-mutate.h
new file mode 100644
index 0000000..fad5389
--- /dev/null
+++ b/libtrivfs/mig-mutate.h
@@ -0,0 +1,32 @@
+/*
+   Copyright (C) 1994,95,2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* Only CPP macro definitions should go in this file. */
+
+#define REPLY_PORTS
+
+#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 FSYS_IMPORTS import "mig-decls.h";
diff --git a/libtrivfs/migsupport.c b/libtrivfs/migsupport.c
deleted file mode 100644
index b2d98e1..0000000
--- a/libtrivfs/migsupport.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* 
-   Copyright (C) 1994, 1995, 1996, 1997, 1999 Free Software Foundation
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include "priv.h"
-
-struct trivfs_protid *
-trivfs_begin_using_protid (mach_port_t port)
-{
-  if (trivfs_protid_nportclasses + trivfs_num_dynamic_protid_port_classes > 1)
-    {
-      struct port_info *pi = ports_lookup_port (0, port, 0);
-      int i;
-
-      if (pi)
-       {
-         for (i = 0; i < trivfs_protid_nportclasses; i++)
-           if (pi->class == trivfs_protid_portclasses[i])
-             return (struct trivfs_protid *) pi;
-         for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++)
-           if (pi->class == trivfs_dynamic_protid_port_classes[i])
-             return (struct trivfs_protid *) pi;
-         ports_port_deref (pi);
-       }
-      
-      return 0;
-    }
-  else if (trivfs_protid_nportclasses == 1)
-    return ports_lookup_port (0, port, trivfs_protid_portclasses[0]);
-  else
-    return ports_lookup_port (0, port, trivfs_dynamic_protid_port_classes[0]);
-}
-
-void 
-trivfs_end_using_protid (struct trivfs_protid *cred)
-{
-  if (cred)
-    ports_port_deref (cred);
-}
-
-struct trivfs_control *
-trivfs_begin_using_control (mach_port_t port)
-{
-  if (trivfs_cntl_nportclasses + trivfs_num_dynamic_control_port_classes > 1)
-    {
-      struct port_info *pi = ports_lookup_port (0, port, 0);
-      int i;
-
-      if (pi)
-       {
-         for (i = 0; i < trivfs_cntl_nportclasses; i++)
-           if (pi->class == trivfs_cntl_portclasses[i])
-             return (struct trivfs_control *) pi;
-         for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++)
-           if (pi->class == trivfs_dynamic_control_port_classes[i])
-             return (struct trivfs_control *) pi;
-         ports_port_deref (pi);
-       }
-      
-      return 0;
-    }
-  else if (trivfs_cntl_nportclasses == 1)
-    return ports_lookup_port (0, port, trivfs_cntl_portclasses[0]);
-  else
-    return ports_lookup_port (0, port, trivfs_dynamic_control_port_classes[0]);
-}
-
-void 
-trivfs_end_using_control (struct trivfs_control *cred)
-{
-  if (cred)
-    ports_port_deref (cred);
-}
diff --git a/libtrivfs/trivfs.h b/libtrivfs/trivfs.h
index 306a430..bb456ff 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 4d97408..b778077 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 90df479..e74a869 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
 
-- 
1.8.5.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]