diff options
-rw-r--r-- | libbb/platform.c | 15 | ||||
-rw-r--r-- | libbb/xfuncs_printf.c | 14 |
2 files changed, 28 insertions, 1 deletions
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, ...) | |||
51 | char *string_ptr; | 51 | char *string_ptr; |
52 | 52 | ||
53 | va_start(p, format); | 53 | va_start(p, format); |
54 | r = vasprintf(&string_ptr, format, p); | 54 | if (ENABLE_PLATFORM_MINGW32) { |
55 | string_ptr = xmalloc(1024); | ||
56 | r = vsnprintf(string_ptr, 1024, format, p); | ||
57 | } | ||
58 | else | ||
59 | r = vasprintf(&string_ptr, format, p); | ||
55 | va_end(p); | 60 | va_end(p); |
61 | if (ENABLE_PLATFORM_MINGW32 && r > 0) { | ||
62 | free(string_ptr); | ||
63 | r += 2; | ||
64 | string_ptr = xmalloc(r); | ||
65 | va_start(p, format); | ||
66 | r = vsnprintf(string_ptr, r, format, p); | ||
67 | va_end(p); | ||
68 | } | ||
56 | if (r >= 0) { | 69 | if (r >= 0) { |
57 | r = full_write(fd, string_ptr, r); | 70 | r = full_write(fd, string_ptr, r); |
58 | free(string_ptr); | 71 | 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, ...) | |||
287 | char *string_ptr; | 287 | char *string_ptr; |
288 | 288 | ||
289 | va_start(p, format); | 289 | va_start(p, format); |
290 | #if ENABLE_PLATFORM_MINGW32 | ||
291 | string_ptr = xmalloc(1024); | ||
292 | r = vsnprintf(string_ptr, 1024, format, p); | ||
293 | va_end(p); | ||
294 | if (r > 0) { | ||
295 | free(string_ptr); | ||
296 | r += 2; | ||
297 | string_ptr = xmalloc(r); | ||
298 | va_start(p, format); | ||
299 | r = vsnprintf(string_ptr, r, format, p); | ||
300 | va_end(p); | ||
301 | } | ||
302 | #else | ||
290 | r = vasprintf(&string_ptr, format, p); | 303 | r = vasprintf(&string_ptr, format, p); |
291 | va_end(p); | 304 | va_end(p); |
305 | #endif | ||
292 | 306 | ||
293 | if (r < 0) | 307 | if (r < 0) |
294 | bb_error_msg_and_die(bb_msg_memory_exhausted); | 308 | bb_error_msg_and_die(bb_msg_memory_exhausted); |