diff --git a/cJSON.c b/cJSON.c index 47cc198d824549616ca0c1d6fa221171f5e4055d..d1f1e9b4dc492b5509ec8276f466a434b8eed922 100644 --- a/cJSON.c +++ b/cJSON.c @@ -23,7 +23,10 @@ /* cJSON */ /* JSON parser in C. */ +#ifdef __GNUC__ #pragma GCC visibility push(default) +#endif + #include #include #include @@ -32,7 +35,10 @@ #include #include #include + +#ifdef __GNUC__ #pragma GCC visibility pop +#endif #include "cJSON.h" @@ -956,7 +962,7 @@ static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer) /* Parse an object - create a new root, and populate. */ CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated) { - parse_buffer buffer; + parse_buffer buffer = { 0 }; cJSON *item = NULL; /* reset error position */ @@ -1040,7 +1046,7 @@ CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value) return cJSON_ParseWithOpts(value, 0, 0); } -#define min(a, b) ((a < b) ? a : b) +#define cjson_min(a, b) ((a < b) ? a : b) static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks) { @@ -1079,7 +1085,7 @@ static unsigned char *print(const cJSON * const item, cJSON_bool format, const i { goto fail; } - memcpy(printed, buffer->buffer, min(buffer->length, buffer->offset + 1)); + memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1)); printed[buffer->offset] = '\0'; /* just to be sure */ /* free the buffer */ @@ -1771,7 +1777,10 @@ CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSO #if defined (__clang__) || ((__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))) #pragma GCC diagnostic push #endif +#ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wcast-qual" +#endif + /* Add an item to an object with constant string as key */ CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item) { diff --git a/cJSON.h b/cJSON.h index 3d621e48a3f8c1d467ca4ddb77bc6f15071113d5..7199520c1dc5037fa60396ad13de7143d746a6b9 100644 --- a/cJSON.h +++ b/cJSON.h @@ -150,7 +150,7 @@ CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array); 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(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const 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);