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