diff --git a/kernel/src/std/stdio.cpp b/kernel/src/std/stdio.cpp index 08819639..18af8db5 100644 --- a/kernel/src/std/stdio.cpp +++ b/kernel/src/std/stdio.cpp @@ -228,6 +228,7 @@ int sprintf(char* __s, const char* fmt, ...) { va_list ap; va_start(ap, fmt); + if (__s) *__s = 0; int written = internal_printf( fmt, [&](const char* s) { @@ -242,6 +243,7 @@ int snprintf(char* __s, size_t max, const char* fmt, ...) { va_list ap; va_start(ap, fmt); + if (__s && max) *__s = 0; int written = internal_printf( fmt, [&](const char* s) { @@ -266,6 +268,7 @@ int vkprintf(const char* fmt, va_list ap) int vsprintf(char* __s, const char* fmt, va_list ap) { + *__s = 0; return internal_printf( fmt, [&](const char* s) { @@ -276,6 +279,7 @@ int vsprintf(char* __s, const char* fmt, va_list ap) int vsnprintf(char* __s, size_t max, const char* fmt, va_list ap) { + if (max) *__s = 0; return internal_printf( fmt, [&](const char* s) { diff --git a/libs/libc/src/printf.cpp b/libs/libc/src/printf.cpp index e4bb9847..e47568c1 100644 --- a/libs/libc/src/printf.cpp +++ b/libs/libc/src/printf.cpp @@ -261,6 +261,7 @@ extern "C" int vsprintf(char* str, const char* format, va_list ap) { + if (str) *str = 0; // so strncat starts from the beginning return internal_printf( format, [&](const char* s) { @@ -271,6 +272,7 @@ extern "C" int vsnprintf(char* str, size_t max, const char* format, va_list ap) { + if (max && str) *str = 0; // so strncat starts from the beginning return internal_printf( format, [&](const char* s) {