• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/json-c/vasprintf_compat.h

  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