|
@@ -70,23 +70,17 @@ CJSON_PUBLIC(const char*) cJSON_Version(void)
|
|
|
return version;
|
|
|
}
|
|
|
|
|
|
-/* case insensitive strcmp */
|
|
|
-static int cJSON_strcasecmp(const unsigned char *string1, const unsigned char *string2)
|
|
|
+/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */
|
|
|
+static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2)
|
|
|
{
|
|
|
- if (string1 == NULL)
|
|
|
+ if ((string1 == NULL) || (string2 == NULL))
|
|
|
{
|
|
|
- if (string2 == NULL)
|
|
|
- {
|
|
|
- /* both NULL */
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
- if (string2 == NULL)
|
|
|
+ if (string1 == string2)
|
|
|
{
|
|
|
- return 1;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
|
|
@@ -97,7 +91,7 @@ static int cJSON_strcasecmp(const unsigned char *string1, const unsigned char *s
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return tolower(string1[0]) - tolower(string2[0]);
|
|
|
+ return tolower(*string1) - tolower(*string2);
|
|
|
}
|
|
|
|
|
|
typedef struct internal_hooks
|
|
@@ -1686,7 +1680,7 @@ CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int item)
|
|
|
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON *object, const char *string)
|
|
|
{
|
|
|
cJSON *c = object ? object->child : NULL;
|
|
|
- while (c && cJSON_strcasecmp((unsigned char*)c->string, (const unsigned char*)string))
|
|
|
+ while (c && !case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string))
|
|
|
{
|
|
|
c = c->next;
|
|
|
}
|
|
@@ -1860,7 +1854,7 @@ CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *stri
|
|
|
{
|
|
|
size_t i = 0;
|
|
|
cJSON *c = object->child;
|
|
|
- while (c && cJSON_strcasecmp((unsigned char*)c->string, (const unsigned char*)string))
|
|
|
+ while (c && !case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string))
|
|
|
{
|
|
|
i++;
|
|
|
c = c->next;
|
|
@@ -1948,7 +1942,7 @@ CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string,
|
|
|
{
|
|
|
size_t i = 0;
|
|
|
cJSON *c = object->child;
|
|
|
- while(c && cJSON_strcasecmp((unsigned char*)c->string, (const unsigned char*)string))
|
|
|
+ while(c && !case_insensitive_strcmp((unsigned char*)c->string, (const unsigned char*)string))
|
|
|
{
|
|
|
i++;
|
|
|
c = c->next;
|