Author: jkim
Date: Thu Jul  8 22:13:23 2010
New Revision: 209836
URL: http://svn.freebsd.org/changeset/base/209836

Log:
  Implement optional 'precision' for numbers.  Previously, it was parsed but
  ignored.  Some third-party modules (e.g., APCICA) prefer this format over
  zero padding flag '0'.

Modified:
  head/sys/kern/subr_prf.c

Modified: head/sys/kern/subr_prf.c
==============================================================================
--- head/sys/kern/subr_prf.c    Thu Jul  8 21:56:05 2010        (r209835)
+++ head/sys/kern/subr_prf.c    Thu Jul  8 22:13:23 2010        (r209836)
@@ -800,7 +800,8 @@ number:
                                neg = 1;
                                num = -(intmax_t)num;
                        }
-                       p = ksprintn(nbuf, num, base, &tmp, upper);
+                       p = ksprintn(nbuf, num, base, &n, upper);
+                       tmp = 0;
                        if (sharpflag && num != 0) {
                                if (base == 8)
                                        tmp++;
@@ -810,10 +811,13 @@ number:
                        if (neg)
                                tmp++;
 
-                       if (!ladjust && padc != '0' && width
-                           && (width -= tmp) > 0)
-                               while (width--)
-                                       PCHAR(padc);
+                       if (!ladjust && padc == '0')
+                               dwidth = width - tmp;
+                       width -= tmp + MAX(dwidth, n);
+                       dwidth -= n;
+                       if (!ladjust)
+                               while (width-- > 0)
+                                       PCHAR(' ');
                        if (neg)
                                PCHAR('-');
                        if (sharpflag && num != 0) {
@@ -824,16 +828,15 @@ number:
                                        PCHAR('x');
                                }
                        }
-                       if (!ladjust && width && (width -= tmp) > 0)
-                               while (width--)
-                                       PCHAR(padc);
+                       while (dwidth-- > 0)
+                               PCHAR('0');
 
                        while (*p)
                                PCHAR(*p--);
 
-                       if (ladjust && width && (width -= tmp) > 0)
-                               while (width--)
-                                       PCHAR(padc);
+                       if (ladjust)
+                               while (width-- > 0)
+                                       PCHAR(' ');
 
                        break;
                default:
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to