Simplified code and possible copy problem fixed.
authorUlrich Drepper <drepper@redhat.com>
Fri, 10 Apr 2009 03:56:06 +0000 (03:56 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 10 Apr 2009 03:56:06 +0000 (03:56 +0000)
ChangeLog
stdio-common/vfprintf.c

index fe0a899..c0d26fc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2009-04-09  Ulrich Drepper  <drepper@redhat.com>
 
        * stdio-common/vfprintf.c (vfprintf): Slightly more compact code.
+       Simplified code and possible copy problem fixed.
 
        * sysdeps/unix/sysv/linux/preadv.c: Avoid prototype for static
        function if it is not defined.  Add some necessary casts.
index 819865f..5a24e72 100644 (file)
@@ -1662,24 +1662,10 @@ do_positional:
          {
            /* Extend the array of format specifiers.  */
            struct printf_spec *old = specs;
+           specs = extend_alloca (specs, nspecs_max, 2 * nspecs_max);
 
-           nspecs_max *= 2;
-           specs = alloca (nspecs_max * sizeof (struct printf_spec));
-
-           if (specs == &old[nspecs])
-             /* Stack grows up, OLD was the last thing allocated;
-                extend it.  */
-             nspecs_max += nspecs_max / 2;
-           else
-             {
-               /* Copy the old array's elements to the new space.  */
-               memcpy (specs, old, nspecs * sizeof (struct printf_spec));
-               if (old == &specs[nspecs])
-                 /* Stack grows down, OLD was just below the new
-                    SPECS.  We can use that space when the new space
-                    runs out.  */
-                 nspecs_max += nspecs_max / 2;
-             }
+           /* Copy the old array's elements to the new space.  */
+           memmove (specs, old, nspecs * sizeof (struct printf_spec));
          }
 
        /* Parse the format specifier.  */