summaryrefslogtreecommitdiff
path: root/libshouldbeinlibc
diff options
context:
space:
mode:
Diffstat (limited to 'libshouldbeinlibc')
-rw-r--r--libshouldbeinlibc/idvec-funcs.c3
-rw-r--r--libshouldbeinlibc/idvec.h73
-rw-r--r--libshouldbeinlibc/maptime-funcs.c6
-rw-r--r--libshouldbeinlibc/maptime.h21
-rw-r--r--libshouldbeinlibc/ugids-xinl.c7
-rw-r--r--libshouldbeinlibc/ugids.h101
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__ */