From 47f32a76ef9d79fd498a6890392497ec674f10ef Mon Sep 17 00:00:00 2001 From: Alexandru Ardelean Date: Wed, 16 Nov 2016 17:04:41 +0200 Subject: [PATCH] vasprintf_compat.h: spin-off this compat header ; use math_compat.h as template Signed-off-by: Alexandru Ardelean --- CMakeLists.txt | 1 + Makefile.am | 1 + json-c.vcxproj | 1 + json-c.vcxproj.filters | 3 +++ json_pointer.c | 1 + printbuf.c | 42 +-------------------------------------- vasprintf_compat.h | 45 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 53 insertions(+), 41 deletions(-) create mode 100644 vasprintf_compat.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 473e9b7c..8ae09504 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,7 @@ set(JSON_C_HEADERS ./linkhash.h ./math_compat.h ./strdup_compat.h + ./vasprintf_compat.h ./printbuf.h ./random_seed.h ) diff --git a/Makefile.am b/Makefile.am index 64b1a3dd..126ceeb6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -33,6 +33,7 @@ libjson_cinclude_HEADERS = \ linkhash.h \ math_compat.h \ strdup_compat.h \ + vasprintf_compat.h \ printbuf.h \ random_seed.h diff --git a/json-c.vcxproj b/json-c.vcxproj index ab7b5e1f..3a6da616 100644 --- a/json-c.vcxproj +++ b/json-c.vcxproj @@ -152,6 +152,7 @@ copy json_config.h.win32 json_config.h + diff --git a/json-c.vcxproj.filters b/json-c.vcxproj.filters index 3c6f43df..7fd4dd0b 100644 --- a/json-c.vcxproj.filters +++ b/json-c.vcxproj.filters @@ -83,6 +83,9 @@ Header Files + + Header Files + Header Files diff --git a/json_pointer.c b/json_pointer.c index 9cf3f160..3648f8d6 100644 --- a/json_pointer.c +++ b/json_pointer.c @@ -17,6 +17,7 @@ #include "json_pointer.h" #include "strdup_compat.h" +#include "vasprintf_compat.h" /** * JavaScript Object Notation (JSON) Pointer diff --git a/printbuf.c b/printbuf.c index a40b89d5..2745339c 100644 --- a/printbuf.c +++ b/printbuf.c @@ -27,6 +27,7 @@ #include "debug.h" #include "printbuf.h" +#include "vasprintf_compat.h" static int printbuf_extend(struct printbuf *p, int min_size); @@ -110,47 +111,6 @@ int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len) return 0; } -#if !defined(HAVE_VSNPRINTF) && defined(_MSC_VER) -# define vsnprintf _vsnprintf -#elif !defined(HAVE_VSNPRINTF) /* !HAVE_VSNPRINTF */ -# error Need vsnprintf! -#endif /* !HAVE_VSNPRINTF && defined(WIN32) */ - -#if !defined(HAVE_VASPRINTF) -/* CAW: compliant version of vasprintf */ -static int vasprintf(char **buf, const char *fmt, va_list ap) -{ -#ifndef WIN32 - static char _T_emptybuffer = '\0'; -#endif /* !defined(WIN32) */ - int chars; - char *b; - - if(!buf) { return -1; } - -#ifdef WIN32 - chars = _vscprintf(fmt, ap)+1; -#else /* !defined(WIN32) */ - /* CAW: RAWR! We have to hope to god here that vsnprintf doesn't overwrite - our buffer like on some 64bit sun systems.... but hey, its time to move on */ - chars = vsnprintf(&_T_emptybuffer, 0, fmt, ap)+1; - if(chars < 0) { chars *= -1; } /* CAW: old glibc versions have this problem */ -#endif /* defined(WIN32) */ - - b = (char*)malloc(sizeof(char)*chars); - if(!b) { return -1; } - - if((chars = vsprintf(b, fmt, ap)) < 0) - { - free(b); - } else { - *buf = b; - } - - return chars; -} -#endif /* !HAVE_VASPRINTF */ - int sprintbuf(struct printbuf *p, const char *msg, ...) { va_list ap; diff --git a/vasprintf_compat.h b/vasprintf_compat.h new file mode 100644 index 00000000..51e234b3 --- /dev/null +++ b/vasprintf_compat.h @@ -0,0 +1,45 @@ +#ifndef __vasprintf_compat_h +#define __vasprintf_compat_h + +#if !defined(HAVE_VSNPRINTF) && defined(_MSC_VER) +# define vsnprintf _vsnprintf +#elif !defined(HAVE_VSNPRINTF) /* !HAVE_VSNPRINTF */ +# error Need vsnprintf! +#endif /* !HAVE_VSNPRINTF && defined(WIN32) */ + +#if !defined(HAVE_VASPRINTF) +/* CAW: compliant version of vasprintf */ +static int vasprintf(char **buf, const char *fmt, va_list ap) +{ +#ifndef WIN32 + static char _T_emptybuffer = '\0'; +#endif /* !defined(WIN32) */ + int chars; + char *b; + + if(!buf) { return -1; } + +#ifdef WIN32 + chars = _vscprintf(fmt, ap)+1; +#else /* !defined(WIN32) */ + /* CAW: RAWR! We have to hope to god here that vsnprintf doesn't overwrite + our buffer like on some 64bit sun systems.... but hey, its time to move on */ + chars = vsnprintf(&_T_emptybuffer, 0, fmt, ap)+1; + if(chars < 0) { chars *= -1; } /* CAW: old glibc versions have this problem */ +#endif /* defined(WIN32) */ + + b = (char*)malloc(sizeof(char)*chars); + if(!b) { return -1; } + + if((chars = vsprintf(b, fmt, ap)) < 0) + { + free(b); + } else { + *buf = b; + } + + return chars; +} +#endif /* !HAVE_VASPRINTF */ + +#endif /* __vasprintf_compat_h */ -- 2.39.5