diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-08-03 15:26:02 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-08-03 15:26:02 +0000 |
commit | 6c215a8d6c972ca3324107109c393f21e782fb10 (patch) | |
tree | b364b344931ab3bbb16f020b59c5ee7f35188484 /grp/initgroups.c | |
parent | 9c06eb66b5b4662c22532ab03525eab46c4cf2eb (diff) | |
download | glibc-6c215a8d6c972ca3324107109c393f21e782fb10.tar.gz glibc-6c215a8d6c972ca3324107109c393f21e782fb10.tar.xz glibc-6c215a8d6c972ca3324107109c393f21e782fb10.zip |
* grp/initgroups.c (internal_getgrouplist): Remove unnecessary
test introduced in patch for bz #661. (getgrouplist): Simplify code a bit.
Diffstat (limited to 'grp/initgroups.c')
-rw-r--r-- | grp/initgroups.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/grp/initgroups.c b/grp/initgroups.c index b887a973ff..1cc07b6bef 100644 --- a/grp/initgroups.c +++ b/grp/initgroups.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1989,91,93,1996-2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1989,91,93,1996-2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -74,8 +74,8 @@ internal_getgrouplist (const char *user, gid_t group, long int *size, long int start = 1; /* Never store more than the starting *SIZE number of elements. */ - if (*size > 0) - (*groupsp)[0] = group; + assert (*size > 0); + (*groupsp)[0] = group; if (__nss_group_database != NULL) { @@ -142,11 +142,9 @@ internal_getgrouplist (const char *user, gid_t group, long int *size, int getgrouplist (const char *user, gid_t group, gid_t *groups, int *ngroups) { - gid_t *newgroups; long int size = MAX (1, *ngroups); - int result; - newgroups = (gid_t *) malloc ((size + 1) * sizeof (gid_t)); + gid_t *newgroups = (gid_t *) malloc ((size + 1) * sizeof (gid_t)); if (__builtin_expect (newgroups == NULL, 0)) /* No more memory. */ // XXX This is wrong. The user provided memory, we have to use @@ -155,20 +153,16 @@ getgrouplist (const char *user, gid_t group, gid_t *groups, int *ngroups) // XXX too small. For initgroups a flag could say: increase size. return -1; - result = internal_getgrouplist (user, group, &size, &newgroups, -1); - - memcpy (groups, newgroups, MIN (*ngroups, result) * sizeof (gid_t)); + int total = internal_getgrouplist (user, group, &size, &newgroups, -1); - if (result > *ngroups) - { - *ngroups = result; - result = -1; - } - else - *ngroups = result; + memcpy (groups, newgroups, MIN (*ngroups, total) * sizeof (gid_t)); free (newgroups); - return result; + + int retval = total > *ngroups ? -1 : total; + *ngroups = total; + + return retval; } static_link_warning (getgrouplist) |