Don't use vasprintf() anymore on Windows.
authorGuus Sliepen <guus@sliepen.org>
Wed, 17 Jul 2013 16:08:58 +0000 (18:08 +0200)
committerGuus Sliepen <guus@sliepen.org>
Wed, 17 Jul 2013 16:08:58 +0000 (18:08 +0200)
Windows doesn't actually support it, but MinGW provides it. However, with some versions of
MinGW it doesn't work correctly. Instead, we vsnprintf() to a local buffer and xstrdup() the
results.

lib/xmalloc.c

index e4079ce..58f2bce 100644 (file)
@@ -147,10 +147,18 @@ int xasprintf(char **strp, const char *fmt, ...) {
 }
 
 int xvasprintf(char **strp, const char *fmt, va_list ap) {
+#ifdef HAVE_MINGW
+       char buf[1024];
+       int result = vsnprintf(buf, sizeof buf, fmt, ap);
+       if(result < 0)
+               exit(xalloc_exit_failure);
+       *strp = xstrdup(buf);
+#else
        int result = vasprintf(strp, fmt, ap);
        if(result < 0) {
                fprintf(stderr, "vasprintf() failed: %s\n", strerror(errno));
                exit(xalloc_exit_failure);
        }
+#endif
        return result;
 }