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 | 64379c5cd8fa0fce5a403372bd52f9f074911b48 (patch) | |
tree | 178414d7edd99fc9ff9370c24e841f8d6b954b8d /lib/getugroups.c | |
parent | d4825df6cfbd888624dfb3d52cf23916d415671e (diff) | |
download | coreutils-64379c5cd8fa0fce5a403372bd52f9f074911b48.tar.xz |
(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 6c818f110..7b99d649b 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; |