diff options
author | David Korczynski <david@adalogics.com> | 2023-11-28 18:18:10 +0000 |
---|---|---|
committer | Emanuele Torre <torreemanuele6@gmail.com> | 2023-11-28 20:36:59 +0100 |
commit | 4570c2372003501bf8d1b9e037861f40c629e352 (patch) | |
tree | 993ed5cfe33c3a08367da49d086a45dd11589be8 | |
parent | eb3b5654bbd285fa70bab8ca71f2284354adf625 (diff) |
jv_parse: refactor jv_parse_sized
Signed-off-by: David Korczynski <david@adalogics.com>
-rw-r--r-- | src/jv_parse.c | 47 |
1 files changed, 6 insertions, 41 deletions
diff --git a/src/jv_parse.c b/src/jv_parse.c index 0c427eae..110483a4 100644 --- a/src/jv_parse.c +++ b/src/jv_parse.c @@ -859,9 +859,9 @@ jv jv_parser_next(struct jv_parser* p) { } } -jv jv_parse_sized(const char* string, int length) { +jv jv_parse_sized_custom_flags(const char* string, int length, int flags) { struct jv_parser parser; - parser_init(&parser, 0); + parser_init(&parser, flags); jv_parser_set_buf(&parser, string, length, 0); jv value = jv_parser_next(&parser); if (jv_is_valid(value)) { @@ -898,47 +898,12 @@ jv jv_parse_sized(const char* string, int length) { return value; } -jv jv_parse(const char* string) { - return jv_parse_sized(string, strlen(string)); +jv jv_parse_sized(const char* string, int length) { + return jv_parse_sized_custom_flags(string, length, 0); } -jv jv_parse_sized_custom_flags(const char* string, int length, int flags) { - struct jv_parser parser; - parser_init(&parser, flags); - jv_parser_set_buf(&parser, string, length, 0); - jv value = jv_parser_next(&parser); - if (jv_is_valid(value)) { - jv next = jv_parser_next(&parser); - if (jv_is_valid(next)) { - // multiple JSON values, we only wanted one - jv_free(value); - jv_free(next); - value = jv_invalid_with_msg(jv_string("Unexpected extra JSON values")); - } else if (jv_invalid_has_msg(jv_copy(next))) { - // parser error after the first JSON value - jv_free(value); - value = next; - } else { - // a single valid JSON value - jv_free(next); - } - } else if (jv_invalid_has_msg(jv_copy(value))) { - // parse error, we'll return it - } else { - // no value at all - jv_free(value); - value = jv_invalid_with_msg(jv_string("Expected JSON value")); - } - parser_free(&parser); - - if (!jv_is_valid(value) && jv_invalid_has_msg(jv_copy(value))) { - jv msg = jv_invalid_get_msg(value); - value = jv_invalid_with_msg(jv_string_fmt("%s (while parsing '%s')", - jv_string_value(msg), - string)); - jv_free(msg); - } - return value; +jv jv_parse(const char* string) { + return jv_parse_sized(string, strlen(string)); } jv jv_parse_custom_flags(const char* string, int flags) { |