diff options
Diffstat (limited to 'kernel/vsprintf.c')
| -rw-r--r-- | kernel/vsprintf.c | 33 |
1 files changed, 33 insertions, 0 deletions
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 <stdarg.h> +#include <stdint.h> + +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; |
