parse_object: improve variable names + const correctness

This commit is contained in:
Max Bruckner 2017-02-16 20:14:34 +01:00
parent 3dc6339025
commit 698dc528f4

53
cJSON.c
View File

@ -817,7 +817,7 @@ static const unsigned char *parse_value(cJSON *item, const unsigned char *value,
static unsigned char *print_value(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p); static unsigned char *print_value(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p);
static const unsigned char *parse_array(cJSON * const item, const unsigned char *input, const unsigned char ** const ep); static const unsigned char *parse_array(cJSON * const item, const unsigned char *input, const unsigned char ** const ep);
static unsigned char *print_array(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p); static unsigned char *print_array(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p);
static const unsigned char *parse_object(cJSON *item, const unsigned char *value, const unsigned char **ep); static const unsigned char *parse_object(cJSON * const item, const unsigned char *input, const unsigned char ** const ep);
static unsigned char *print_object(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p); static unsigned char *print_object(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p);
/* Utility to jump whitespace and cr/lf */ /* Utility to jump whitespace and cr/lf */
@ -1331,26 +1331,25 @@ static unsigned char *print_array(const cJSON *item, size_t depth, cjbool fmt, p
} }
/* Build an object from the text. */ /* Build an object from the text. */
static const unsigned char *parse_object(cJSON *item, const unsigned char *value, const unsigned char **error_pointer) static const unsigned char *parse_object(cJSON * const item, const unsigned char *input, const unsigned char ** const error_pointer)
{ {
cJSON *head = NULL; /* linked list head */ cJSON *head = NULL; /* linked list head */
cJSON *current_item = NULL; cJSON *current_item = NULL;
if (*value != '{') if (*input != '{')
{ {
/* not an object */ *error_pointer = input;
*error_pointer = value; goto fail; /* not an object */
goto fail;
} }
value = skip(value + 1); /* skip whitespace */ input = skip(input + 1); /* skip whitespace */
if (*value == '}') if (*input == '}')
{ {
goto success; /* empty object */ goto success; /* empty object */
} }
/* step back to character in front of the first element */ /* step back to character in front of the first element */
value--; input--;
/* loop through the comma separated array elements */ /* loop through the comma separated array elements */
do do
{ {
@ -1376,10 +1375,10 @@ static const unsigned char *parse_object(cJSON *item, const unsigned char *value
} }
/* parse the name of the child */ /* parse the name of the child */
value = skip(value + 1); /* skip whitespaces before name */ input = skip(input + 1); /* skip whitespaces before name */
value = parse_string(current_item, value, error_pointer); input = parse_string(current_item, input, error_pointer);
value = skip(value); /* skip whitespaces after name */ input = skip(input); /* skip whitespaces after name */
if (value == NULL) if (input == NULL)
{ {
goto fail; /* faile to parse name */ goto fail; /* faile to parse name */
} }
@ -1388,38 +1387,34 @@ static const unsigned char *parse_object(cJSON *item, const unsigned char *value
current_item->string = current_item->valuestring; current_item->string = current_item->valuestring;
current_item->valuestring = NULL; current_item->valuestring = NULL;
if (*value != ':') if (*input != ':')
{ {
/* invalid object */ *error_pointer = input;
*error_pointer = value; goto fail; /* invalid object */
goto fail;
} }
/* parse the value */ /* parse the value */
value = skip(value + 1); /* skip whitespaces before value */ input = skip(input + 1); /* skip whitespaces before value */
value = parse_value(current_item, value, error_pointer); input = parse_value(current_item, input, error_pointer);
value = skip(value); /* skip whitespaces after the value */ input = skip(input); /* skip whitespaces after the value */
if (value == NULL) if (input == NULL)
{ {
goto fail; /* failed to parse value */ goto fail; /* failed to parse value */
} }
} }
while (*value == ','); while (*input == ',');
if (*value == '}') if (*input != '}')
{ {
goto success; /* end of object */ *error_pointer = input;
goto fail; /* expected end of object */
} }
/* malformed object */
*error_pointer = value;
goto fail;
success: success:
item->type = cJSON_Object; item->type = cJSON_Object;
item->child = head; item->child = head;
return value + 1; return input + 1;
fail: fail:
if (head != NULL) if (head != NULL)