aboutsummaryrefslogtreecommitdiff
path: root/libbb/bb_asprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/bb_asprintf.c')
-rw-r--r--libbb/bb_asprintf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/libbb/bb_asprintf.c b/libbb/bb_asprintf.c
index 8658a5408..191417a2d 100644
--- a/libbb/bb_asprintf.c
+++ b/libbb/bb_asprintf.c
@@ -13,9 +13,19 @@ char *bb_xasprintf(const char *format, ...)
int r;
char *string_ptr;
+#ifdef HAVE_GNU_EXTENSIONS
va_start(p, format);
r = vasprintf(&string_ptr, format, p);
va_end(p);
+#else
+ va_start(p, format);
+ r = vsnprintf(NULL, 0, format, p);
+ va_end(p);
+ string_ptr = xmalloc(r+1);
+ va_start(p, format);
+ r = vsnprintf(string_ptr, r+1, format, p);
+ va_end(p);
+#endif
if (r < 0) {
bb_perror_msg_and_die("bb_xasprintf");