[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/2] libtrivfs: improve the mig mutator functions
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 2/2] libtrivfs: improve the mig mutator functions |
Date: |
Tue, 25 Feb 2014 08:42:17 -0500 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Justus Winter, le Tue 25 Feb 2014 12:30:03 +0100, a écrit :
> 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.
Ack.
> * 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
>
--
Samuel
"I don't know why, but first C programs tend to look a lot worse than
first programs in any other language (maybe except for fortran, but then
I suspect all fortran programs look like `firsts')"
(By Olaf Kirch)