--- rpl/src/asprintf.c 2010/02/10 10:14:18 1.4 +++ rpl/src/asprintf.c 2011/04/21 16:00:53 1.20 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0.prerelease.0 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -21,7 +21,6 @@ #include "rpl.h" -#include int @@ -29,27 +28,32 @@ valsprintf(unsigned char **strp, const c { size_t bs; size_t s; + unsigned char *b = NULL; + va_list cap; + for(bs = 1024;; bs *= 2) { + va_copy(cap, ap); + if (b != NULL) { free(b); } - if ((b = malloc(sizeof(*b) * bs)) == NULL) + if ((b = malloc(sizeof(*b) * bs)) == NULL) { return -1; } - if (((int) (s = vsnprintf(b, bs, fmt, ap))) < 0) + if (((int) (s = vsnprintf(b, bs, fmt, cap))) < 0) { free(b); return -1; } - if (s < bs) + if (s < bs) { break; }