Add padding to field width (right adjust)
This commit is contained in:
parent
0f5445da62
commit
042f61bdb3
@ -3,6 +3,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <vga.h>
|
#include <vga.h>
|
||||||
|
#include <memory.h>
|
||||||
|
|
||||||
// TODO: Temporary declarations
|
// TODO: Temporary declarations
|
||||||
void vga_write(char c);
|
void vga_write(char c);
|
||||||
@ -69,6 +70,18 @@ void debug_vprintf(char *fmt, va_list args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fmt++;
|
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;
|
uint64_t base = 0;
|
||||||
switch(*fmt)
|
switch(*fmt)
|
||||||
{
|
{
|
||||||
@ -100,6 +113,9 @@ void debug_vprintf(char *fmt, va_list args)
|
|||||||
uintmax_t number = va_arg(args, uintmax_t);
|
uintmax_t number = va_arg(args, uintmax_t);
|
||||||
char buf[128];
|
char buf[128];
|
||||||
num2str(buf, number, base);
|
num2str(buf, number, base);
|
||||||
|
if(padwidth > strlen(buf))
|
||||||
|
for(size_t i = 0; i < (padwidth - strlen(buf)); i++)
|
||||||
|
debug_putch(padchar);
|
||||||
debug_puts(buf);
|
debug_puts(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,3 +115,18 @@ TEST(printf_keeps_going_for_unknown_format_specifier)
|
|||||||
debug_printf("%y");
|
debug_printf("%y");
|
||||||
ASSERT_EQ_STR(vga_recv, "%y", BUFFER_SIZE);
|
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);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user