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:
Xiang W 2023-07-10 00:02:27 +08:00 committed by Anup Patel
parent fe0828142f
commit c6ee5ae5a4

View file

@ -227,23 +227,33 @@ static int printi(char **out, u32 *out_len, long long i,
}
}
if (flags & PAD_ALTERNATE) {
if ((b == 16) && (letbase == 'A')) {
*--s = 'X';
} else if ((b == 16) && (letbase == 'a')) {
*--s = 'x';
}
*--s = '0';
}
if (sign) {
if (width && (flags & PAD_ZERO)) {
if (flags & PAD_ZERO) {
if (sign) {
printc(out, out_len, sign);
++pc;
--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);