summaryrefslogtreecommitdiff
path: root/kernel/vsprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/vsprintf.c')
-rw-r--r--kernel/vsprintf.c33
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;