diff options
author | Anton Kling <anton@kling.gg> | 2024-04-17 16:55:16 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-04-17 16:55:16 +0200 |
commit | d0cca44913356f8ce15e15216b0e26c2e74b4d06 (patch) | |
tree | f85f5360e528da9914cd4c45f4719d454711f012 /userland/libc/stdio | |
parent | d3f8196eb2cd57fec5f6e2691fdbc802c4d92fc8 (diff) |
LibC: Add more functions that support "long long" integers
Diffstat (limited to 'userland/libc/stdio')
-rw-r--r-- | userland/libc/stdio/vfprintf.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/userland/libc/stdio/vfprintf.c b/userland/libc/stdio/vfprintf.c index 65a2c27..7006578 100644 --- a/userland/libc/stdio/vfprintf.c +++ b/userland/libc/stdio/vfprintf.c @@ -15,7 +15,7 @@ const char HEX_SET[0x10] = {'0', '1', '2', '3', '4', '5', '6', '7', *(int *)(_r) += _rc; \ } -int fprint_num(FILE *f, int n, int base, char *char_set, int prefix, +int fprint_num(FILE *f, long long n, int base, char *char_set, int prefix, int zero_padding, int right_padding) { int c = 0; if (0 == n) { @@ -58,19 +58,19 @@ int fprint_num(FILE *f, int n, int base, char *char_set, int prefix, return c; } -int fprint_int(FILE *f, int n, int prefix, int zero_padding, +int fprint_int(FILE *f, long long n, int prefix, int zero_padding, int right_padding) { return fprint_num(f, n, 10, "0123456789", prefix, zero_padding, right_padding); } -int fprint_hex(FILE *f, int n, int prefix, int zero_padding, +int fprint_hex(FILE *f, long long n, int prefix, int zero_padding, int right_padding) { return fprint_num(f, n, 16, "0123456789abcdef", prefix, zero_padding, right_padding); } -int fprint_octal(FILE *f, int n, int prefix, int zero_padding, +int fprint_octal(FILE *f, long long n, int prefix, int zero_padding, int right_padding) { return fprint_num(f, n, 8, "012345678", prefix, zero_padding, right_padding); } @@ -131,6 +131,8 @@ int vfprintf(FILE *f, const char *fmt, va_list ap) { const char *s = fmt; int prefix = 0; + int long_level = 0; + int zero_padding = 0; int right_padding = 0; @@ -183,6 +185,10 @@ int vfprintf(FILE *f, const char *fmt, va_list ap) { prefix += (*s) - '0'; cont = 1; break; + case 'l': + long_level++; + assert(long_level <= 2); + break; case 'i': case 'd': if (-1 != precision) { @@ -190,7 +196,17 @@ int vfprintf(FILE *f, const char *fmt, va_list ap) { prefix = precision; right_padding = 0; } - rc += fprint_int(f, va_arg(ap, int), prefix, zero_padding, right_padding); + if (2 == long_level) { + rc += fprint_int(f, va_arg(ap, long long), prefix, zero_padding, + right_padding); + } else if (1 == long_level) { + rc += fprint_int(f, va_arg(ap, long long), prefix, zero_padding, + right_padding); + } else { + rc += + fprint_int(f, va_arg(ap, int), prefix, zero_padding, right_padding); + } + long_level = 0; cont = 0; break; case 'u': |