diff options
author | Jim Meyering <jim@meyering.net> | 1998-03-13 15:24:43 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1998-03-13 15:24:43 +0000 |
commit | bf3840957f16ad999515c5c5287f6ef13e211379 (patch) | |
tree | e2938ac7731b055bfb4d57c5649f683148df7ae6 /lib/getugroups.c | |
parent | a19e601b42a86b59b4af13aa9f960397f5306c38 (diff) | |
download | gnulib-bf3840957f16ad999515c5c5287f6ef13e211379.tar.gz |
(getugroups): Don't add a group number if it would be a duplicate.
From Ulrich Drepper.
Diffstat (limited to 'lib/getugroups.c')
-rw-r--r-- | lib/getugroups.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/getugroups.c b/lib/getugroups.c index 6c818f1108..7b99d649b3 100644 --- a/lib/getugroups.c +++ b/lib/getugroups.c @@ -1,5 +1,5 @@ /* getugroups.c -- return a list of the groups a user is in - Copyright (C) 1990, 1991 Free Software Foundation. + Copyright (C) 1990, 1991, 1998 Free Software Foundation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -59,16 +59,27 @@ getugroups (maxcount, grouplist, username) for (cp = grp->gr_mem; *cp; ++cp) if (!strcmp (username, *cp)) { - if (maxcount != 0) + int n; + + /* See if this group number is already on the list. */ + for (n = 0; n < count; ++n) + if (grouplist[n] == grp->gr_gid) + break; + + /* If it's a new group number, then try to add it to the list. */ + if (n == count) { - if (count >= maxcount) + if (maxcount != 0) { - endgrent (); - return count; + if (count >= maxcount) + { + endgrent (); + return count; + } + grouplist[count] = grp->gr_gid; } - grouplist[count] = grp->gr_gid; + count++; } - count++; } endgrent (); return count; |