--- rpl/src/asprintf.c 2010/01/29 11:38:15 1.1 +++ rpl/src/asprintf.c 2010/08/26 19:07:34 1.15 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.0.19 + Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,65 +20,66 @@ */ -#include -#include -#include -#include -#include +#include "rpl.h" + int -vasprintf(char **strp, const char *fmt, va_list ap) +valsprintf(unsigned char **strp, const char *fmt, va_list ap) { - size_t bs; - size_t s; - char *b = NULL; - - for(bs = 1024;; bs *= 2) - { - if (b != NULL) - { - free(b); - } + size_t bs; + size_t s; + + unsigned char *b = NULL; + + va_list cap; - if ((b = malloc(sizeof(*b) * bs)) == NULL) + for(bs = 1024;; bs *= 2) { - return -1; + va_copy(cap, ap); + + if (b != NULL) + { + free(b); + } + + if ((b = malloc(sizeof(*b) * bs)) == NULL) + { + return -1; + } + + if (((int) (s = vsnprintf(b, bs, fmt, cap))) < 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 -asprintf(char **strp, const char *fmt, ...) +alsprintf(unsigned char **strp, const char *fmt, ...) { - int done; - va_list arg; + int done; + va_list arg; - va_start(arg, fmt); - done = vasprintf(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