diff options
author | Anton Kling <anton@kling.gg> | 2024-06-26 21:47:15 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-06-26 21:47:15 +0200 |
commit | fddda835a28bbc52a8d8450395a3e57e181782a8 (patch) | |
tree | f515f65858621e6979bb847848929c9102e8f2d8 /userland | |
parent | e15065fe45f8004adcc8b69bbbe680ced0d530a1 (diff) |
LibC: Fix regression in printf
printf did not write out anything for %d when the value was zero.
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); |