mirror of
https://github.com/DaveGamble/cJSON.git
synced 2024-12-26 21:04:24 +08:00
add return value for cJSON_AddItemTo...
This commit is contained in:
parent
3ece4c893c
commit
54d6b8016e
28
cJSON.c
28
cJSON.c
@ -1865,7 +1865,7 @@ static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
|
|||||||
{
|
{
|
||||||
cJSON *child = NULL;
|
cJSON *child = NULL;
|
||||||
|
|
||||||
if ((item == NULL) || (array == NULL))
|
if ((item == NULL) || (array == NULL) || (array == item))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1904,9 +1904,9 @@ static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Add item to array/object. */
|
/* Add item to array/object. */
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item)
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item)
|
||||||
{
|
{
|
||||||
add_item_to_array(array, item);
|
return add_item_to_array(array, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
|
#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
|
||||||
@ -1930,7 +1930,7 @@ static cJSON_bool add_item_to_object(cJSON * const object, const char * const st
|
|||||||
char *new_key = NULL;
|
char *new_key = NULL;
|
||||||
int new_type = cJSON_Invalid;
|
int new_type = cJSON_Invalid;
|
||||||
|
|
||||||
if ((object == NULL) || (string == NULL) || (item == NULL))
|
if ((object == NULL) || (string == NULL) || (item == NULL) || (object == item))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1962,35 +1962,35 @@ static cJSON_bool add_item_to_object(cJSON * const object, const char * const st
|
|||||||
return add_item_to_array(object, item);
|
return add_item_to_array(object, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item)
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item)
|
||||||
{
|
{
|
||||||
add_item_to_object(object, string, item, &global_hooks, false);
|
return add_item_to_object(object, string, item, &global_hooks, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add an item to an object with constant string as key */
|
/* Add an item to an object with constant string as key */
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item)
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item)
|
||||||
{
|
{
|
||||||
add_item_to_object(object, string, item, &global_hooks, true);
|
return add_item_to_object(object, string, item, &global_hooks, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
|
||||||
{
|
{
|
||||||
if (array == NULL)
|
if (array == NULL)
|
||||||
{
|
{
|
||||||
return;
|
return cJSON_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_item_to_array(array, create_reference(item, &global_hooks));
|
return add_item_to_array(array, create_reference(item, &global_hooks));
|
||||||
}
|
}
|
||||||
|
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item)
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item)
|
||||||
{
|
{
|
||||||
if ((object == NULL) || (string == NULL))
|
if ((object == NULL) || (string == NULL))
|
||||||
{
|
{
|
||||||
return;
|
return cJSON_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
|
return add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name)
|
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name)
|
||||||
|
10
cJSON.h
10
cJSON.h
@ -221,15 +221,15 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
|
|||||||
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);
|
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);
|
||||||
|
|
||||||
/* Append item to the specified array/object. */
|
/* Append item to the specified array/object. */
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
|
||||||
/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
|
/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
|
||||||
* WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
|
* WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
|
||||||
* writing to `item->string` */
|
* writing to `item->string` */
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
|
||||||
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
|
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
|
||||||
CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
|
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
|
||||||
|
|
||||||
/* Remove/Detach items from Arrays/Objects. */
|
/* Remove/Detach items from Arrays/Objects. */
|
||||||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
|
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
|
||||||
|
@ -332,13 +332,15 @@ static void cjson_replace_item_in_object_should_preserve_name(void)
|
|||||||
cJSON root[1] = {{ NULL, NULL, NULL, 0, NULL, 0, 0, NULL }};
|
cJSON root[1] = {{ NULL, NULL, NULL, 0, NULL, 0, 0, NULL }};
|
||||||
cJSON *child = NULL;
|
cJSON *child = NULL;
|
||||||
cJSON *replacement = NULL;
|
cJSON *replacement = NULL;
|
||||||
|
cJSON_bool flag = cJSON_False;
|
||||||
|
|
||||||
child = cJSON_CreateNumber(1);
|
child = cJSON_CreateNumber(1);
|
||||||
TEST_ASSERT_NOT_NULL(child);
|
TEST_ASSERT_NOT_NULL(child);
|
||||||
replacement = cJSON_CreateNumber(2);
|
replacement = cJSON_CreateNumber(2);
|
||||||
TEST_ASSERT_NOT_NULL(replacement);
|
TEST_ASSERT_NOT_NULL(replacement);
|
||||||
|
|
||||||
cJSON_AddItemToObject(root, "child", child);
|
flag = cJSON_AddItemToObject(root, "child", child);
|
||||||
|
TEST_ASSERT_TRUE_MESSAGE(flag, "add item to object failed");
|
||||||
cJSON_ReplaceItemInObject(root, "child", replacement);
|
cJSON_ReplaceItemInObject(root, "child", replacement);
|
||||||
|
|
||||||
TEST_ASSERT_TRUE(root->child == replacement);
|
TEST_ASSERT_TRUE(root->child == replacement);
|
||||||
@ -531,6 +533,22 @@ static void cjson_create_array_reference_should_create_an_array_reference(void)
|
|||||||
cJSON_Delete(number_reference);
|
cJSON_Delete(number_reference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cjson_add_item_to_object_or_array_should_not_add_itself(void)
|
||||||
|
{
|
||||||
|
cJSON *object = cJSON_CreateObject();
|
||||||
|
cJSON *array = cJSON_CreateArray();
|
||||||
|
cJSON_bool flag = cJSON_False;
|
||||||
|
|
||||||
|
flag = cJSON_AddItemToObject(object, "key", object);
|
||||||
|
TEST_ASSERT_FALSE_MESSAGE(flag, "add an object to itself should fail");
|
||||||
|
|
||||||
|
flag = cJSON_AddItemToArray(array, array);
|
||||||
|
TEST_ASSERT_FALSE_MESSAGE(flag, "add an array to itself should fail");
|
||||||
|
|
||||||
|
cJSON_Delete(object);
|
||||||
|
cJSON_Delete(array);
|
||||||
|
}
|
||||||
|
|
||||||
static void cjson_add_item_to_object_should_not_use_after_free_when_string_is_aliased(void)
|
static void cjson_add_item_to_object_should_not_use_after_free_when_string_is_aliased(void)
|
||||||
{
|
{
|
||||||
cJSON *object = cJSON_CreateObject();
|
cJSON *object = cJSON_CreateObject();
|
||||||
@ -607,6 +625,7 @@ int CJSON_CDECL main(void)
|
|||||||
RUN_TEST(cjson_create_string_reference_should_create_a_string_reference);
|
RUN_TEST(cjson_create_string_reference_should_create_a_string_reference);
|
||||||
RUN_TEST(cjson_create_object_reference_should_create_an_object_reference);
|
RUN_TEST(cjson_create_object_reference_should_create_an_object_reference);
|
||||||
RUN_TEST(cjson_create_array_reference_should_create_an_array_reference);
|
RUN_TEST(cjson_create_array_reference_should_create_an_array_reference);
|
||||||
|
RUN_TEST(cjson_add_item_to_object_or_array_should_not_add_itself);
|
||||||
RUN_TEST(cjson_add_item_to_object_should_not_use_after_free_when_string_is_aliased);
|
RUN_TEST(cjson_add_item_to_object_should_not_use_after_free_when_string_is_aliased);
|
||||||
RUN_TEST(cjson_delete_item_from_array_should_not_broken_list_structure);
|
RUN_TEST(cjson_delete_item_from_array_should_not_broken_list_structure);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user