diff options
Diffstat (limited to 'libshouldbeinlibc')
-rw-r--r-- | libshouldbeinlibc/idvec-funcs.c | 3 | ||||
-rw-r--r-- | libshouldbeinlibc/idvec.h | 73 | ||||
-rw-r--r-- | libshouldbeinlibc/maptime-funcs.c | 6 | ||||
-rw-r--r-- | libshouldbeinlibc/maptime.h | 21 | ||||
-rw-r--r-- | libshouldbeinlibc/ugids-xinl.c | 7 | ||||
-rw-r--r-- | libshouldbeinlibc/ugids.h | 101 |
6 files changed, 125 insertions, 86 deletions
diff --git a/libshouldbeinlibc/idvec-funcs.c b/libshouldbeinlibc/idvec-funcs.c index 1bc6d85f..b7bb2788 100644 --- a/libshouldbeinlibc/idvec-funcs.c +++ b/libshouldbeinlibc/idvec-funcs.c @@ -1,2 +1,3 @@ -#define IDVEC_EI +#define __USE_EXTERN_INLINES +#define IDVEC_H_EXTERN_INLINE #include "idvec.h" diff --git a/libshouldbeinlibc/idvec.h b/libshouldbeinlibc/idvec.h index 41441259..9538e970 100644 --- a/libshouldbeinlibc/idvec.h +++ b/libshouldbeinlibc/idvec.h @@ -1,6 +1,8 @@ /* Routines for vectors of uids/gids - Copyright (C) 1995,96,97,99,2001 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1999, 2001, 2009 Free Software Foundation, + Inc. + Written by Miles Bader <miles@gnu.org> This program is free software; you can redistribute it and/or @@ -25,10 +27,6 @@ #include <errno.h> #include <string.h> -#ifndef IDVEC_EI -#define IDVEC_EI extern inline -#endif - struct idvec { uid_t *ids; @@ -51,28 +49,13 @@ void idvec_free_wrapper (struct idvec *idvec); void idvec_free (struct idvec *idvec); /* Mark IDVEC as not containing any ids. */ -IDVEC_EI void -idvec_clear (struct idvec *idvec) -{ - idvec->num = 0; -} +void idvec_clear (struct idvec *idvec); /* Returns true if IDVEC contains no ids. */ -IDVEC_EI int -idvec_is_empty (const struct idvec *idvec) -{ - return idvec->num == 0; -} +int idvec_is_empty (const struct idvec *idvec); /* Return true if IDVEC1 has contents identical to IDVEC2. */ -IDVEC_EI int -idvec_equal (const struct idvec *idvec1, const struct idvec *idvec2) -{ - size_t num = idvec1->num; - return idvec2->num == num - && (num == 0 - || memcmp (idvec1->ids, idvec2->ids, num * sizeof *idvec1->ids) == 0); -} +int idvec_equal (const struct idvec *idvec1, const struct idvec *idvec2); /* Ensure that IDVEC has enough spaced allocated to hold NUM ids, thus ensuring that any subsequent ids added won't return a memory allocation @@ -88,11 +71,7 @@ error_t idvec_grow (struct idvec *idvec, unsigned inc); int idvec_tail_contains (const struct idvec *idvec, unsigned pos, uid_t id); /* Returns true if IDVEC contains ID. */ -IDVEC_EI int -idvec_contains (const struct idvec *idvec, uid_t id) -{ - return idvec_tail_contains (idvec, 0, id); -} +int idvec_contains (const struct idvec *idvec, uid_t id); /* Insert ID into IDVEC at position POS, returning ENOMEM if there wasn't enough memory, or 0. */ @@ -214,5 +193,43 @@ char *idvec_uids_rep (const struct idvec *idvec, char *idvec_gids_rep (const struct idvec *idvec, int show_values, int show_names, const char *sep); + +/* Inlining optimizations. */ + +#include <features.h> + +#ifdef __USE_EXTERN_INLINES +# ifndef IDVEC_H_EXTERN_INLINE +# define IDVEC_H_EXTERN_INLINE __extern_inline +# endif + +IDVEC_H_EXTERN_INLINE void +idvec_clear (struct idvec *idvec) +{ + idvec->num = 0; +} + +IDVEC_H_EXTERN_INLINE int +idvec_is_empty (const struct idvec *idvec) +{ + return idvec->num == 0; +} + +IDVEC_H_EXTERN_INLINE int +idvec_equal (const struct idvec *idvec1, const struct idvec *idvec2) +{ + size_t num = idvec1->num; + return idvec2->num == num + && (num == 0 + || memcmp (idvec1->ids, idvec2->ids, num * sizeof *idvec1->ids) == 0); +} + +IDVEC_H_EXTERN_INLINE int +idvec_contains (const struct idvec *idvec, uid_t id) +{ + return idvec_tail_contains (idvec, 0, id); +} + +#endif /* __USE_EXTERN_INLINES */ #endif /* __IDVEC_H__ */ diff --git a/libshouldbeinlibc/maptime-funcs.c b/libshouldbeinlibc/maptime-funcs.c index eeac3b3e..cb5cfe87 100644 --- a/libshouldbeinlibc/maptime-funcs.c +++ b/libshouldbeinlibc/maptime-funcs.c @@ -1,5 +1,3 @@ -#define MAPTIME_EI -#include <errno.h> -#include <sys/types.h> -#include <sys/time.h> +#define __USE_EXTERN_INLINES +#define MAPTIME_H_EXTERN_INLINE #include "maptime.h" diff --git a/libshouldbeinlibc/maptime.h b/libshouldbeinlibc/maptime.h index ac97b411..c2a34783 100644 --- a/libshouldbeinlibc/maptime.h +++ b/libshouldbeinlibc/maptime.h @@ -1,6 +1,6 @@ /* Support for mach's mapped time - Copyright (C) 1996, 1997, 2000, 2007 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2000, 2007, 2009 Free Software Foundation, Inc. Written by Miles Bader <miles@gnu.org> @@ -21,10 +21,6 @@ #ifndef __MAPTIME_H__ #define __MAPTIME_H__ -#ifndef MAPTIME_EI -#define MAPTIME_EI extern inline -#endif - #include <mach/time_value.h> #include <sys/time.h> #include <errno.h> @@ -38,7 +34,18 @@ error_t maptime_map (int use_mach_dev, char *dev_name, volatile struct mapped_time_value **mtime); /* Read the current time from MTIME into TV. This should be very fast. */ -MAPTIME_EI void +void maptime_read (volatile struct mapped_time_value *mtime, struct timeval *tv); + +/* Inlining optimizations. */ + +#include <features.h> + +#ifdef __USE_EXTERN_INLINES +# ifndef MAPTIME_H_EXTERN_INLINE +# define MAPTIME_H_EXTERN_INLINE __extern_inline +# endif + +MAPTIME_H_EXTERN_INLINE void maptime_read (volatile struct mapped_time_value *mtime, struct timeval *tv) { do @@ -49,4 +56,6 @@ maptime_read (volatile struct mapped_time_value *mtime, struct timeval *tv) while (tv->tv_sec != mtime->check_seconds); } +#endif /* __USE_EXTERN_INLINES */ + #endif /* __MAPTIME_H__ */ diff --git a/libshouldbeinlibc/ugids-xinl.c b/libshouldbeinlibc/ugids-xinl.c index 26df93cc..3fb4d20a 100644 --- a/libshouldbeinlibc/ugids-xinl.c +++ b/libshouldbeinlibc/ugids-xinl.c @@ -1,6 +1,6 @@ /* Real definitions for extern inline functions in ugids.h - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2009 Free Software Foundation, Inc. Written by Miles Bader <miles@gnu.ai.mit.edu>. @@ -19,7 +19,6 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define UGIDS_EI -#undef __OPTIMIZE__ -#define __OPTIMIZE__ 1 +#define __USE_EXTERN_INLINES +#define UGIDS_H_EXTERN_INLINE #include "ugids.h" diff --git a/libshouldbeinlibc/ugids.h b/libshouldbeinlibc/ugids.h index 8440b608..97f95071 100644 --- a/libshouldbeinlibc/ugids.h +++ b/libshouldbeinlibc/ugids.h @@ -1,6 +1,6 @@ /* Uid/gid parsing/frobbing - Copyright (C) 1997,2001 Free Software Foundation, Inc. + Copyright (C) 1997, 2001, 2009 Free Software Foundation, Inc. Written by Miles Bader <miles@gnu.org> @@ -24,10 +24,6 @@ #include <stdlib.h> /* For inline function stuff. */ #include <idvec.h> -#ifndef UGIDS_EI -#define UGIDS_EI extern inline -#endif - /* A structure holding a set of the common various types of ids. */ struct ugids { @@ -48,50 +44,16 @@ struct ugids struct ugids *make_ugids (); /* Free all resources used by UGIDS except UGIDS itself. */ -UGIDS_EI void -ugids_fini (struct ugids *ugids) -{ - idvec_fini (&ugids->eff_uids); - idvec_fini (&ugids->eff_gids); - idvec_fini (&ugids->avail_uids); - idvec_fini (&ugids->avail_gids); - idvec_fini (&ugids->imp_eff_gids); - idvec_fini (&ugids->imp_avail_gids); -} +void ugids_fini (struct ugids *ugids); /* Free all resources used by UGIDS. */ -UGIDS_EI void -ugids_free (struct ugids *ugids) -{ - ugids_fini (ugids); - free (ugids); -} +void ugids_free (struct ugids *ugids); /* Return true if UGIDS contains no ids. */ -UGIDS_EI int -ugids_is_empty (const struct ugids *ugids) -{ - /* We needn't test the imp_*_gids vectors because they are subsets of the - corresponding *_gids vectors. */ - return - idvec_is_empty (&ugids->eff_uids) - && idvec_is_empty (&ugids->eff_gids) - && idvec_is_empty (&ugids->avail_uids) - && idvec_is_empty (&ugids->avail_gids); -} +int ugids_is_empty (const struct ugids *ugids); /* Free all resources used by UGIDS except UGIDS itself. */ -UGIDS_EI int -ugids_equal (const struct ugids *ugids1, const struct ugids *ugids2) -{ - return - idvec_equal (&ugids1->eff_uids, &ugids2->eff_uids) - && idvec_equal (&ugids1->eff_gids, &ugids2->eff_gids) - && idvec_equal (&ugids1->avail_uids, &ugids2->avail_uids) - && idvec_equal (&ugids1->avail_gids, &ugids2->avail_gids) - && idvec_equal (&ugids1->imp_eff_gids, &ugids2->imp_eff_gids) - && idvec_equal (&ugids1->imp_avail_gids, &ugids2->imp_avail_gids); -} +int ugids_equal (const struct ugids *ugids1, const struct ugids *ugids2); /* Add all ids in NEW to UGIDS. */ error_t ugids_merge (struct ugids *ugids, const struct ugids *new); @@ -210,5 +172,58 @@ struct ugids_argp_params /* A parser for selecting a set of ugids. */ extern struct argp ugids_argp; + +/* Inlining optimizations. */ + +#include <features.h> + +#ifdef __USE_EXTERN_INLINES +# ifndef UGIDS_H_EXTERN_INLINE +# define UGIDS_H_EXTERN_INLINE __extern_inline +# endif + +UGIDS_H_EXTERN_INLINE void +ugids_fini (struct ugids *ugids) +{ + idvec_fini (&ugids->eff_uids); + idvec_fini (&ugids->eff_gids); + idvec_fini (&ugids->avail_uids); + idvec_fini (&ugids->avail_gids); + idvec_fini (&ugids->imp_eff_gids); + idvec_fini (&ugids->imp_avail_gids); +} + +UGIDS_H_EXTERN_INLINE void +ugids_free (struct ugids *ugids) +{ + ugids_fini (ugids); + free (ugids); +} + +UGIDS_H_EXTERN_INLINE int +ugids_is_empty (const struct ugids *ugids) +{ + /* We needn't test the imp_*_gids vectors because they are subsets of the + corresponding *_gids vectors. */ + return + idvec_is_empty (&ugids->eff_uids) + && idvec_is_empty (&ugids->eff_gids) + && idvec_is_empty (&ugids->avail_uids) + && idvec_is_empty (&ugids->avail_gids); +} + +UGIDS_H_EXTERN_INLINE int +ugids_equal (const struct ugids *ugids1, const struct ugids *ugids2) +{ + return + idvec_equal (&ugids1->eff_uids, &ugids2->eff_uids) + && idvec_equal (&ugids1->eff_gids, &ugids2->eff_gids) + && idvec_equal (&ugids1->avail_uids, &ugids2->avail_uids) + && idvec_equal (&ugids1->avail_gids, &ugids2->avail_gids) + && idvec_equal (&ugids1->imp_eff_gids, &ugids2->imp_eff_gids) + && idvec_equal (&ugids1->imp_avail_gids, &ugids2->imp_avail_gids); +} + +#endif /* __USE_EXTERN_INLINES */ #endif /* __UGIDS_H__ */ |