diff --git a/jv_file.c b/jv_file.c index 980a2454..7532a025 100644 --- a/jv_file.c +++ b/jv_file.c @@ -28,12 +28,15 @@ jv jv_load_file(const char* filename, int raw) { if (raw) { data = jv_string_concat(data, jv_string_sized(buf, (int)n)); } else { - jv_parser_set_buf(&parser, buf, strlen(buf), !feof(file)); + jv_parser_set_buf(&parser, buf, n, !feof(file)); jv value; while (jv_is_valid((value = jv_parser_next(&parser)))) data = jv_array_append(data, value); + jv_free(value); } } + if (!raw) + jv_parser_free(&parser); int badread = ferror(file); fclose(file); if (badread) { diff --git a/main.c b/main.c index e7e4e093..3f82b460 100644 --- a/main.c +++ b/main.c @@ -202,7 +202,7 @@ int main(int argc, char* argv[]) { jv_free(data); return 1; } - if (jv_array_length(data) == 1) + if (jv_get_kind(data) == JV_KIND_ARRAY && jv_array_length(jv_copy(data)) == 1) data = jv_array_get(data, 0); arg = jv_object_set(arg, jv_string("value"), data); program_arguments = jv_array_append(program_arguments, arg);