summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Korczynski <david@adalogics.com>2023-11-28 18:18:10 +0000
committerEmanuele Torre <torreemanuele6@gmail.com>2023-11-28 20:36:59 +0100
commit4570c2372003501bf8d1b9e037861f40c629e352 (patch)
tree993ed5cfe33c3a08367da49d086a45dd11589be8
parenteb3b5654bbd285fa70bab8ca71f2284354adf625 (diff)
jv_parse: refactor jv_parse_sized
Signed-off-by: David Korczynski <david@adalogics.com>
-rw-r--r--src/jv_parse.c47
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) {