aboutsummaryrefslogtreecommitdiff
path: root/lib/stdio/printf.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stdio/printf.c')
-rw-r--r--lib/stdio/printf.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/stdio/printf.c b/lib/stdio/printf.c
index f6b8ef6..269b9b6 100644
--- a/lib/stdio/printf.c
+++ b/lib/stdio/printf.c
@@ -1,8 +1,11 @@
#include <stdarg.h>
#include <stdio.h>
+#include <string.h>
#include <devices/uart_16550.h>
+static char buffer[3 * sizeof(int) + 2];
+
int
printf(const char *restrict format, ...)
{
@@ -22,6 +25,15 @@ printf(const char *restrict format, ...)
case 's':
written += uart_puts(COM1, va_arg(params, const char *), -1);
break;
+ case 'd':
+ written += uart_puts(COM1, itoa(buffer, va_arg(params, int), 10), -1);
+ break;
+ case 'u':
+ written += uart_puts(COM1, utoa(buffer, va_arg(params, unsigned int), 10), -1);
+ break;
+ case 'x':
+ written += uart_puts(COM1, utoa(buffer, va_arg(params, unsigned int), 16), -1);
+ break;
}
l = 0;