]> git.cameronkatri.com Git - mandoc.git/blobdiff - compat_vasprintf.c
If we have to reparse the text line because we spring an input line trap,
[mandoc.git] / compat_vasprintf.c
index 9524bc04f40d5b2626ec1e52ce75cf9f7f0f3073..f5741427355cc30555132648528b4aa9829cca5e 100644 (file)
@@ -6,7 +6,7 @@ int dummy;
 
 #else
 
-/*     $Id: compat_vasprintf.c,v 1.1 2015/03/19 14:57:29 schwarze Exp $        */
+/*     $Id: compat_vasprintf.c,v 1.2 2015/03/20 15:25:12 schwarze Exp $        */
 /*
  * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -37,10 +37,14 @@ 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);
                free(*ret);