summary refs log tree commit diff
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;