diff --git a/cJSON.c b/cJSON.c index c73ff03..471cdf3 100644 --- a/cJSON.c +++ b/cJSON.c @@ -1677,34 +1677,44 @@ CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int item) return c; } -CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON *object, const char *string) -{ - cJSON *c = object ? object->child : NULL; - while (c && !case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string)) - { - c = c->next; - } - return c; -} - -CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string) +static cJSON *get_object_item(const cJSON * const object, const char * const name, const cJSON_bool case_sensitive) { cJSON *current_element = NULL; - if ((object == NULL) || (string == NULL)) + if ((object == NULL) || (name == NULL)) { return NULL; } current_element = object->child; - while ((current_element != NULL) && (strcmp(string, current_element->string) != 0)) + if (case_sensitive) { - current_element = current_element->next; + while ((current_element != NULL) && (strcmp(name, current_element->string) != 0)) + { + current_element = current_element->next; + } + } + else + { + while ((current_element != NULL) && (case_insensitive_strcmp((const unsigned char*)name, (const unsigned char*)(current_element->string)) != 0)) + { + current_element = current_element->next; + } } return current_element; } +CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON *object, const char *string) +{ + return get_object_item(object, string, false); +} + +CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string) +{ + return get_object_item(object, string, true); +} + CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string) { return cJSON_GetObjectItem(object, string) ? 1 : 0; @@ -1854,7 +1864,7 @@ CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *stri { size_t i = 0; cJSON *c = object->child; - while (c && !case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string)) + while (c && (case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string) != 0)) { i++; c = c->next; @@ -1942,7 +1952,7 @@ CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string, { size_t i = 0; cJSON *c = object->child; - while(c && !case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string)) + while(c && (case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string) != 0)) { i++; c = c->next;