12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #ifndef __vasprintf_compat_h
- #define __vasprintf_compat_h
- /**
- * @file
- * @brief Do not use, json-c internal, may be changed or removed at any time.
- */
- #include "snprintf_compat.h"
- #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 */
|