Преглед изворни кода

reformatting: parse_object

Max Bruckner пре 8 година
родитељ
комит
25632fad13
1 измењених фајлова са 91 додато и 32 уклоњено
  1. 91 32
      cJSON.c

+ 91 - 32
cJSON.c

@@ -1211,39 +1211,98 @@ static char *print_array(cJSON *item, int depth, int fmt, printbuffer *p)
 }
 
 /* Build an object from the text. */
-static const char *parse_object(cJSON *item,const char *value,const char **ep)
+static const char *parse_object(cJSON *item, const char *value, const char **ep)
 {
-	cJSON *child;
-	if (*value!='{')	{*ep=value;return 0;}	/* not an object! */
-	
-	item->type=cJSON_Object;
-	value=skip(value+1);
-	if (*value=='}') return value+1;	/* empty array. */
-	
-	item->child=child=cJSON_New_Item();
-	if (!item->child) return 0;
-	value=skip(parse_string(child,skip(value),ep));
-	if (!value) return 0;
-	child->string=child->valuestring;child->valuestring=0;
-	if (*value!=':') {*ep=value;return 0;}	/* fail! */
-	value=skip(parse_value(child,skip(value+1),ep));	/* skip any spacing, get the value. */
-	if (!value) return 0;
-	
-	while (*value==',')
-	{
-		cJSON *new_item;
-		if (!(new_item=cJSON_New_Item()))	return 0; /* memory fail */
-		child->next=new_item;new_item->prev=child;child=new_item;
-		value=skip(parse_string(child,skip(value+1),ep));
-		if (!value) return 0;
-		child->string=child->valuestring;child->valuestring=0;
-		if (*value!=':') {*ep=value;return 0;}	/* fail! */
-		value=skip(parse_value(child,skip(value+1),ep));	/* skip any spacing, get the value. */
-		if (!value) return 0;
-	}
-	
-	if (*value=='}') return value+1;	/* end of array */
-	*ep=value;return 0;	/* malformed. */
+    cJSON *child;
+    if (*value != '{')
+    {
+        /* not an object! */
+        *ep = value;
+        return 0;
+    }
+
+    item->type = cJSON_Object;
+    value = skip(value + 1);
+    if (*value == '}')
+    {
+        /* empty object. */
+        return value + 1;
+    }
+
+    child = cJSON_New_Item();
+    item->child = child;
+    if (!item->child)
+    {
+        return 0;
+    }
+    /* parse first key */
+    value = skip(parse_string(child, skip(value), ep));
+    if (!value)
+    {
+        return 0;
+    }
+    /* use string as key, not value */
+    child->string = child->valuestring;
+    child->valuestring = 0;
+
+    if (*value != ':')
+    {
+        /* invalid object. */
+        *ep = value;
+        return 0;
+    }
+    /* skip any spacing, get the value. */
+    value = skip(parse_value(child, skip(value + 1), ep));
+    if (!value)
+    {
+        return 0;
+    }
+
+    while (*value == ',')
+    {
+        cJSON *new_item;
+        if (!(new_item = cJSON_New_Item()))
+        {
+            /* memory fail */
+            return 0;
+        }
+        /* add to linked list */
+        child->next = new_item;
+        new_item->prev = child;
+
+        child = new_item;
+        value = skip(parse_string(child, skip(value + 1), ep));
+        if (!value)
+        {
+            return 0;
+        }
+
+        /* use string as key, not value */
+        child->string = child->valuestring;
+        child->valuestring = 0;
+
+        if (*value != ':')
+        {
+            /* invalid object. */
+            *ep = value;
+            return 0;
+        }
+        /* skip any spacing, get the value. */
+        value = skip(parse_value(child, skip(value + 1), ep));
+        if (!value)
+        {
+            return 0;
+        }
+    }
+    /* end of object */
+    if (*value == '}')
+    {
+        return value + 1;
+    }
+
+    /* malformed */
+    *ep = value;
+    return 0;
 }
 
 /* Render an object to text. */