diff options
Diffstat (limited to 'c/jv_parse.c')
-rw-r--r-- | c/jv_parse.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/c/jv_parse.c b/c/jv_parse.c index 9300f311..7fd4d2d2 100644 --- a/c/jv_parse.c +++ b/c/jv_parse.c @@ -331,20 +331,18 @@ jv jv_parse_sized(const char* string, int length) { const char* p = string; char ch; - while (p < string + length) { + presult msg = 0; + while (msg == 0 && p < string + length) { ch = *p++; - presult msg = scan(&parser, ch); - if (msg){ - printf("ERROR: %s (parsing '%s')\n", msg, string); - return jv_invalid(); - } + msg = scan(&parser, ch); } - presult msg = finish(&parser); + if (msg == 0) msg = finish(&parser); + jv value; if (msg) { - printf("ERROR: %s (parsing '%s')\n", msg, string); - return jv_invalid(); + value = jv_invalid_with_msg(jv_string_fmt("%s (while parsing '%s')", msg, string)); + } else { + value = jv_copy(parser.next); } - jv value = jv_copy(parser.next); jv_parser_free(&parser); return value; } |