mirror of
https://github.com/DaveGamble/cJSON
synced 2024-12-24 15:42:07 +00:00
Use own cJSON_bool boolean type in the header
This commit is contained in:
parent
2e118df0cd
commit
2d3520e0b9
55
cJSON.c
55
cJSON.c
@ -33,9 +33,8 @@
|
||||
#include "cJSON.h"
|
||||
|
||||
/* define our own boolean type */
|
||||
typedef int cjbool;
|
||||
#define true ((cjbool)1)
|
||||
#define false ((cjbool)0)
|
||||
#define true ((cJSON_bool)1)
|
||||
#define false ((cJSON_bool)0)
|
||||
|
||||
static const unsigned char *global_ep = NULL;
|
||||
|
||||
@ -237,7 +236,7 @@ typedef struct
|
||||
unsigned char *buffer;
|
||||
size_t length;
|
||||
size_t offset;
|
||||
cjbool noalloc;
|
||||
cJSON_bool noalloc;
|
||||
} printbuffer;
|
||||
|
||||
/* realloc printbuffer if necessary to have at least "needed" bytes more */
|
||||
@ -361,7 +360,7 @@ static unsigned char *print_number(const cJSON * const item, printbuffer * const
|
||||
unsigned char *output_pointer = NULL;
|
||||
double d = item->valuedouble;
|
||||
int length = 0;
|
||||
cjbool trim_zeroes = true; /* should at the end be removed? */
|
||||
cJSON_bool trim_zeroes = true; /* should at the end be removed? */
|
||||
|
||||
if (output_buffer == NULL)
|
||||
{
|
||||
@ -822,11 +821,11 @@ static unsigned char *print_string(const cJSON * const item, printbuffer * const
|
||||
|
||||
/* Predeclare these prototypes. */
|
||||
static const unsigned char *parse_value(cJSON * const item, const unsigned char * const input, const unsigned char ** const ep, const internal_hooks * const hooks);
|
||||
static unsigned char *print_value(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
|
||||
static unsigned char *print_value(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
|
||||
static const unsigned char *parse_array(cJSON * const item, const unsigned char *input, const unsigned char ** const ep, const internal_hooks * const hooks);
|
||||
static unsigned char *print_array(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
|
||||
static unsigned char *print_array(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
|
||||
static const unsigned char *parse_object(cJSON * const item, const unsigned char *input, const unsigned char ** const ep, const internal_hooks * const hooks);
|
||||
static unsigned char *print_object(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
|
||||
static unsigned char *print_object(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
|
||||
|
||||
/* Utility to jump whitespace and cr/lf */
|
||||
static const unsigned char *skip_whitespace(const unsigned char *in)
|
||||
@ -840,7 +839,7 @@ static const unsigned char *skip_whitespace(const unsigned char *in)
|
||||
}
|
||||
|
||||
/* Parse an object - create a new root, and populate. */
|
||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cjbool require_null_terminated)
|
||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated)
|
||||
{
|
||||
const unsigned char *end = NULL;
|
||||
/* use global error pointer if no specific one was given */
|
||||
@ -887,7 +886,7 @@ CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
|
||||
|
||||
#define min(a, b) ((a < b) ? a : b)
|
||||
|
||||
static unsigned char *print(const cJSON * const item, cjbool format, const internal_hooks * const hooks)
|
||||
static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks)
|
||||
{
|
||||
printbuffer buffer[1];
|
||||
unsigned char *printed = NULL;
|
||||
@ -947,7 +946,7 @@ CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
|
||||
return (char*)print(item, false, &global_hooks);
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cjbool fmt)
|
||||
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
|
||||
{
|
||||
printbuffer p;
|
||||
|
||||
@ -969,7 +968,7 @@ CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cjboo
|
||||
return (char*)print_value(item, 0, fmt, &p, &global_hooks);
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(int) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cjbool fmt)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt)
|
||||
{
|
||||
printbuffer p;
|
||||
|
||||
@ -1040,7 +1039,7 @@ static const unsigned char *parse_value(cJSON * const item, const unsigned char
|
||||
}
|
||||
|
||||
/* Render a value to text. */
|
||||
static unsigned char *print_value(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer, const internal_hooks * const hooks)
|
||||
static unsigned char *print_value(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks)
|
||||
{
|
||||
unsigned char *output = NULL;
|
||||
|
||||
@ -1192,7 +1191,7 @@ fail:
|
||||
}
|
||||
|
||||
/* Render an array to text */
|
||||
static unsigned char *print_array(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer, const internal_hooks * const hooks)
|
||||
static unsigned char *print_array(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks)
|
||||
{
|
||||
unsigned char *output = NULL;
|
||||
unsigned char *output_pointer = NULL;
|
||||
@ -1351,7 +1350,7 @@ fail:
|
||||
}
|
||||
|
||||
/* Render an object to text. */
|
||||
static unsigned char *print_object(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer, const internal_hooks * const hooks)
|
||||
static unsigned char *print_object(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks)
|
||||
{
|
||||
unsigned char *output = NULL;
|
||||
unsigned char *output_pointer = NULL;
|
||||
@ -1522,7 +1521,7 @@ CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const objec
|
||||
return current_element;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_HasObjectItem(const cJSON *object, const char *string)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string)
|
||||
{
|
||||
return cJSON_GetObjectItem(object, string) ? 1 : 0;
|
||||
}
|
||||
@ -1804,7 +1803,7 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
|
||||
return item;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cjbool b)
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b)
|
||||
{
|
||||
cJSON *item = cJSON_New_Item(&global_hooks);
|
||||
if(item)
|
||||
@ -2042,7 +2041,7 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count)
|
||||
}
|
||||
|
||||
/* Duplication */
|
||||
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cjbool recurse)
|
||||
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
|
||||
{
|
||||
cJSON *newitem = NULL;
|
||||
cJSON *child = NULL;
|
||||
@ -2185,7 +2184,7 @@ CJSON_PUBLIC(void) cJSON_Minify(char *json)
|
||||
*into = '\0';
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsInvalid(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2195,7 +2194,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsInvalid(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_Invalid;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsFalse(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2205,7 +2204,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsFalse(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_False;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsTrue(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2216,7 +2215,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsTrue(const cJSON * const item)
|
||||
}
|
||||
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsBool(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2225,7 +2224,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsBool(const cJSON * const item)
|
||||
|
||||
return (item->type & (cJSON_True | cJSON_False)) != 0;
|
||||
}
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsNull(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2235,7 +2234,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsNull(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_NULL;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsNumber(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2245,7 +2244,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsNumber(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_Number;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsString(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2255,7 +2254,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsString(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_String;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsArray(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2265,7 +2264,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsArray(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_Array;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsObject(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
@ -2275,7 +2274,7 @@ CJSON_PUBLIC(cjbool) cJSON_IsObject(const cJSON * const item)
|
||||
return (item->type & 0xFF) == cJSON_Object;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cjbool) cJSON_IsRaw(const cJSON * const item)
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
|
||||
{
|
||||
if (item == NULL)
|
||||
{
|
||||
|
34
cJSON.h
34
cJSON.h
@ -78,6 +78,8 @@ typedef struct cJSON_Hooks
|
||||
void (*free_fn)(void *ptr);
|
||||
} cJSON_Hooks;
|
||||
|
||||
typedef int cJSON_bool;
|
||||
|
||||
#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
|
||||
#define __WINDOWS__
|
||||
#endif
|
||||
@ -129,9 +131,9 @@ CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
|
||||
/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */
|
||||
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
|
||||
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
|
||||
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, int fmt);
|
||||
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
|
||||
/* Render a cJSON entity to text using a buffer already allocated in memory with length buf_len. Returns 1 on success and 0 on failure. */
|
||||
CJSON_PUBLIC(int) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const int fmt);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt);
|
||||
/* Delete a cJSON entity and all subentities. */
|
||||
CJSON_PUBLIC(void) cJSON_Delete(cJSON *c);
|
||||
|
||||
@ -142,27 +144,27 @@ CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int item);
|
||||
/* Get item "string" from object. Case insensitive. */
|
||||
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON *object, const char *string);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON *object, const char *string);
|
||||
CJSON_PUBLIC(int) cJSON_HasObjectItem(const cJSON *object, const char *string);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
|
||||
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
|
||||
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
|
||||
|
||||
/* These functions check the type of an item */
|
||||
CJSON_PUBLIC(int) cJSON_IsInvalid(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsFalse(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsTrue(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsBool(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsNull(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsNumber(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsString(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsArray(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsObject(const cJSON * const item);
|
||||
CJSON_PUBLIC(int) cJSON_IsRaw(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
|
||||
|
||||
/* These calls create a cJSON item of the appropriate type. */
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(int b);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
|
||||
/* raw json */
|
||||
@ -199,14 +201,14 @@ CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newi
|
||||
CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
|
||||
|
||||
/* Duplicate a cJSON item */
|
||||
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, int recurse);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
|
||||
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
|
||||
need to be released. With recurse!=0, it will duplicate any children connected to the item.
|
||||
The item->next and ->prev pointers are always zero on return from Duplicate. */
|
||||
|
||||
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
|
||||
/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error. If not, then cJSON_GetErrorPtr() does the job. */
|
||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, int require_null_terminated);
|
||||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
|
||||
|
||||
CJSON_PUBLIC(void) cJSON_Minify(char *json);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user