summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorNicolas Williams <nico@cryptonector.com>2013-06-06 17:26:15 -0500
committerNicolas Williams <nico@cryptonector.com>2013-06-15 17:37:15 -0500
commit3f86e97f709d222fc79f4e7b096af40782ea8775 (patch)
treeaa0fd13407b01eb9cf93528c106490295b430255 /main.c
parent69fa279e3cbdcd96f5534f30aa3b3bb3b617d86b (diff)
Fixup API to get closer to a libjq
Diffstat (limited to 'main.c')
-rw-r--r--main.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/main.c b/main.c
index 221ddba0..02399641 100644
--- a/main.c
+++ b/main.c
@@ -65,11 +65,9 @@ enum {
DUMP_DISASM = 2048,
};
static int options = 0;
-static struct bytecode* bc;
-static void process(jv value, int flags) {
- jq_state *jq = NULL;
- jq_init(bc, value, &jq, flags);
+static void process(jq_state *jq, jv value, int flags) {
+ jq_start(jq, value, flags);
jv result;
while (jv_is_valid(result = jq_next(jq))) {
if ((options & RAW_OUTPUT) && jv_get_kind(result) == JV_KIND_STRING) {
@@ -94,7 +92,6 @@ static void process(jv value, int flags) {
printf("\n");
}
jv_free(result);
- jq_teardown(&jq);
}
FILE* current_input;
@@ -126,13 +123,22 @@ static int read_more(char* buf, size_t size) {
}
int main(int argc, char* argv[]) {
+ jq_state *jq;
int ret = 0;
+ int compiled = 0;
+
if (argc) progname = argv[0];
if (argc > 1 && !strcmp(argv[1], "--run-tests")) {
return jq_testsuite(argc - 1, argv + 1);
}
+ jq = jq_init();
+ if (jq == NULL) {
+ perror("malloc");
+ return 1;
+ }
+
const char* program = 0;
input_filenames = jv_mem_alloc(sizeof(const char*) * argc);
ninput_files = 0;
@@ -231,20 +237,20 @@ int main(int argc, char* argv[]) {
jv_free(data);
return 1;
}
- bc = jq_compile_args(jv_string_value(data), program_arguments);
+ compiled = jq_compile_args(jq, jv_string_value(data), program_arguments);
jv_free(data);
} else {
- bc = jq_compile_args(program, program_arguments);
+ compiled = jq_compile_args(jq, program, program_arguments);
}
- if (!bc) return 1;
+ if (!compiled) return 1;
if (options & DUMP_DISASM) {
- dump_disassembly(0, bc);
+ jq_dump_disassembly(jq, 0);
printf("\n");
}
if (options & PROVIDE_NULL) {
- process(jv_null(), jq_flags);
+ process(jq, jv_null(), jq_flags);
} else {
jv slurped;
if (options & SLURP) {
@@ -265,7 +271,7 @@ int main(int argc, char* argv[]) {
slurped = jv_string_concat(slurped, jv_string(buf));
} else {
if (buf[len-1] == '\n') buf[len-1] = 0;
- process(jv_string(buf), jq_flags);
+ process(jq, jv_string(buf), jq_flags);
}
}
} else {
@@ -275,7 +281,7 @@ int main(int argc, char* argv[]) {
if (options & SLURP) {
slurped = jv_array_append(slurped, value);
} else {
- process(value, jq_flags);
+ process(jq, value, jq_flags);
}
}
if (jv_invalid_has_msg(jv_copy(value))) {
@@ -293,11 +299,11 @@ int main(int argc, char* argv[]) {
if (ret != 0)
goto out;
if (options & SLURP) {
- process(slurped, jq_flags);
+ process(jq, slurped, jq_flags);
}
}
out:
jv_mem_free(input_filenames);
- bytecode_free(bc);
+ jq_teardown(&jq);
return ret;
}