From 6c50650c22348f43e089aae01108576022be9163 Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Mon, 5 Apr 2010 22:25:29 +0200 Subject: win32: workaround msvcrt *printf defects --- libbb/platform.c | 15 ++++++++++++++- libbb/xfuncs_printf.c | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/libbb/platform.c b/libbb/platform.c index 17ad3f75a..8642337d4 100644 --- a/libbb/platform.c +++ b/libbb/platform.c @@ -51,8 +51,21 @@ int fdprintf(int fd, const char *format, ...) char *string_ptr; va_start(p, format); - r = vasprintf(&string_ptr, format, p); + if (ENABLE_PLATFORM_MINGW32) { + string_ptr = xmalloc(1024); + r = vsnprintf(string_ptr, 1024, format, p); + } + else + r = vasprintf(&string_ptr, format, p); va_end(p); + if (ENABLE_PLATFORM_MINGW32 && r > 0) { + free(string_ptr); + r += 2; + string_ptr = xmalloc(r); + va_start(p, format); + r = vsnprintf(string_ptr, r, format, p); + va_end(p); + } if (r >= 0) { r = full_write(fd, string_ptr, r); free(string_ptr); diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c index 7207ec58a..f8b1b81cd 100644 --- a/libbb/xfuncs_printf.c +++ b/libbb/xfuncs_printf.c @@ -287,8 +287,22 @@ char* FAST_FUNC xasprintf(const char *format, ...) char *string_ptr; va_start(p, format); +#if ENABLE_PLATFORM_MINGW32 + string_ptr = xmalloc(1024); + r = vsnprintf(string_ptr, 1024, format, p); + va_end(p); + if (r > 0) { + free(string_ptr); + r += 2; + string_ptr = xmalloc(r); + va_start(p, format); + r = vsnprintf(string_ptr, r, format, p); + va_end(p); + } +#else r = vasprintf(&string_ptr, format, p); va_end(p); +#endif if (r < 0) bb_error_msg_and_die(bb_msg_memory_exhausted); -- cgit v1.2.3-55-g6feb