diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 23c6cde..5cc3391 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -188,7 +188,7 @@ int printf(const char* restrict format, ...) { } else if (*format == '1') { format++; uint64_t i = (uint64_t) va_arg(parameters, uint64_t); - u64toa(i, buffer, 16); + u64toa(i, buffer, 10); size_t len = strlen(buffer); if (maxrem < len) { // TODO: Set errno to EOVERFLOW. @@ -198,6 +198,30 @@ int printf(const char* restrict format, ...) { return -1; written += len; } else if (*format == '2') { + format++; + uint64_t i = (uint64_t) va_arg(parameters, uint64_t); + u64toa(i, buffer, 16); + size_t len = strlen(buffer); + if (maxrem < len) { + // TODO: Set errno to EOVERFLOW. + return -1; + } + if (!print(buffer, len)) + return -1; + written += len; + } else if (*format == '3') { + format++; + int64_t i = (int64_t) va_arg(parameters, int64_t); + s64toa(i, buffer, 10); + size_t len = strlen(buffer); + if (maxrem < len) { + // TODO: Set errno to EOVERFLOW. + return -1; + } + if (!print(buffer, len)) + return -1; + written += len; + } else if (*format == '4') { format++; int64_t i = (int64_t) va_arg(parameters, int64_t); s64toa(i, buffer, 16);