diff --git a/kernel/src/arch/x86/stivale2-parse.c b/kernel/src/arch/x86/stivale2-parse.c index e0b7da3..613a6b2 100644 --- a/kernel/src/arch/x86/stivale2-parse.c +++ b/kernel/src/arch/x86/stivale2-parse.c @@ -17,7 +17,7 @@ void parse_stivale2(struct stivale2_struct *info) { printf("Memmap (%d entries):\n", m->entries); for (size_t i = 0; i < m->entries; i++) { struct stivale2_mmap_entry me = m->memmap[i]; - printf("\t[%x+%x] %x\n", me.base, me.length, me.type); + printf("\t[%x+%h] %x\n", me.base, me.length, me.type); } break; } diff --git a/kernel/src/print/print.c b/kernel/src/print/print.c index d0f4bcc..e7b97f5 100644 --- a/kernel/src/print/print.c +++ b/kernel/src/print/print.c @@ -14,6 +14,7 @@ void print(const char* c) { } static const char CONVERSION_TABLE[] = "0123456789abcdef"; +static const char UNITS[] = "bKM"; static void printhex(size_t num) { int i; @@ -56,6 +57,16 @@ static void printdec(size_t num) { puts(&buf[i]); } +static void printhuman(size_t num) { + const char *unit = UNITS; + while(num >= 2048 && *(unit+1)) { + num /= 1024; + unit++; + } + printdec(num); + putchar(*unit); +} + void printf(const char *format, ...) { va_list argp; va_start(argp, format); @@ -69,7 +80,9 @@ void printf(const char *format, ...) { printdec(va_arg(argp, size_t)); } else if (*format == 's') { puts(va_arg(argp, char*)); - } + } else if (*format == 'h') { + printhuman(va_arg(argp, size_t)); + } } else { putchar(*format); }