libc: support + in printf and any flag ordering
This commit is contained in:
parent
b73316b5f5
commit
673e1e90c9
@ -112,21 +112,26 @@ int xvasprintf(char * buf, const char * fmt, va_list args) {
|
||||
int fill_zero = 0;
|
||||
int big = 0;
|
||||
int alt = 0;
|
||||
if (*f == '-') {
|
||||
align = 0;
|
||||
++f;
|
||||
}
|
||||
if (*f == '#') {
|
||||
alt = 1;
|
||||
++f;
|
||||
}
|
||||
if (*f == '*') {
|
||||
arg_width = (char)va_arg(args, int);
|
||||
++f;
|
||||
}
|
||||
if (*f == '0') {
|
||||
fill_zero = 1;
|
||||
++f;
|
||||
int always_sign = 0;
|
||||
while (1) {
|
||||
if (*f == '-') {
|
||||
align = 0;
|
||||
++f;
|
||||
} else if (*f == '#') {
|
||||
alt = 1;
|
||||
++f;
|
||||
} else if (*f == '*') {
|
||||
arg_width = (char)va_arg(args, int);
|
||||
++f;
|
||||
} else if (*f == '0') {
|
||||
fill_zero = 1;
|
||||
++f;
|
||||
} else if (*f == '+') {
|
||||
always_sign = 1;
|
||||
++f;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (*f >= '0' && *f <= '9') {
|
||||
arg_width *= 10;
|
||||
@ -239,6 +244,9 @@ int xvasprintf(char * buf, const char * fmt, va_list args) {
|
||||
*b++ = '-';
|
||||
buf++;
|
||||
val = -val;
|
||||
} else if (always_sign) {
|
||||
*b++ = '+';
|
||||
buf++;
|
||||
}
|
||||
print_dec(val, arg_width, buf, &i, fill_zero, align);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user