|
@@ -1215,51 +1215,75 @@ static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buf
|
|
return false; /* no input */
|
|
return false; /* no input */
|
|
}
|
|
}
|
|
|
|
|
|
- /* parse the different types of values */
|
|
|
|
- /* null */
|
|
|
|
- if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0))
|
|
|
|
- {
|
|
|
|
- item->type = cJSON_NULL;
|
|
|
|
- input_buffer->offset += 4;
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- /* false */
|
|
|
|
- if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0))
|
|
|
|
|
|
+ if (!can_read(input_buffer, 1))
|
|
{
|
|
{
|
|
- item->type = cJSON_False;
|
|
|
|
- input_buffer->offset += 5;
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- /* true */
|
|
|
|
- if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0))
|
|
|
|
- {
|
|
|
|
- item->type = cJSON_True;
|
|
|
|
- item->valueint = 1;
|
|
|
|
- input_buffer->offset += 4;
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- /* string */
|
|
|
|
- if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"'))
|
|
|
|
- {
|
|
|
|
- return parse_string(item, input_buffer);
|
|
|
|
- }
|
|
|
|
- /* number */
|
|
|
|
- if (can_access_at_index(input_buffer, 0) && ((buffer_at_offset(input_buffer)[0] == '-') || ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9'))))
|
|
|
|
- {
|
|
|
|
- return parse_number(item, input_buffer);
|
|
|
|
- }
|
|
|
|
- /* array */
|
|
|
|
- if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '['))
|
|
|
|
- {
|
|
|
|
- return parse_array(item, input_buffer);
|
|
|
|
- }
|
|
|
|
- /* object */
|
|
|
|
- if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{'))
|
|
|
|
- {
|
|
|
|
- return parse_object(item, input_buffer);
|
|
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
- return false;
|
|
|
|
|
|
+ /* parse the different types of values */
|
|
|
|
+ switch (buffer_at_offset(input_buffer)[0])
|
|
|
|
+ {
|
|
|
|
+ /* number */
|
|
|
|
+ case '-':
|
|
|
|
+ case '0':
|
|
|
|
+ case '1':
|
|
|
|
+ case '2':
|
|
|
|
+ case '3':
|
|
|
|
+ case '4':
|
|
|
|
+ case '5':
|
|
|
|
+ case '6':
|
|
|
|
+ case '7':
|
|
|
|
+ case '8':
|
|
|
|
+ case '9':
|
|
|
|
+ return parse_number(item, input_buffer);
|
|
|
|
+
|
|
|
|
+ /* string */
|
|
|
|
+ case '\"':
|
|
|
|
+ return parse_string(item, input_buffer);
|
|
|
|
+
|
|
|
|
+ /* array */
|
|
|
|
+ case '[':
|
|
|
|
+ return parse_array(item, input_buffer);
|
|
|
|
+
|
|
|
|
+ /* object */
|
|
|
|
+ case '{':
|
|
|
|
+ return parse_object(item, input_buffer);
|
|
|
|
+
|
|
|
|
+ /* null */
|
|
|
|
+ case 'n':
|
|
|
|
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0))
|
|
|
|
+ {
|
|
|
|
+ item->type = cJSON_NULL;
|
|
|
|
+ input_buffer->offset += 4;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+
|
|
|
|
+ /* true */
|
|
|
|
+ case 't':
|
|
|
|
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0))
|
|
|
|
+ {
|
|
|
|
+ item->type = cJSON_True;
|
|
|
|
+ item->valueint = 1;
|
|
|
|
+ input_buffer->offset += 4;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+
|
|
|
|
+ /* false */
|
|
|
|
+ case 'f':
|
|
|
|
+ if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0))
|
|
|
|
+ {
|
|
|
|
+ item->type = cJSON_False;
|
|
|
|
+ input_buffer->offset += 5;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/* Render a value to text. */
|
|
/* Render a value to text. */
|