diff options
author | Assaf Gordon <assafgordon@gmail.com> | 2015-04-17 16:08:10 -0400 |
---|---|---|
committer | Nicolas Williams <nico@cryptonector.com> | 2015-05-21 00:49:32 -0500 |
commit | d1cb8ee0ad3ddf03a37394bfa899cfd3ddd007c5 (patch) | |
tree | e06b0125148eea42b7881c380b6bcfb05c3b102f /util.c | |
parent | c7f063188f50ddf3271828244c5831a30f72a667 (diff) |
Add filename/line functions to jq (fix #753)
This adds `input_filename` and `input_line_number` built-in functions
for use in, for example, `error` messages.
Example:
$ printf '{"a":1}\n{"a":2}\n' > 4.json
$ printf '{"a":"hello"}\n' > 5.json
$ ./jq '{ "file":input_filename, "line":input_line_number, "value":.a }' 4.json 5.json
{
"file": "4.json",
"line": 1,
"value": 1
}
{
"file": "4.json",
"line": 2,
"value": 2
}
{
"file": "5.json",
"line": 1,
"value": "hello"
}
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -341,6 +341,29 @@ jv jq_util_input_get_position(jq_state *jq) { return v; } +jv jq_util_input_get_current_filename(jq_state* jq) { + jq_input_cb cb=NULL; + void *cb_data=NULL; + jq_get_input_cb(jq, &cb, &cb_data); + if (cb != jq_util_input_next_input_cb) + return jv_invalid_with_msg(jv_string("Unknown input filename")); + jq_util_input_state s = (jq_util_input_state)cb_data; + jv v = jv_copy(s->current_filename); + return v; +} + +jv jq_util_input_get_current_line(jq_state* jq) { + jq_input_cb cb=NULL; + void *cb_data=NULL; + jq_get_input_cb(jq, &cb, &cb_data); + if (cb != jq_util_input_next_input_cb) + return jv_invalid_with_msg(jv_string("Unknown input line number")); + jq_util_input_state s = (jq_util_input_state)cb_data; + jv v = jv_number(s->current_line); + return v; +} + + // Blocks to read one more input from stdin and/or given files // When slurping, it returns just one value jv jq_util_input_next_input(jq_util_input_state state) { |