X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fuserspec.c;h=c6a49fae2745c113d3fc29205259889d092fb6b4;hb=6aae241f16ed2dbe57475cb4c8b3a5b1ca1e9699;hp=c7045324549b415d57642370758bbbe6792a8b4d;hpb=26a0ec5ba4c1399b08249a830626c1296896bdcd;p=gnulib.git diff --git a/lib/userspec.c b/lib/userspec.c index c70453245..c6a49fae2 100644 --- a/lib/userspec.c +++ b/lib/userspec.c @@ -18,38 +18,43 @@ /* Written by David MacKenzie . */ #ifdef HAVE_CONFIG_H -#if defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ #include -#else -#include "config.h" -#endif #endif -/* FIXME: include alloca junk. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +char *alloca (); +# endif +# endif +#endif #include #include #include #include -#if defined(STDC_HEADERS) || defined(HAVE_STRING_H) -#include -#ifndef index -#define index strchr -#endif +#ifdef HAVE_STRING_H +# include #else -#include +# include +# ifndef strchr +# define strchr index +# endif #endif #ifdef STDC_HEADERS -#include +# include #endif #ifdef HAVE_UNISTD_H -#include +# include #endif #ifndef _POSIX_VERSION @@ -58,9 +63,12 @@ struct group *getgrnam (); struct group *getgrgid (); #endif -#ifdef _POSIX_SOURCE -#define endpwent() -#define endgrent() +#ifndef HAVE_ENDGRENT +# define endgrent() ((void) 0) +#endif + +#ifndef HAVE_ENDPWENT +# define endpwent() ((void) 0) #endif /* Perform the equivalent of the statement `dest = strdup (src);', @@ -83,7 +91,7 @@ char *strdup (); otherwise return 0. */ static int -isnumber (str) +is_number (str) const char *str; { for (; *str; str++) @@ -116,7 +124,6 @@ parse_user_spec (spec_arg, uid, gid, username_arg, groupname_arg) char *spec; /* A copy we can write on. */ struct passwd *pwd; struct group *grp; - int spec_len; char *g, *u, *separator; char *groupname; @@ -124,15 +131,12 @@ parse_user_spec (spec_arg, uid, gid, username_arg, groupname_arg) *username_arg = *groupname_arg = NULL; groupname = NULL; - /* FIXME: use this instead: V_STRDUP (spec, spec_arg); */ - spec_len = strlen (spec_arg); - spec = (char *) alloca (strlen (spec_arg) + 1); - strcpy (spec, spec_arg); + V_STRDUP (spec, spec_arg); /* Find the separator if there is one. */ - separator = index (spec, ':'); + separator = strchr (spec, ':'); if (separator == NULL) - separator = index (spec, '.'); + separator = strchr (spec, '.'); /* Replace separator with a NUL. */ if (separator != NULL) @@ -155,7 +159,7 @@ parse_user_spec (spec_arg, uid, gid, username_arg, groupname_arg) if (pwd == NULL) { - if (!isnumber (u)) + if (!is_number (u)) error_msg = "invalid user"; else { @@ -201,7 +205,7 @@ parse_user_spec (spec_arg, uid, gid, username_arg, groupname_arg) grp = getgrnam (g); if (grp == NULL) { - if (!isnumber (g)) + if (!is_number (g)) error_msg = "invalid group"; else *gid = atoi (g); @@ -241,7 +245,7 @@ parse_user_spec (spec_arg, uid, gid, username_arg, groupname_arg) return error_msg; } -#ifdef TESTING +#ifdef TEST #define NULL_CHECK(s) ((s) == NULL ? "(null)" : (s))