diff options
Diffstat (limited to 'userland')
-rw-r--r-- | userland/libc/stdio/vfprintf.c | 9 | ||||
-rw-r--r-- | userland/test/test.c | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/userland/libc/stdio/vfprintf.c b/userland/libc/stdio/vfprintf.c index 2ba3e2c..d384c1d 100644 --- a/userland/libc/stdio/vfprintf.c +++ b/userland/libc/stdio/vfprintf.c @@ -28,8 +28,13 @@ int fprint_num(FILE *f, long long n, int base, char *char_set, int prefix, n *= -1; } - for (; n != 0 && i < 32; i++, n /= base) - str[i] = char_set[(n % base)]; + if (0 == n) { + str[i] = char_set[0]; + i++; + } else { + for (; n != 0 && i < 32; i++, n /= base) + str[i] = char_set[(n % base)]; + } if (is_signed) { str[i] = '-'; diff --git a/userland/test/test.c b/userland/test/test.c index 29aa34c..33361a5 100644 --- a/userland/test/test.c +++ b/userland/test/test.c @@ -588,6 +588,8 @@ void printf_test(void) { buf_n = sprintf(buf, "oct: %00o", 1); EXP("oct: 1"); + buf_n = sprintf(buf, "int: %d", 0); + EXP("int: 0"); buf_n = sprintf(buf, "int: %-2dend", 1); EXP("int: 1 end"); buf_n = sprintf(buf, "int: %-2dend", 12); |