瀏覽代碼

reformatting: print_array

Max Bruckner 8 年之前
父節點
當前提交
782770c6ba
共有 1 個文件被更改,包括 160 次插入74 次删除
  1. 160 74
      cJSON.c

+ 160 - 74
cJSON.c

@@ -1045,83 +1045,169 @@ static const char *parse_array(cJSON *item,const char *value,const char **ep)
 }
 
 /* Render an array to text */
-static char *print_array(cJSON *item,int depth,int fmt,printbuffer *p)
+static char *print_array(cJSON *item, int depth, int fmt, printbuffer *p)
 {
-	char **entries;
-	char *out=0,*ptr,*ret;int len=5;
-	cJSON *child=item->child;
-	int numentries=0,i=0,fail=0;
-	size_t tmplen=0;
-	
-	/* How many entries in the array? */
-	while (child) numentries++,child=child->next;
-	/* Explicitly handle numentries==0 */
-	if (!numentries)
-	{
-		if (p)	out=ensure(p,3);
-		else	out=(char*)cJSON_malloc(3);
-		if (out) strcpy(out,"[]");
-		return out;
-	}
+    char **entries;
+    char *out = 0;
+    char *ptr;
+    char *ret;
+    int len = 5;
+    cJSON *child = item->child;
+    int numentries = 0;
+    int i = 0;
+    int fail = 0;
+    size_t tmplen = 0;
 
-	if (p)
-	{
-		/* Compose the output array. */
-		i=p->offset;
-		ptr=ensure(p,1);if (!ptr) return 0;	*ptr='[';	p->offset++;
-		child=item->child;
-		while (child && !fail)
-		{
-			print_value(child,depth+1,fmt,p);
-			p->offset=update(p);
-			if (child->next) {len=fmt?2:1;ptr=ensure(p,len+1);if (!ptr) return 0;*ptr++=',';if(fmt)*ptr++=' ';*ptr=0;p->offset+=len;}
-			child=child->next;
-		}
-		ptr=ensure(p,2);if (!ptr) return 0;	*ptr++=']';*ptr=0;
-		out=(p->buffer)+i;
-	}
-	else
-	{
-		/* Allocate an array to hold the values for each */
-		entries=(char**)cJSON_malloc(numentries*sizeof(char*));
-		if (!entries) return 0;
-		memset(entries,0,numentries*sizeof(char*));
-		/* Retrieve all the results: */
-		child=item->child;
-		while (child && !fail)
-		{
-			ret=print_value(child,depth+1,fmt,0);
-			entries[i++]=ret;
-			if (ret) len+=strlen(ret)+2+(fmt?1:0); else fail=1;
-			child=child->next;
-		}
-		
-		/* If we didn't fail, try to malloc the output string */
-		if (!fail)	out=(char*)cJSON_malloc(len);
-		/* If that fails, we fail. */
-		if (!out) fail=1;
+    /* How many entries in the array? */
+    while (child)
+    {
+        numentries++;
+        child = child->next;
+    }
 
-		/* Handle failure. */
-		if (fail)
-		{
-			for (i=0;i<numentries;i++) if (entries[i]) cJSON_free(entries[i]);
-			cJSON_free(entries);
-			return 0;
-		}
-		
-		/* Compose the output array. */
-		*out='[';
-		ptr=out+1;*ptr=0;
-		for (i=0;i<numentries;i++)
-		{
-			tmplen=strlen(entries[i]);memcpy(ptr,entries[i],tmplen);ptr+=tmplen;
-			if (i!=numentries-1) {*ptr++=',';if(fmt)*ptr++=' ';*ptr=0;}
-			cJSON_free(entries[i]);
-		}
-		cJSON_free(entries);
-		*ptr++=']';*ptr++=0;
-	}
-	return out;	
+    /* Explicitly handle numentries == 0 */
+    if (!numentries)
+    {
+        if (p)
+        {
+            out = ensure(p, 3);
+        }
+        else
+        {
+            out = (char*)cJSON_malloc(3);
+        }
+        if (out)
+        {
+            strcpy(out,"[]");
+        }
+
+        return out;
+    }
+
+    if (p)
+    {
+        /* Compose the output array. */
+        /* opening square bracket */
+        i = p->offset;
+        ptr = ensure(p, 1);
+        if (!ptr)
+        {
+            return 0;
+        }
+        *ptr = '[';
+        p->offset++;
+
+        child = item->child;
+        while (child && !fail)
+        {
+            print_value(child, depth + 1, fmt, p);
+            p->offset = update(p);
+            if (child->next)
+            {
+                len = fmt ? 2 : 1;
+                ptr = ensure(p, len + 1);
+                if (!ptr)
+                {
+                    return 0;
+                }
+                *ptr++ = ',';
+                if(fmt)
+                {
+                    *ptr++ = ' ';
+                }
+                *ptr = 0;
+                p->offset += len;
+            }
+            child = child->next;
+        }
+        ptr = ensure(p, 2);
+        if (!ptr)
+        {
+            return 0;
+        }
+        *ptr++ = ']';
+        *ptr = '\0';
+        out = (p->buffer) + i;
+    }
+    else
+    {
+        /* Allocate an array to hold the pointers to all printed values */
+        entries = (char**)cJSON_malloc(numentries * sizeof(char*));
+        if (!entries)
+        {
+            return 0;
+        }
+        memset(entries, 0, numentries * sizeof(char*));
+
+        /* Retrieve all the results: */
+        child = item->child;
+        while (child && !fail)
+        {
+            ret = print_value(child, depth + 1, fmt, 0);
+            entries[i++] = ret;
+            if (ret)
+            {
+                len += strlen(ret) + 2 + (fmt ? 1 : 0);
+            }
+            else
+            {
+                fail = 1;
+            }
+            child = child->next;
+        }
+
+        /* If we didn't fail, try to malloc the output string */
+        if (!fail)
+        {
+            out = (char*)cJSON_malloc(len);
+        }
+        /* If that fails, we fail. */
+        if (!out)
+        {
+            fail = 1;
+        }
+
+        /* Handle failure. */
+        if (fail)
+        {
+            /* free all the entries in the array */
+            for (i = 0; i < numentries; i++)
+            {
+                if (entries[i])
+                {
+                    cJSON_free(entries[i]);
+                }
+            }
+            cJSON_free(entries);
+            return 0;
+        }
+
+        /* Compose the output array. */
+        *out='[';
+        ptr = out + 1;
+        *ptr = '\0';
+        for (i = 0; i < numentries; i++)
+        {
+            tmplen = strlen(entries[i]);
+            memcpy(ptr, entries[i], tmplen);
+            ptr += tmplen;
+            if (i != (numentries - 1))
+            {
+                *ptr++ = ',';
+                if(fmt)
+                {
+                    *ptr++ = ' ';
+                }
+                *ptr = 0;
+            }
+            cJSON_free(entries[i]);
+        }
+        cJSON_free(entries);
+        *ptr++ = ']';
+        *ptr++ = '\0';
+    }
+
+    return out;
 }
 
 /* Build an object from the text. */