mirror of
https://github.com/DaveGamble/cJSON.git
synced 2023-08-10 21:13:26 +03:00
Make string comparison case sensitive
This fixes an incompatibility with the JSON standard.
This commit is contained in:
parent
a66da1e560
commit
9ef2ad2f54
28
cJSON.c
28
cJSON.c
@ -39,28 +39,6 @@ const char *cJSON_GetErrorPtr(void)
|
||||
return global_ep;
|
||||
}
|
||||
|
||||
/* case insensitive strcmp */
|
||||
static int cJSON_strcasecmp(const char *s1, const char *s2)
|
||||
{
|
||||
if (!s1)
|
||||
{
|
||||
return (s1 == s2) ? 0 : 1; /* both NULL? */
|
||||
}
|
||||
if (!s2)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
for(; tolower(*(const unsigned char *)s1) == tolower(*(const unsigned char *)s2); ++s1, ++s2)
|
||||
{
|
||||
if (*s1 == '\0')
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return tolower(*(const unsigned char *)s1) - tolower(*(const unsigned char *)s2);
|
||||
}
|
||||
|
||||
static cJSON_Hooks global_hooks = { malloc, free };
|
||||
|
||||
static char* cJSON_strdup(const char* str, const cJSON_Hooks * const hooks)
|
||||
@ -1612,7 +1590,7 @@ cJSON *cJSON_GetArrayItem(const cJSON *array, size_t item)
|
||||
cJSON *cJSON_GetObjectItem(const cJSON *object, const char *string)
|
||||
{
|
||||
cJSON *c = object ? object->child : NULL;
|
||||
while (c && cJSON_strcasecmp(c->string, string))
|
||||
while (c && strcmp(c->string, string))
|
||||
{
|
||||
c = c->next;
|
||||
}
|
||||
@ -1760,7 +1738,7 @@ cJSON *cJSON_DetachItemFromObject(cJSON *object, const char *string)
|
||||
{
|
||||
size_t i = 0;
|
||||
cJSON *c = object->child;
|
||||
while (c && cJSON_strcasecmp(c->string,string))
|
||||
while (c && strcmp(c->string,string))
|
||||
{
|
||||
i++;
|
||||
c = c->next;
|
||||
@ -1847,7 +1825,7 @@ void internal_cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON
|
||||
{
|
||||
size_t i = 0;
|
||||
cJSON *c = object->child;
|
||||
while(c && cJSON_strcasecmp(c->string, string))
|
||||
while(c && strcmp(c->string, string))
|
||||
{
|
||||
i++;
|
||||
c = c->next;
|
||||
|
@ -19,29 +19,8 @@ static char* cJSONUtils_strdup(const char* str)
|
||||
return copy;
|
||||
}
|
||||
|
||||
static int cJSONUtils_strcasecmp(const char *s1, const char *s2)
|
||||
{
|
||||
if (!s1)
|
||||
{
|
||||
return (s1 == s2) ? 0 : 1; /* both NULL? */
|
||||
}
|
||||
if (!s2)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
for(; tolower(*s1) == tolower(*s2); ++s1, ++s2)
|
||||
{
|
||||
if(*s1 == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return tolower(*(const unsigned char *)s1) - tolower(*(const unsigned char *)s2);
|
||||
}
|
||||
|
||||
/* JSON Pointer implementation: */
|
||||
static int cJSONUtils_Pstrcasecmp(const char *a, const char *e)
|
||||
static int cJSONUtils_Pstrcmp(const char *a, const char *e)
|
||||
{
|
||||
if (!a || !e)
|
||||
{
|
||||
@ -62,7 +41,7 @@ static int cJSONUtils_Pstrcasecmp(const char *a, const char *e)
|
||||
e++;
|
||||
}
|
||||
}
|
||||
else if (tolower(*a) != tolower(*e))
|
||||
else if (*a != *e)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@ -185,7 +164,7 @@ cJSON *cJSONUtils_GetPointer(cJSON *object, const char *pointer)
|
||||
{
|
||||
object = object->child;
|
||||
/* GetObjectItem. */
|
||||
while (object && cJSONUtils_Pstrcasecmp(object->string, pointer))
|
||||
while (object && cJSONUtils_Pstrcmp(object->string, pointer))
|
||||
{
|
||||
object = object->next;
|
||||
}
|
||||
@ -292,7 +271,7 @@ static int cJSONUtils_Compare(cJSON *a, cJSON *b)
|
||||
{
|
||||
int err = 0;
|
||||
/* compare object keys */
|
||||
if (cJSONUtils_strcasecmp(a->string, b->string))
|
||||
if (strcmp(a->string, b->string))
|
||||
{
|
||||
/* missing member */
|
||||
return -6;
|
||||
@ -585,7 +564,7 @@ static void cJSONUtils_CompareToPatch(cJSON *patches, const char *path, cJSON *f
|
||||
/* for all object values in the object with more of them */
|
||||
while (a || b)
|
||||
{
|
||||
int diff = (!a) ? 1 : ((!b) ? -1 : cJSONUtils_strcasecmp(a->string, b->string));
|
||||
int diff = (!a) ? 1 : ((!b) ? -1 : strcmp(a->string, b->string));
|
||||
if (!diff)
|
||||
{
|
||||
/* both object keys are the same */
|
||||
@ -639,7 +618,7 @@ static cJSON *cJSONUtils_SortList(cJSON *list)
|
||||
return list;
|
||||
}
|
||||
|
||||
while (ptr && ptr->next && (cJSONUtils_strcasecmp(ptr->string, ptr->next->string) < 0))
|
||||
while (ptr && ptr->next && (strcmp(ptr->string, ptr->next->string) < 0))
|
||||
{
|
||||
/* Test for list sorted. */
|
||||
ptr = ptr->next;
|
||||
@ -676,7 +655,7 @@ static cJSON *cJSONUtils_SortList(cJSON *list)
|
||||
|
||||
while (first && second) /* Merge the sub-lists */
|
||||
{
|
||||
if (cJSONUtils_strcasecmp(first->string, second->string) < 0)
|
||||
if (strcmp(first->string, second->string) < 0)
|
||||
{
|
||||
if (!list)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user