From 0926d2df7a5606c2b7c341d51f04a396084c39f2 Mon Sep 17 00:00:00 2001 From: Juan Pablo Conde Date: Wed, 8 Nov 2023 13:03:53 -0600 Subject: [PATCH] feat(libc): add printf support for space padding This patch makes printf capable of padding strings with spaces to their left, allowing right-aligning numeric values and strings. It uses the same width field for the format specifier as in the original libc function : % (e.g.: %10d pads an integer value with spaces to the left to complete 10 characters). Change-Id: Ib7b5519dae17742181352ce58e507a05ba5250d4 Signed-off-by: Juan Pablo Conde --- lib/libc/printf.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/libc/printf.c b/lib/libc/printf.c index 6931a7ea1..a85634562 100644 --- a/lib/libc/printf.c +++ b/lib/libc/printf.c @@ -95,6 +95,7 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix, * * The following padding specifiers are supported by this print * %0NN - Left-pad the number with 0s (NN is a decimal number) + * %NN - Left-pad the number with spaces (NN is a decimal number) * * The print exits on all other formats specifiers other than valid * combinations of the above specifiers. @@ -182,6 +183,27 @@ loop: padn = 0; fmt++; + for (;;) { + char ch = *fmt; + if ((ch < '0') || (ch > '9')) { + goto loop; + } + padn = (padn * 10) + (ch - '0'); + fmt++; + } + assert(0); /* Unreachable */ + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + padc = ' '; + padn = 0; + for (;;) { char ch = *fmt; if ((ch < '0') || (ch > '9')) {