From bfd013ab103654751d3c3c03bf31e19a57e329dd Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 2 Nov 2013 22:58:15 +0100 Subject: [PATCH] Fix vfprintf(3) error case. --- libc/print.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libc/print.cpp b/libc/print.cpp index 7a7b1735..40c2b32d 100644 --- a/libc/print.cpp +++ b/libc/print.cpp @@ -22,8 +22,9 @@ *******************************************************************************/ -#include #include +#include +#include #include #include @@ -36,6 +37,8 @@ static size_t FileWriteCallback(void* user, const char* string, size_t stringlen extern "C" int vfprintf(FILE* fp, const char* /*restrict*/ format, va_list list) { size_t result = vprintf_callback(FileWriteCallback, fp, format, list); + if ( result == SIZE_MAX ) + return -1; return (int) result; } @@ -43,22 +46,21 @@ extern "C" int fprintf(FILE* fp, const char* /*restrict*/ format, ...) { va_list list; va_start(list, format); - size_t result = vfprintf(fp, format, list); + int result = vfprintf(fp, format, list); va_end(list); - return (int) result; + return result; } extern "C" int vprintf(const char* /*restrict*/ format, va_list list) { - size_t result = vfprintf(stdout, format, list); - return (int) result; + return vfprintf(stdout, format, list); } extern "C" int printf(const char* /*restrict*/ format, ...) { va_list list; va_start(list, format); - size_t result = vprintf(format, list); + int result = vprintf(format, list); va_end(list); - return (int) result; + return result; }