aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/subr_prf.c
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2010-07-08 22:13:23 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2010-07-08 22:13:23 +0000
commit4624e08a5984a56642bd0f93f08c1e153c42badd (patch)
tree914ed90bc05367bf9e90c13b3a3c3a98c55f33cd /sys/kern/subr_prf.c
parentb48aee40b9493b52de064f62f908d21074c566dd (diff)
downloadsrc-4624e08a5984a56642bd0f93f08c1e153c42badd.tar.gz
src-4624e08a5984a56642bd0f93f08c1e153c42badd.zip
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'.
Notes
Notes: svn path=/head/; revision=209836
Diffstat (limited to 'sys/kern/subr_prf.c')
-rw-r--r--sys/kern/subr_prf.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c
index 30e92cba4dd5..776c4e80cbd6 100644
--- a/sys/kern/subr_prf.c
+++ b/sys/kern/subr_prf.c
@@ -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: