]> git.cameronkatri.com Git - mandoc.git/blobdiff - compat_vasprintf.c
do not crash when a tbl(7) cell uses roman font
[mandoc.git] / compat_vasprintf.c
index 9524bc04f40d5b2626ec1e52ce75cf9f7f0f3073..11556c0155b896151db45997ef3ac4b8670d55d5 100644 (file)
@@ -1,12 +1,4 @@
-#include "config.h"
-
-#if HAVE_VASPRINTF
-
-int dummy;
-
-#else
-
-/*     $Id: compat_vasprintf.c,v 1.1 2015/03/19 14:57:29 schwarze Exp $        */
+/* $Id: compat_vasprintf.c,v 1.4 2020/06/15 01:37:15 schwarze Exp $ */
 /*
  * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -28,6 +20,7 @@ int dummy;
  * printf(3) or completely reimplementing printf(3), i can't think
  * of another portable solution.
  */
+#include "config.h"
 
 #include <stdarg.h>
 #include <stdio.h>
@@ -37,16 +30,18 @@ int
 vasprintf(char **ret, const char *format, va_list ap)
 {
        char     buf[2];
+       va_list  ap2;
        int      sz;
 
-       if ((sz = vsnprintf(buf, sizeof(buf), format, ap)) != -1 &&
-           (*ret = malloc(sz + 1)) != NULL) {
+       va_copy(ap2, ap);
+       sz = vsnprintf(buf, sizeof(buf), format, ap2);
+       va_end(ap2);
+
+       if (sz != -1 && (*ret = malloc(sz + 1)) != NULL) {
                if (vsnprintf(*ret, sz + 1, format, ap) == sz)
-                       return(sz);
+                       return sz;
                free(*ret);
        }
        *ret = NULL;
-       return(-1);
+       return -1;
 }
-
-#endif