--- rpl/src/asprintf.c 2010/01/29 16:49:23 1.2 +++ rpl/src/asprintf.c 2010/02/01 14:05:03 1.3 @@ -1,7 +1,7 @@ /* ================================================================================ RPL/2 (R) version 4.0.10 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -27,55 +27,55 @@ int valsprintf(unsigned char **strp, const char *fmt, va_list ap) { - size_t bs; - size_t s; - unsigned char *b = NULL; - - for(bs = 1024;; bs *= 2) - { - if (b != NULL) - { - free(b); - } + size_t bs; + size_t s; + unsigned char *b = NULL; - if ((b = malloc(sizeof(*b) * bs)) == NULL) + for(bs = 1024;; bs *= 2) { - return -1; + if (b != NULL) + { + free(b); + } + + if ((b = malloc(sizeof(*b) * bs)) == NULL) + { + return -1; + } + + if (((int) (s = vsnprintf(b, bs, fmt, ap))) < 0) + { + free(b); + return -1; + } + + if (s < bs) + { + break; + } } - if (((int) (s = vsnprintf(b, bs, fmt, ap))) < 0) + if (((*strp) = realloc(b, ((s = strlen(b)) + 1) * sizeof(*b))) == NULL) { free(b); return -1; } - if (s < bs) - { - break; - } - } - - if (((*strp) = realloc(b, ((s = strlen(b)) + 1) * sizeof(*b))) == NULL) - { - free(b); - return -1; - } - - return s; + return s; } int alsprintf(unsigned char **strp, const char *fmt, ...) { - int done; - va_list arg; + int done; + va_list arg; - va_start(arg, fmt); - done = valsprintf(strp, fmt, arg); - va_end(arg); + va_start(arg, fmt); + done = valsprintf(strp, fmt, arg); + va_end(arg); - return(done); + return(done); } // vim: ts=4