* grp/initgroups.c (internal_getgrouplist): Remove unnecessary
authorUlrich Drepper <drepper@redhat.com>
Thu, 3 Aug 2006 15:26:02 +0000 (15:26 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 3 Aug 2006 15:26:02 +0000 (15:26 +0000)
test introduced in patch for bz #661.
(getgrouplist): Simplify code a bit.

ChangeLog
grp/initgroups.c
stdio-common/printf_fphex.c

index 284ae58..e24281b 100644 (file)
--- 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'.
index b887a97..1cc07b6 100644 (file)
@@ -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)
index 6711ccc..4e30d94 100644 (file)
@@ -404,7 +404,10 @@ __printf_fphex (FILE *fp,
                    {
                      exponent -= 4;
                      if (exponent <= 0)
-                       expnegative = 0;
+                       {
+                         exponent = -exponent;
+                         expnegative = 0;
+                       }
                    }
                  else
                    exponent += 4;