Page MenuHomeFreeBSD

D11284.diff
No OneTemporary

D11284.diff

Index: head/sys/kern/subr_prf.c
===================================================================
--- head/sys/kern/subr_prf.c
+++ head/sys/kern/subr_prf.c
@@ -650,7 +650,7 @@
uintmax_t num;
int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot;
int cflag, hflag, jflag, tflag, zflag;
- int dwidth, upper;
+ int bconv, dwidth, upper;
char padc;
int stop = 0, retval = 0;
@@ -676,7 +676,7 @@
}
percent = fmt - 1;
qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0;
- sign = 0; dot = 0; dwidth = 0; upper = 0;
+ sign = 0; dot = 0; bconv = 0; dwidth = 0; upper = 0;
cflag = 0; hflag = 0; jflag = 0; tflag = 0; zflag = 0;
reswitch: switch (ch = (u_char)*fmt++) {
case '.':
@@ -724,28 +724,9 @@
width = n;
goto reswitch;
case 'b':
- num = (u_int)va_arg(ap, int);
- p = va_arg(ap, char *);
- for (q = ksprintn(nbuf, num, *p++, NULL, 0); *q;)
- PCHAR(*q--);
-
- if (num == 0)
- break;
-
- for (tmp = 0; *p;) {
- n = *p++;
- if (num & (1 << (n - 1))) {
- PCHAR(tmp ? ',' : '<');
- for (; (n = *p) > ' '; ++p)
- PCHAR(n);
- tmp = 1;
- } else
- for (; *p > ' '; ++p)
- continue;
- }
- if (tmp)
- PCHAR('>');
- break;
+ ladjust = 1;
+ bconv = 1;
+ goto handle_nosign;
case 'c':
width -= 1;
@@ -883,6 +864,10 @@
num = (u_char)va_arg(ap, int);
else
num = va_arg(ap, u_int);
+ if (bconv) {
+ q = va_arg(ap, char *);
+ base = *q++;
+ }
goto number;
handle_sign:
if (jflag)
@@ -939,6 +924,26 @@
while (*p)
PCHAR(*p--);
+
+ if (bconv && num != 0) {
+ /* %b conversion flag format. */
+ tmp = retval;
+ while (*q) {
+ n = *q++;
+ if (num & (1 << (n - 1))) {
+ PCHAR(retval != tmp ?
+ ',' : '<');
+ for (; (n = *q) > ' '; ++q)
+ PCHAR(n);
+ } else
+ for (; *q > ' '; ++q)
+ continue;
+ }
+ if (retval != tmp) {
+ PCHAR('>');
+ width -= retval - tmp;
+ }
+ }
if (ladjust)
while (width-- > 0)

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 14, 6:25 PM (5 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29679603
Default Alt Text
D11284.diff (2 KB)

Event Timeline