1 #ifndef __vasprintf_compat_h 2 #define __vasprintf_compat_h 3 4 /** 5 * @file 6 * @brief Do not use, json-c internal, may be changed or removed at any time. 7 */ 8 9 #include "snprintf_compat.h" 10 11 #include <stdlib.h> 12 13 #if !defined(HAVE_VASPRINTF) 14 /* CAW: compliant version of vasprintf */ 15 static int vasprintf(char **buf, const char *fmt, va_list ap) 16 { 17 #ifndef WIN32 18 static char _T_emptybuffer = '\0'; 19 #endif /* !defined(WIN32) */ 20 int chars; 21 char *b; 22 23 if (!buf) 24 { 25 return -1; 26 } 27 28 #ifdef WIN32 29 chars = _vscprintf(fmt, ap) + 1; 30 #else /* !defined(WIN32) */ 31 /* CAW: RAWR! We have to hope to god here that vsnprintf doesn't overwrite 32 * our buffer like on some 64bit sun systems.... but hey, its time to move on 33 */ 34 chars = vsnprintf(&_T_emptybuffer, 0, fmt, ap) + 1; 35 if (chars < 0) 36 { 37 chars *= -1; 38 } /* CAW: old glibc versions have this problem */ 39 #endif /* defined(WIN32) */ 40 41 b = (char *)malloc(sizeof(char) * chars); 42 if (!b) 43 { 44 return -1; 45 } 46 47 if ((chars = vsprintf(b, fmt, ap)) < 0) 48 { 49 free(b); 50 } 51 else 52 { 53 *buf = b; 54 } 55 56 return chars; 57 } 58 #endif /* !HAVE_VASPRINTF */ 59 60 #endif /* __vasprintf_compat_h */ 61
This page was automatically generated by LXR 0.3.1. • OpenWrt