# HG changeset patch # User Matti Hamalainen # Date 1308816630 -10800 # Node ID b3556ff686fc7391f360bab0c779d826bc3ff94f # Parent b465a17ffa47eab562bd7f9b4541961ecc5fa12e Fix th_strdup_vprintf(). diff -r b465a17ffa47 -r b3556ff686fc th_string.c --- a/th_string.c Thu Jun 23 10:37:11 2011 +0300 +++ b/th_string.c Thu Jun 23 11:10:30 2011 +0300 @@ -58,21 +58,27 @@ */ char * th_strdup_vprintf(const char *fmt, va_list args) { - int size = 100; + int size = 64; char *buf, *nbuf = NULL; if ((buf = th_malloc(size)) == NULL) return NULL; + fprintf(stderr, "th_strdup_vprintf(\"%s\", ...):\n", fmt); while (1) { - int n = vsnprintf(buf, size, fmt, args); + int n; + va_list ap; + va_copy(ap, args); + n = vsnprintf(buf, size, fmt, ap); + va_end(ap); + if (n > -1 && n < size) return buf; if (n > -1) size = n + 1; else size *= 2; - + if ((nbuf = th_realloc(nbuf, size)) == NULL) { th_free(buf); return NULL;