mirror of
https://github.com/DaveGamble/cJSON.git
synced 2023-08-10 21:13:26 +03:00
Add compare_strings: configurable case_sensitivity
This commit is contained in:
parent
23cbb173d4
commit
2616db9e92
@ -50,8 +50,8 @@ static unsigned char* cJSONUtils_strdup(const unsigned char* const string)
|
||||
return copy;
|
||||
}
|
||||
|
||||
/* 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)
|
||||
/* string comparison which doesn't consider NULL pointers equal */
|
||||
static int compare_strings(const unsigned char *string1, const unsigned char *string2, const cJSON_bool case_sensitive)
|
||||
{
|
||||
if ((string1 == NULL) || (string2 == NULL))
|
||||
{
|
||||
@ -63,6 +63,11 @@ static int case_insensitive_strcmp(const unsigned char *string1, const unsigned
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (case_sensitive)
|
||||
{
|
||||
return strcmp((const char*)string1, (const char*)string2);
|
||||
}
|
||||
|
||||
for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
|
||||
{
|
||||
if (*string1 == '\0')
|
||||
@ -432,7 +437,7 @@ static cJSON_bool compare_json(cJSON *a, cJSON *b)
|
||||
|
||||
case cJSON_String:
|
||||
/* string mismatch. */
|
||||
if (strcmp(a->valuestring, b->valuestring) != 0)
|
||||
if (compare_strings((unsigned char*)a->valuestring, (unsigned char*)b->valuestring, true) != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -468,7 +473,7 @@ static cJSON_bool compare_json(cJSON *a, cJSON *b)
|
||||
{
|
||||
cJSON_bool identical = false;
|
||||
/* compare object keys */
|
||||
if (case_insensitive_strcmp((unsigned char*)a->string, (unsigned char*)b->string))
|
||||
if (compare_strings((unsigned char*)a->string, (unsigned char*)b->string, false))
|
||||
{
|
||||
/* missing member */
|
||||
return false;
|
||||
@ -909,7 +914,7 @@ static void create_patches(cJSON * const patches, const unsigned char * const pa
|
||||
return;
|
||||
|
||||
case cJSON_String:
|
||||
if (strcmp(from->valuestring, to->valuestring) != 0)
|
||||
if (compare_strings((unsigned char*)from->valuestring, (unsigned char*)to->valuestring, true) != 0)
|
||||
{
|
||||
compose_patch(patches, (const unsigned char*)"replace", path, NULL, to);
|
||||
}
|
||||
@ -983,7 +988,7 @@ static void create_patches(cJSON * const patches, const unsigned char * const pa
|
||||
}
|
||||
else
|
||||
{
|
||||
diff = case_insensitive_strcmp((unsigned char*)from_child->string, (unsigned char*)to_child->string);
|
||||
diff = compare_strings((unsigned char*)from_child->string, (unsigned char*)to_child->string, false);
|
||||
}
|
||||
|
||||
if (diff == 0)
|
||||
@ -1049,7 +1054,7 @@ static cJSON *sort_list(cJSON *list)
|
||||
return result;
|
||||
}
|
||||
|
||||
while ((current_item != NULL) && (current_item->next != NULL) && (case_insensitive_strcmp((unsigned char*)current_item->string, (unsigned char*)current_item->next->string) < 0))
|
||||
while ((current_item != NULL) && (current_item->next != NULL) && (compare_strings((unsigned char*)current_item->string, (unsigned char*)current_item->next->string, false) < 0))
|
||||
{
|
||||
/* Test for list sorted. */
|
||||
current_item = current_item->next;
|
||||
@ -1088,7 +1093,7 @@ static cJSON *sort_list(cJSON *list)
|
||||
while ((first != NULL) && (second != NULL))
|
||||
{
|
||||
cJSON *smaller = NULL;
|
||||
if (case_insensitive_strcmp((unsigned char*)first->string, (unsigned char*)second->string) < 0)
|
||||
if (compare_strings((unsigned char*)first->string, (unsigned char*)second->string, false) < 0)
|
||||
{
|
||||
smaller = first;
|
||||
}
|
||||
@ -1213,7 +1218,7 @@ CJSON_PUBLIC(cJSON *) cJSONUtils_GenerateMergePatch(cJSON * const from, cJSON *
|
||||
{
|
||||
if (to_child != NULL)
|
||||
{
|
||||
diff = strcmp(from_child->string, to_child->string);
|
||||
diff = compare_strings((unsigned char*)from_child->string, (unsigned char*)to_child->string, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user