From 52608386cfccf465cc8e9a01bb988a10831a9a73 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Sun, 17 Jun 2018 02:47:18 +1000 Subject: Added %s to vsprintf --- kernel/vsprintf.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'kernel/vsprintf.c') diff --git a/kernel/vsprintf.c b/kernel/vsprintf.c index f3feb43..ed2d8be 100644 --- a/kernel/vsprintf.c +++ b/kernel/vsprintf.c @@ -1,7 +1,17 @@ #include +#include + +enum TYPE { + TYPE_INT = 1, + TYPE_UINT = 2, + TYPE_HEX = 3, + TYPE_STRING = 4 +}; int vsprintf(char *str, char *fmt, va_list ap) { + char *s; char *start = str; + uint8_t type; while(*fmt) { if(*fmt != '%') { @@ -10,6 +20,29 @@ int vsprintf(char *str, char *fmt, va_list ap) { } fmt++; + while(1) { + switch(*fmt) { + case 's': + if(type) + goto done; + type = TYPE_STRING; + break; + default: + goto done; + break; + } + fmt++; + } + +done: + + switch(type) { + case TYPE_STRING: + s = va_arg(ap, char*); + while(*s) + *str++ = *s++; + break; + } } *str = 0; -- cgit v1.3