From 5cdbedd4d16c08d3f95f3c5ddba741781b06aafb Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sun, 31 Mar 2019 22:43:37 -0700 Subject: [PATCH] Move console to use kutil's printf --- src/kernel/console.cpp | 98 ++---------------------------------------- 1 file changed, 4 insertions(+), 94 deletions(-) diff --git a/src/kernel/console.cpp b/src/kernel/console.cpp index 42f4be6..16d5019 100644 --- a/src/kernel/console.cpp +++ b/src/kernel/console.cpp @@ -1,6 +1,7 @@ #include "kutil/coord.h" #include "kutil/guid.h" #include "kutil/memory.h" +#include "kutil/printf.h" #include "console.h" #include "font.h" #include "screen.h" @@ -278,100 +279,9 @@ console::putc(char c) void console::vprintf(const char *fmt, va_list args) { static const unsigned buf_size = 256; - char buffer[256]; - - const char *r = fmt; - char *w = buffer; - char *wend = buffer + buf_size; - -#define flush() do { *w = 0; puts(buffer); w = buffer; } while(0) - - while (r && *r) { - if (w == wend) flush(); - - if (*r != '%') { - *w++ = *r++; - continue; - } - - r++; // chomp the % - flush(); - - bool done = false; - bool right = true; - int width = 0; - char pad = ' '; - - while (!done) { - char c = *r++; - switch (c) { - case '%': *w = '%'; done = true; break; - - case '0': - if (width == 0) pad = '0'; - // else fall through - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': width = width * 10 + (c - '0'); break; - - case '-': right = !right; break; - - case 'x': put_hex(va_arg(args, uint32_t), right ? width : -width, pad); done = true; break; - - case 'd': - case 'u': put_dec(va_arg(args, uint32_t), right ? width : -width, pad); done = true; break; - - case 's': { - const char *s = va_arg(args, const char*); - if (s) puts(s); - } - done = true; - break; - - case 'G': { - // Special: GUID type - kutil::guid g = va_arg(args, kutil::guid); - put_hex(g.a, 8, '0'); - putc('-'); - put_hex((g.a >> 32) & 0xffff, 4, '0'); - putc('-'); - put_hex((g.a >> 48) & 0xffff, 4, '0'); - putc('-'); - put_hex((kutil::byteswap(g.b) >> 16) & 0xffff, 4, '0'); - putc('-'); - put_hex(kutil::byteswap(g.b) & 0xffff, 4, '0'); - put_hex(kutil::byteswap(g.b >> 32), 8, '0'); - } - done = true; - break; - - case 'l': - switch (*r++) { - case 'x': put_hex(va_arg(args, uint64_t), right ? width : -width, pad); done = true; break; - - case 'd': - case 'u': put_dec(va_arg(args, uint64_t), right ? width : -width, pad); done = true; break; - - default: - done = true; - break; - } - break; - - default: - done = true; - break; - } - } - } - - flush(); + char buffer[buf_size]; + vsnprintf_(buffer, buf_size, fmt, args); + puts(buffer); } void