Skip to content

Commit 11b8a8c

Browse files
committed
refactor cJSONUtils_MergePatch
1 parent 01d656b commit 11b8a8c

2 files changed

Lines changed: 11 additions & 9 deletions

File tree

‎cJSON_Utils.c‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,8 +1145,10 @@ CJSON_PUBLIC(void) cJSONUtils_SortObject(cJSON * const object)
11451145
object->child = cJSONUtils_SortList(object->child);
11461146
}
11471147

1148-
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, cJSON *patch)
1148+
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, const cJSON * const patch)
11491149
{
1150+
cJSON *patch_child = NULL;
1151+
11501152
if (!cJSON_IsObject(patch))
11511153
{
11521154
/* scalar value, array or NULL, just duplicate */
@@ -1160,20 +1162,20 @@ CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, cJSON *patch)
11601162
target = cJSON_CreateObject();
11611163
}
11621164

1163-
patch = patch->child;
1164-
while (patch)
1165+
patch_child = patch->child;
1166+
while (patch_child != NULL)
11651167
{
1166-
if (cJSON_IsNull(patch))
1168+
if (cJSON_IsNull(patch_child))
11671169
{
11681170
/* NULL is the indicator to remove a value, see RFC7396 */
1169-
cJSON_DeleteItemFromObject(target, patch->string);
1171+
cJSON_DeleteItemFromObject(target, patch_child->string);
11701172
}
11711173
else
11721174
{
1173-
cJSON *replaceme = cJSON_DetachItemFromObject(target, patch->string);
1174-
cJSON_AddItemToObject(target, patch->string, cJSONUtils_MergePatch(replaceme, patch));
1175+
cJSON *replace_me = cJSON_DetachItemFromObject(target, patch_child->string);
1176+
cJSON_AddItemToObject(target, patch_child->string, cJSONUtils_MergePatch(replace_me, patch_child));
11751177
}
1176-
patch = patch->next;
1178+
patch_child = patch_child->next;
11771179
}
11781180
return target;
11791181
}

‎cJSON_Utils.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ CJSON_PUBLIC(int) cJSONUtils_ApplyPatches(cJSON * const object, const cJSON * co
5656

5757
/* Implement RFC7386 (https://tools.ietf.org/html/rfc7396) JSON Merge Patch spec. */
5858
/* target will be modified by patch. return value is new ptr for target. */
59-
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, cJSON *patch);
59+
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, const cJSON * const patch);
6060
/* generates a patch to move from -> to */
6161
CJSON_PUBLIC(cJSON *) cJSONUtils_GenerateMergePatch(cJSON *from, cJSON *to);
6262

0 commit comments

Comments
 (0)