aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbb/xfuncs.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 7803afcec..3d0bec7ac 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -452,9 +452,9 @@ char *xasprintf(const char *format, ...)
452{ 452{
453 va_list p; 453 va_list p;
454 int r; 454 int r;
455 char *string_ptr; 455 char *string_ptr = xmalloc(1024);
456 456
457#if 1 457#if 0
458 // GNU extension 458 // GNU extension
459 va_start(p, format); 459 va_start(p, format);
460 r = vasprintf(&string_ptr, format, p); 460 r = vasprintf(&string_ptr, format, p);
@@ -462,26 +462,30 @@ char *xasprintf(const char *format, ...)
462#else 462#else
463 // Bloat for systems that haven't got the GNU extension. 463 // Bloat for systems that haven't got the GNU extension.
464 va_start(p, format); 464 va_start(p, format);
465 r = vsnprintf(NULL, 0, format, p); 465 r = vsnprintf(string_ptr, 1024, format, p);
466 va_end(p);
467 string_ptr = xmalloc(r+1);
468 va_start(p, format);
469 r = vsnprintf(string_ptr, r+1, format, p);
470 va_end(p); 466 va_end(p);
467 if (r > 0) {
468 free(string_ptr);
469 r += 2;
470 string_ptr = xmalloc(r);
471 va_start(p, format);
472 r = vsnprintf(string_ptr, r, format, p);
473 va_end(p);
474 }
471#endif 475#endif
472 476
473 if (r < 0) bb_error_msg_and_die(bb_msg_memory_exhausted); 477 if (r < 0) bb_error_msg_and_die(bb_msg_memory_exhausted);
474 return string_ptr; 478 return string_ptr;
475} 479}
476 480
477#if 0 /* If we will ever meet a libc which hasn't [f]dprintf... */ 481#ifdef __MINGW32__ /* If we will ever meet a libc which hasn't [f]dprintf... */
478int fdprintf(int fd, const char *format, ...) 482int fdprintf(int fd, const char *format, ...)
479{ 483{
480 va_list p; 484 va_list p;
481 int r; 485 int r;
482 char *string_ptr; 486 char *string_ptr = xmalloc(1024);
483 487
484#if 1 488#if 0
485 // GNU extension 489 // GNU extension
486 va_start(p, format); 490 va_start(p, format);
487 r = vasprintf(&string_ptr, format, p); 491 r = vasprintf(&string_ptr, format, p);
@@ -489,12 +493,16 @@ int fdprintf(int fd, const char *format, ...)
489#else 493#else
490 // Bloat for systems that haven't got the GNU extension. 494 // Bloat for systems that haven't got the GNU extension.
491 va_start(p, format); 495 va_start(p, format);
492 r = vsnprintf(NULL, 0, format, p); 496 r = vsnprintf(string_ptr, 1024, format, p);
493 va_end(p);
494 string_ptr = xmalloc(r+1);
495 va_start(p, format);
496 r = vsnprintf(string_ptr, r+1, format, p);
497 va_end(p); 497 va_end(p);
498 if (r > 0) {
499 free(string_ptr);
500 r += 2;
501 string_ptr = xmalloc(r);
502 va_start(p, format);
503 r = vsnprintf(string_ptr, r, format, p);
504 va_end(p);
505 }
498#endif 506#endif
499 507
500 if (r >= 0) { 508 if (r >= 0) {