summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--grp/initgroups.c28
-rw-r--r--stdio-common/printf_fphex.c5
3 files changed, 19 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 284ae583f5..e24281bfba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2006-08-03 Ulrich Drepper <drepper@redhat.com>
+ * grp/initgroups.c (internal_getgrouplist): Remove unnecessary
+ test introduced in patch for bz #661.
+ (getgrouplist): Simplify code a bit.
+
[BZ #2908]
* stdio-common/printf_fphex.c (__printf_fphex): When rounding up
'f', use '1' as leading digit not '\1'.
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)
diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c
index 6711ccc82b..4e30d94c61 100644
--- a/stdio-common/printf_fphex.c
+++ b/stdio-common/printf_fphex.c
@@ -404,7 +404,10 @@ __printf_fphex (FILE *fp,
{
exponent -= 4;
if (exponent <= 0)
- expnegative = 0;
+ {
+ exponent = -exponent;
+ expnegative = 0;
+ }
}
else
exponent += 4;