From d4318da1d4c6a337264b1c5248601f35e6e6eb9e Mon Sep 17 00:00:00 2001 From: hpa Date: Tue, 21 Dec 2004 04:56:37 +0000 Subject: [PATCH] Add [v]asprintf --- com32/lib/asprintf.c | 30 ++++++++++++++++++++++++++++++ com32/lib/vasprintf.c | 25 +++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 com32/lib/asprintf.c create mode 100644 com32/lib/vasprintf.c diff --git a/com32/lib/asprintf.c b/com32/lib/asprintf.c new file mode 100644 index 0000000..6002b57 --- /dev/null +++ b/com32/lib/asprintf.c @@ -0,0 +1,30 @@ +/* + * asprintf.c + */ + +#include +#include +#include + +int asprintf(char **bufp, const char *format, ...) +{ + va_list ap, ap1; + int rv; + int bytes; + char *p; + + va_start(ap, format); + va_copy(ap1, ap); + + bytes = vsnprintf(NULL, 0, format, ap1) + 1; + va_end(ap1); + + *bufp = p = malloc(bytes); + if ( !p ) + return -1; + + rv = vsnprintf(p, bytes, format, ap); + va_end(ap); + + return rv; +} diff --git a/com32/lib/vasprintf.c b/com32/lib/vasprintf.c new file mode 100644 index 0000000..657bfdc --- /dev/null +++ b/com32/lib/vasprintf.c @@ -0,0 +1,25 @@ +/* + * vasprintf.c + */ + +#include +#include +#include + +int vasprintf(char **bufp, const char *format, va_list ap) +{ + va_list ap1; + int bytes; + char *p; + + va_copy(ap1, ap); + + bytes = vsnprintf(NULL, 0, format, ap1) + 1; + va_end(ap1); + + *bufp = p = malloc(bytes); + if ( !p ) + return -1; + + return vsnprintf(p, bytes, format, ap); +} -- 2.7.4