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 */ | |||||