Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>tags/json-c-0.13-20171207
@@ -37,6 +37,7 @@ set(JSON_C_HEADERS | |||||
./linkhash.h | ./linkhash.h | ||||
./math_compat.h | ./math_compat.h | ||||
./strdup_compat.h | ./strdup_compat.h | ||||
./vasprintf_compat.h | |||||
./printbuf.h | ./printbuf.h | ||||
./random_seed.h | ./random_seed.h | ||||
) | ) | ||||
@@ -33,6 +33,7 @@ libjson_cinclude_HEADERS = \ | |||||
linkhash.h \ | linkhash.h \ | ||||
math_compat.h \ | math_compat.h \ | ||||
strdup_compat.h \ | strdup_compat.h \ | ||||
vasprintf_compat.h \ | |||||
printbuf.h \ | printbuf.h \ | ||||
random_seed.h | random_seed.h | ||||
@@ -152,6 +152,7 @@ copy json_config.h.win32 json_config.h | |||||
<ClInclude Include="linkhash.h" /> | <ClInclude Include="linkhash.h" /> | ||||
<ClInclude Include="math_compat.h" /> | <ClInclude Include="math_compat.h" /> | ||||
<ClInclude Include="strdup_compat.h" /> | <ClInclude Include="strdup_compat.h" /> | ||||
<ClInclude Include="vasprintf_compat.h" /> | |||||
<ClInclude Include="printbuf.h" /> | <ClInclude Include="printbuf.h" /> | ||||
<ClInclude Include="random_seed.h" /> | <ClInclude Include="random_seed.h" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -83,6 +83,9 @@ | |||||
<ClInclude Include="strdup_compat.h"> | <ClInclude Include="strdup_compat.h"> | ||||
<Filter>Header Files</Filter> | <Filter>Header Files</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="vasprintf_compat.h"> | |||||
<Filter>Header Files</Filter> | |||||
</ClInclude> | |||||
<ClInclude Include="random_seed.h"> | <ClInclude Include="random_seed.h"> | ||||
<Filter>Header Files</Filter> | <Filter>Header Files</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
@@ -17,6 +17,7 @@ | |||||
#include "json_pointer.h" | #include "json_pointer.h" | ||||
#include "strdup_compat.h" | #include "strdup_compat.h" | ||||
#include "vasprintf_compat.h" | |||||
/** | /** | ||||
* JavaScript Object Notation (JSON) Pointer | * JavaScript Object Notation (JSON) Pointer | ||||
@@ -27,6 +27,7 @@ | |||||
#include "debug.h" | #include "debug.h" | ||||
#include "printbuf.h" | #include "printbuf.h" | ||||
#include "vasprintf_compat.h" | |||||
static int printbuf_extend(struct printbuf *p, int min_size); | 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; | 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, ...) | int sprintbuf(struct printbuf *p, const char *msg, ...) | ||||
{ | { | ||||
va_list ap; | va_list ap; | ||||
@@ -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 */ |