Browse Source

reformatting: cJSON_Duplicate

Max Bruckner 8 years ago
parent
commit
9adc6e7fe1
1 changed files with 70 additions and 24 deletions
  1. 70 24
      cJSON.c

+ 70 - 24
cJSON.c

@@ -2052,31 +2052,77 @@ cJSON *cJSON_CreateStringArray(const char **strings, int count)
 }
 
 /* Duplication */
-cJSON *cJSON_Duplicate(cJSON *item,int recurse)
+cJSON *cJSON_Duplicate(cJSON *item, int recurse)
 {
-	cJSON *newitem,*cptr,*nptr=0,*newchild;
-	/* Bail on bad ptr */
-	if (!item) return 0;
-	/* Create new item */
-	newitem=cJSON_New_Item();
-	if (!newitem) return 0;
-	/* Copy over all vars */
-	newitem->type=item->type&(~cJSON_IsReference),newitem->valueint=item->valueint,newitem->valuedouble=item->valuedouble;
-	if (item->valuestring)	{newitem->valuestring=cJSON_strdup(item->valuestring);	if (!newitem->valuestring)	{cJSON_Delete(newitem);return 0;}}
-	if (item->string)		{newitem->string=cJSON_strdup(item->string);			if (!newitem->string)		{cJSON_Delete(newitem);return 0;}}
-	/* If non-recursive, then we're done! */
-	if (!recurse) return newitem;
-	/* Walk the ->next chain for the child. */
-	cptr=item->child;
-	while (cptr)
-	{
-		newchild=cJSON_Duplicate(cptr,1);		/* Duplicate (with recurse) each item in the ->next chain */
-		if (!newchild) {cJSON_Delete(newitem);return 0;}
-		if (nptr)	{nptr->next=newchild,newchild->prev=nptr;nptr=newchild;}	/* If newitem->child already set, then crosswire ->prev and ->next and move on */
-		else		{newitem->child=newchild;nptr=newchild;}					/* Set newitem->child and move to it */
-		cptr=cptr->next;
-	}
-	return newitem;
+    cJSON *newitem;
+    cJSON *cptr;
+    cJSON *nptr = 0;
+    cJSON *newchild;
+
+    /* Bail on bad ptr */
+    if (!item)
+    {
+        return 0;
+    }
+    /* Create new item */
+    newitem = cJSON_New_Item();
+    if (!newitem)
+    {
+        return 0;
+    }
+    /* Copy over all vars */
+    newitem->type = item->type & (~cJSON_IsReference);
+    newitem->valueint = item->valueint;
+    newitem->valuedouble = item->valuedouble;
+    if (item->valuestring)
+    {
+        newitem->valuestring = cJSON_strdup(item->valuestring);
+        if (!newitem->valuestring)
+        {
+            cJSON_Delete(newitem);
+            return 0;
+        }
+    }
+    if (item->string)
+    {
+        newitem->string = cJSON_strdup(item->string);
+        if (!newitem->string)
+        {
+            cJSON_Delete(newitem);
+            return 0;
+        }
+    }
+    /* If non-recursive, then we're done! */
+    if (!recurse)
+    {
+        return newitem;
+    }
+    /* Walk the ->next chain for the child. */
+    cptr = item->child;
+    while (cptr)
+    {
+        newchild = cJSON_Duplicate(cptr, 1); /* Duplicate (with recurse) each item in the ->next chain */
+        if (!newchild)
+        {
+            cJSON_Delete(newitem);
+            return 0;
+        }
+        if (nptr)
+        {
+            /* If newitem->child already set, then crosswire ->prev and ->next and move on */
+            nptr->next = newchild;
+            newchild->prev = nptr;
+            nptr = newchild;
+        }
+        else
+        {
+            /* Set newitem->child and move to it */
+            newitem->child = newchild; nptr = newchild;
+        }
+        cptr = cptr->next;
+    }
+
+    return newitem;
 }
 
 void cJSON_Minify(char *json)