summaryrefslogtreecommitdiff
path: root/libshouldbeinlibc/idvec.h
diff options
context:
space:
mode:
Diffstat (limited to 'libshouldbeinlibc/idvec.h')
-rw-r--r--libshouldbeinlibc/idvec.h73
1 files changed, 45 insertions, 28 deletions
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__ */