--- rpl/src/asprintf.c 2010/02/10 10:14:18 1.4 +++ rpl/src/asprintf.c 2014/01/26 18:21:29 1.48 @@ -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.17 + Copyright (C) 1989-2014 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 = (size_t) vsnprintf(b, bs, fmt, cap))) < 0) { free(b); return -1; } - if (s < bs) + if (s < bs) { break; } @@ -61,7 +65,7 @@ valsprintf(unsigned char **strp, const c return -1; } - return s; + return((int) s); }