From 898bab449286ae241a08ed68e324d73118cf0db3 Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Mon, 26 Oct 2015 09:51:00 +0100 Subject: [PATCH] Windows version added --- asprintf.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/asprintf.c b/asprintf.c index a4f200c..759dbee 100644 --- a/asprintf.c +++ b/asprintf.c @@ -2,21 +2,34 @@ #include #include "asprintf.h" +#ifndef va_copy +#define va_copy __va_copy +#endif + int vasprintf(char** pbuffer, const char* format, va_list ap) { va_list ap2; - int len; - FILE* f; + size_t len; +#if defined(vxWorks) + FILE* f; /* print to null device to get required buffer length */ - f = fopen("/null","w"); - if (f == NULL) return -1; - __va_copy(ap2, ap); - len = vfprintf(f, format, ap2); + if ((f = fopen("/null","w")) != NULL) + { + len = vfprintf(f, format, ap2); + fclose(f); + } +#elif defined(_WIN32) + len = _vscprintf(format, ap); +#else + len = vsnprintf(NULL, 0, format, ap); +#endif va_end(ap2); - fclose(f); - if (len < 0) return len; - + if (len <= 0) + { + fprintf(stderr, "vasprintf: too old version on vsnprintf\n"); + return len; + } *pbuffer = malloc(len+1); if (*pbuffer == NULL) return -1; return vsprintf(*pbuffer, format, ap);