(printf_integer) Fix handling of precision. Improve comments.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 29 Aug 2004 06:53:30 +0000 (06:53 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 29 Aug 2004 06:53:30 +0000 (06:53 +0000)
src/lib/lib.c

index be4397e2239ff16224a7b975bc04e70c7f43a957..32c44e2872f9e7317a04e72d2882d112ffb21c06 100644 (file)
@@ -322,8 +322,9 @@ printf_integer (uintmax_t value, bool negative, const char *digits,
   base = strlen (digits);
 
   /* Accumulate digits into buffer.
-     This algorithm produces digits in reverse order, so we count
-     backward from the end of the array. */
+     This algorithm produces digits in reverse order, so later we
+     will output the buffer's content in reverse.  This is also
+     the reason that later we append zeros and the sign. */
   cp = buf;
   while (value > 0) 
     {
@@ -331,15 +332,15 @@ printf_integer (uintmax_t value, bool negative, const char *digits,
       value /= base;
     }
 
-  /* Prepend enough zeros to match precision.
+  /* Append enough zeros to match precision.
      If precision is 0, then a value of zero is rendered as a
      null string.  Otherwise at least one digit is presented. */
   if (c->precision < 0)
     c->precision = 1;
-  while (cp - buf < c->precision && cp - buf > (int) sizeof buf - 8)
+  while (cp - buf < c->precision && cp - buf < (int) sizeof buf - 8)
     *cp++ = '0';
 
-  /* Prepend sign. */
+  /* Append sign. */
   if (c->flags & PLUS)
     *cp++ = negative ? '-' : '+';
   else if (c->flags & SPACE)