@ -30,6 +30,10 @@
# include <float.h>
# include <float.h>
# include "cJSON.h"
# include "cJSON.h"
# ifdef WINDOWS
# define strcasecmp stricmp
# endif
// Internal constructor.
// Internal constructor.
static cJSON * cJSON_New_Item ( ) { return ( cJSON * ) calloc ( sizeof ( cJSON ) , 1 ) ; }
static cJSON * cJSON_New_Item ( ) { return ( cJSON * ) calloc ( sizeof ( cJSON ) , 1 ) ; }
@ -78,12 +82,12 @@ static char *print_number(cJSON *item)
double d = item - > valuedouble ;
double d = item - > valuedouble ;
if ( fabs ( ( ( double ) item - > valueint ) - d ) < = DBL_EPSILON )
if ( fabs ( ( ( double ) item - > valueint ) - d ) < = DBL_EPSILON )
{
{
str = malloc ( 21 ) ; // 2^64+1 can be represented in 21 chars.
str = ( char * ) malloc ( 21 ) ; // 2^64+1 can be represented in 21 chars.
sprintf ( str , " %d " , item - > valueint ) ;
sprintf ( str , " %d " , item - > valueint ) ;
}
}
else
else
{
{
str = malloc ( 64 ) ; // This is a nice tradeoff.
str = ( char * ) malloc ( 64 ) ; // This is a nice tradeoff.
if ( fabs ( d ) < 1.0e-6 | | fabs ( d ) > 1.0e9 ) sprintf ( str , " %e " , d ) ;
if ( fabs ( d ) < 1.0e-6 | | fabs ( d ) > 1.0e9 ) sprintf ( str , " %e " , d ) ;
else sprintf ( str , " %f " , d ) ;
else sprintf ( str , " %f " , d ) ;
}
}
@ -181,8 +185,11 @@ static char *print_array(cJSON *item,int depth);
static const char * parse_object ( cJSON * item , const char * value ) ;
static const char * parse_object ( cJSON * item , const char * value ) ;
static char * print_object ( cJSON * item , int depth ) ;
static char * print_object ( cJSON * item , int depth ) ;
// Utility to jump whitespace and cr/lf
static const char * skip ( const char * in ) { while ( in & & * in < = 32 ) in + + ; return in ; }
// Parse an object - create a new root, and populate.
// Parse an object - create a new root, and populate.
cJSON * cJSON_Parse ( const char * value ) { cJSON * c = cJSON_New_Item ( ) ; parse_value ( c , value ) ; return c ; }
cJSON * cJSON_Parse ( const char * value ) { cJSON * c = cJSON_New_Item ( ) ; parse_value ( c , skip ( value ) ) ; return c ; }
// Render a cJSON item/entity/structure to text.
// Render a cJSON item/entity/structure to text.
char * cJSON_Print ( cJSON * item ) { return print_value ( item , 0 ) ; }
char * cJSON_Print ( cJSON * item ) { return print_value ( item , 0 ) ; }
@ -218,9 +225,6 @@ static char *print_value(cJSON *item,int depth)
return out ;
return out ;
}
}
// Utility to jump whitespace and cr/lf
static const char * skip ( const char * in ) { while ( in & & * in < = 32 ) in + + ; return in ; }
// Build an array from input text.
// Build an array from input text.
static const char * parse_array ( cJSON * item , const char * value )
static const char * parse_array ( cJSON * item , const char * value )
{
{
@ -252,7 +256,7 @@ static char *print_array(cJSON *item,int depth)
char * out , * ptr , * ret ; int len = 5 ;
char * out , * ptr , * ret ; int len = 5 ;
cJSON * child = item - > child ;
cJSON * child = item - > child ;
out = malloc ( len ) ; * out = ' [ ' ;
out = ( char * ) malloc ( len ) ; * out = ' [ ' ;
ptr = out + 1 ; * ptr = 0 ;
ptr = out + 1 ; * ptr = 0 ;
while ( child )
while ( child )
{
{
@ -307,7 +311,7 @@ static char *print_object(cJSON *item,int depth)
char * out , * ptr , * ret , * str ; int len = 7 , i ;
char * out , * ptr , * ret , * str ; int len = 7 , i ;
cJSON * child = item - > child ;
cJSON * child = item - > child ;
depth + + ; out = malloc ( len + depth ) ; * out = ' { ' ;
depth + + ; out = ( char * ) malloc ( len + depth ) ; * out = ' { ' ;
ptr = out + 1 ; * ptr + + = ' \n ' ; * ptr = 0 ;
ptr = out + 1 ; * ptr + + = ' \n ' ; * ptr = 0 ;
while ( child )
while ( child )
{
{