[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
getugroups nit
From: |
Jim Meyering |
Subject: |
getugroups nit |
Date: |
Fri, 06 Jul 2007 07:03:32 +0200 |
getugroups could fail (due to getgrent), but the caller
would have no way to know that.
* lib/getugroups.c (getugroups): Detect getgrent failure.
Adjust comment to reflect reality: this function may return -1.
Index: lib/getugroups.c
===================================================================
RCS file: /cvsroot/gnulib/gnulib/lib/getugroups.c,v
retrieving revision 1.20
diff -u -p -r1.20 getugroups.c
--- lib/getugroups.c 5 Jul 2007 08:06:33 -0000 1.20
+++ lib/getugroups.c 5 Jul 2007 13:52:31 -0000
@@ -45,14 +45,13 @@ struct group *getgrent ();
process. Store at most MAXCOUNT group IDs in the GROUPLIST array.
If GID is not -1, store it first (if possible). GID should be the
group ID (pw_gid) obtained from getpwuid, in case USERNAME is not
- listed in /etc/groups.
- Always return the number of groups of which USERNAME is a member. */
+ listed in /etc/groups. Upon failure, set errno and return -1.
+ Otherwise, return the number of groups of which USERNAME is a member. */
int
getugroups (int maxcount, GETGROUPS_T *grouplist, char const *username,
gid_t gid)
{
- struct group *grp;
int count = 0;
if (gid != (gid_t) -1)
@@ -63,9 +62,16 @@ getugroups (int maxcount, GETGROUPS_T *g
}
setgrent ();
- while ((grp = getgrent ()) != 0)
+ while (1)
{
char **cp;
+ struct group *grp;
+
+ errno = 0;
+ grp = getgrent ();
+ if (grp == NULL)
+ break;
+
for (cp = grp->gr_mem; *cp; ++cp)
{
int n;
@@ -91,13 +97,15 @@ getugroups (int maxcount, GETGROUPS_T *g
if (count < 0)
{
errno = EOVERFLOW;
- count = -1;
goto done;
}
}
}
}
+ if (errno != 0)
+ count = -1;
+
done:
{
int saved_errno = errno;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- getugroups nit,
Jim Meyering <=