forked from Mirrors/opensbi
lib: sbi: Fix printi
Fix two bug: > printf("%#08x", 0x123); /* print 0000x123 */ > printf("%#x", 0); /* print 0x0 */ Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -227,23 +227,33 @@ static int printi(char **out, u32 *out_len, long long i,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & PAD_ALTERNATE) {
|
if (flags & PAD_ZERO) {
|
||||||
if ((b == 16) && (letbase == 'A')) {
|
if (sign) {
|
||||||
*--s = 'X';
|
|
||||||
} else if ((b == 16) && (letbase == 'a')) {
|
|
||||||
*--s = 'x';
|
|
||||||
}
|
|
||||||
*--s = '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sign) {
|
|
||||||
if (width && (flags & PAD_ZERO)) {
|
|
||||||
printc(out, out_len, sign);
|
printc(out, out_len, sign);
|
||||||
++pc;
|
++pc;
|
||||||
--width;
|
--width;
|
||||||
} else {
|
|
||||||
*--s = sign;
|
|
||||||
}
|
}
|
||||||
|
if (i && (flags & PAD_ALTERNATE)) {
|
||||||
|
if (b == 16 || b == 8) {
|
||||||
|
printc(out, out_len, '0');
|
||||||
|
++pc;
|
||||||
|
--width;
|
||||||
|
}
|
||||||
|
if (b == 16) {
|
||||||
|
printc(out, out_len, 'x' - 'a' + letbase);
|
||||||
|
++pc;
|
||||||
|
--width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (i && (flags & PAD_ALTERNATE)) {
|
||||||
|
if (b == 16)
|
||||||
|
*--s = 'x' - 'a' + letbase;
|
||||||
|
if (b == 16 || b == 8)
|
||||||
|
*--s = '0';
|
||||||
|
}
|
||||||
|
if (sign)
|
||||||
|
*--s = sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pc + prints(out, out_len, s, width, flags);
|
return pc + prints(out, out_len, s, width, flags);
|
||||||
|
Reference in New Issue
Block a user