bug-hurd
[Top][All Lists]
Advanced

[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)



reply via email to

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