diff options
| author | Jake Mannens <jake72360@gmail.com> | 2018-06-17 04:10:41 +1000 |
|---|---|---|
| committer | Jake Mannens <jake72360@gmail.com> | 2018-06-17 04:10:41 +1000 |
| commit | 6a6f31db520177d15a604ebd77ec68b7fc94dce6 (patch) | |
| tree | 9b850c5eb1ad178e6fa1d063eecb0ea70c6778cf /kernel | |
| parent | fb24378c58a3bd5260920a1e9762c027fdbe5cec (diff) | |
Added basic implmementation of %x to vsprintf.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kmain.c | 2 | ||||
| -rw-r--r-- | kernel/vsprintf.c | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/kernel/kmain.c b/kernel/kmain.c index 52c41d1..a854c12 100644 --- a/kernel/kmain.c +++ b/kernel/kmain.c @@ -8,5 +8,5 @@ void kmain(void) { printf("Kernel booting...\n"); printf("Kernel booted!\n"); - printf("%s %s %s\n%s %s %s\n", "first", "second", "third", "fourth", "fifth", "sixth"); + printf("Number: %x\n", 0x80); } diff --git a/kernel/vsprintf.c b/kernel/vsprintf.c index dca2906..20489f4 100644 --- a/kernel/vsprintf.c +++ b/kernel/vsprintf.c @@ -8,7 +8,22 @@ enum TYPE { TYPE_STRING = 4 }; +static void hex(char **str, int x) { + int n; + char *s = "0x"; + + while(*s) + *(*str)++ = *s++; + + n = sizeof(x) << 1; + while(n--) { + *(*str)++ = ((unsigned int) x >> 28) + 0x30; + x = x << 4; + } +} + int vsprintf(char *str, char *fmt, va_list ap) { + int x; char *s; char *start = str; uint8_t type; @@ -29,6 +44,11 @@ int vsprintf(char *str, char *fmt, va_list ap) { goto done; type = TYPE_STRING; break; + case 'x': + if(type) + goto done; + type = TYPE_HEX; + break; default: goto done; break; @@ -44,6 +64,10 @@ done: while(*s) *str++ = *s++; break; + case TYPE_HEX: + x = va_arg(ap, int); + hex(&str, x); + break; } } |
