mirror of
https://github.com/DaveGamble/cJSON.git
synced 2023-08-10 21:13:26 +03:00
Windows/c++ support (with thanks to Ron Hall):
added strcasecmp->stricmp added (char*) casts to all mallocs (as reqd by c++) added skip(value) to cJSON_Parse to allow for whitespace before the actual data git-svn-id: http://svn.code.sf.net/p/cjson/code@5 e3330c51-1366-4df0-8b21-3ccf24e3d50e
This commit is contained in:
parent
733e62f9f4
commit
6d50358e26
20
cJSON.c
20
cJSON.c
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user