From 042f61bdb3d3d8d30fd1a1d4bb37e498b2fc67a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Wed, 6 Dec 2017 19:43:59 +0100 Subject: [PATCH] Add padding to field width (right adjust) --- src/kernel/boot/debug.c | 16 ++++++++++++++++ src/kernel/boot/debug.tt | 15 +++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/kernel/boot/debug.c b/src/kernel/boot/debug.c index 8369926..ad16ddc 100644 --- a/src/kernel/boot/debug.c +++ b/src/kernel/boot/debug.c @@ -3,6 +3,7 @@ #include #include #include +#include // TODO: Temporary declarations void vga_write(char c); @@ -69,6 +70,18 @@ void debug_vprintf(char *fmt, va_list args) } fmt++; + size_t padwidth = 0; + char padchar = ' '; + if(*fmt == '0') + { + padchar = '0'; + fmt++; + } + while(*fmt >= '0' && *fmt <= '9') + { + padwidth *= 10; + padwidth += (int)(*fmt++ - '0'); + } uint64_t base = 0; switch(*fmt) { @@ -100,6 +113,9 @@ void debug_vprintf(char *fmt, va_list args) uintmax_t number = va_arg(args, uintmax_t); char buf[128]; num2str(buf, number, base); + if(padwidth > strlen(buf)) + for(size_t i = 0; i < (padwidth - strlen(buf)); i++) + debug_putch(padchar); debug_puts(buf); } diff --git a/src/kernel/boot/debug.tt b/src/kernel/boot/debug.tt index 47bec7f..a10fc1d 100644 --- a/src/kernel/boot/debug.tt +++ b/src/kernel/boot/debug.tt @@ -115,3 +115,18 @@ TEST(printf_keeps_going_for_unknown_format_specifier) debug_printf("%y"); ASSERT_EQ_STR(vga_recv, "%y", BUFFER_SIZE); } +TEST(printf_pads_value) +{ + debug_printf("%5d", 123); + ASSERT_EQ_STR(vga_recv, " 123", BUFFER_SIZE); +} +TEST(printf_pads_more_than_9) +{ + debug_printf("%16d", 1); + ASSERT_EQ_STR(vga_recv, " 1", BUFFER_SIZE); +} +TEST(printf_zero_pads) +{ + debug_printf("%05d", 123); + ASSERT_EQ_STR(vga_recv, "00123", BUFFER_SIZE); +}