From 4570c2372003501bf8d1b9e037861f40c629e352 Mon Sep 17 00:00:00 2001 From: David Korczynski Date: Tue, 28 Nov 2023 18:18:10 +0000 Subject: [PATCH] jv_parse: refactor jv_parse_sized Signed-off-by: David Korczynski --- src/jv_parse.c | 51 ++++++++------------------------------------------ 1 file changed, 8 insertions(+), 43 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,49 +859,6 @@ jv jv_parser_next(struct jv_parser* p) { } } -jv jv_parse_sized(const char* string, int length) { - struct jv_parser parser; - parser_init(&parser, 0); - 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_sized_custom_flags(const char* string, int length, int flags) { struct jv_parser parser; parser_init(&parser, flags); @@ -941,6 +898,14 @@ jv jv_parse_sized_custom_flags(const char* string, int length, int flags) { return value; } +jv jv_parse_sized(const char* string, int length) { + return jv_parse_sized_custom_flags(string, length, 0); +} + +jv jv_parse(const char* string) { + return jv_parse_sized(string, strlen(string)); +} + jv jv_parse_custom_flags(const char* string, int flags) { return jv_parse_sized_custom_flags(string, strlen(string), flags); }