diff options
Diffstat (limited to 'lib/vsprintf.c')
| -rw-r--r-- | lib/vsprintf.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index a566b83..4188308 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -6,8 +6,9 @@ enum TYPE { TYPE_INT = 1, TYPE_UINT = 2, TYPE_HEX = 3, - TYPE_STRING = 4, - TYPE_PERCENT = 5 + TYPE_CHAR = 4, + TYPE_STRING = 5, + TYPE_PERCENT = 6 }; enum FLAGS { @@ -91,7 +92,7 @@ int vsprintf(char *str, char *fmt, va_list ap) { fwidth = 0; fmt++; - while(1) { + for(;;) { switch(*fmt) { case '#': flags |= FL_ALT; @@ -99,6 +100,9 @@ int vsprintf(char *str, char *fmt, va_list ap) { case '%': type = TYPE_PERCENT; goto done; + case 'c': + type = TYPE_CHAR; + goto done; case 's': type = TYPE_STRING; goto done; @@ -137,6 +141,9 @@ done: while(*s) *str++ = *s++; break; + case TYPE_CHAR: + *str++ = va_arg(ap, char); + break; case TYPE_HEX: x = va_arg(ap, int); hex(&str, flags, fwidth, 4, x); |
