From c9329e622e97e6f80427d76f616dacdfed45cd5f Mon Sep 17 00:00:00 2001 From: Sascha Wildner Date: Thu, 3 Jan 2013 19:14:38 +0100 Subject: [PATCH] kprintf(9): 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'. Before this commit: ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x 03F611D40, using 32 (20110527/tbfadt-589) After this commit: ACPI Warning: 32/64X FACS address mismatch in FADT - 0x3F611E40/0x000000003F611D40, using 32 (20110527/tbfadt-589) Taken-from: FreeBSD (r209836 and r209949) --- sys/kern/subr_prf.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c index 867fcf775d..9c5f040878 100644 --- a/sys/kern/subr_prf.c +++ b/sys/kern/subr_prf.c @@ -840,7 +840,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++; @@ -850,11 +851,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 + imax(dwidth, n); + dwidth -= n; + if (!ladjust) + while (width-- > 0) + PCHAR(' '); if (neg) PCHAR('-'); if (sharpflag && num != 0) { @@ -865,16 +868,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: -- 2.41.0