summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Fetter <david@fetter.org>2017-10-27 18:46:57 -0400
committerNicolas Williams <nico@cryptonector.com>2017-12-11 12:17:17 -0600
commitb4742c125704817862968b2fd8796256e8d82e5f (patch)
treea942e1f2065c9f0daaad5286a3daa99234fedb76
parent9a4576e7567dd38b91f28592b47eb6dafe0c4332 (diff)
Added rawfile
In passing, clean remnants of argfile from slurpfile docs.
-rw-r--r--docs/content/3.manual/manual.yml9
-rw-r--r--src/main.c7
2 files changed, 14 insertions, 2 deletions
diff --git a/docs/content/3.manual/manual.yml b/docs/content/3.manual/manual.yml
index 91209a1e..34ef085f 100644
--- a/docs/content/3.manual/manual.yml
+++ b/docs/content/3.manual/manual.yml
@@ -236,10 +236,17 @@ sections:
This option reads all the JSON texts in the named file and binds
an array of the parsed JSON values to the given global variable.
- If you run jq with `--argfile foo bar`, then `$foo` is available
+ If you run jq with `--slurpfile foo bar`, then `$foo` is available
in the program and has an array whose elements correspond to the
texts in the file named `bar`.
+ * `--rawfile variable-name filename`:
+
+ This option reads in the named file and binds its contents to the given
+ global variable. If you run jq with `--rawfile foo bar`, then `$foo` is
+ available in the program and has a string whose contents are to the texs
+ in the file named `bar`.
+
* `--argfile variable-name filename`:
Do not use. Use `--slurpfile` instead.
diff --git a/src/main.c b/src/main.c
index a7f50b51..be436dd8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -83,6 +83,7 @@ static void usage(int code, int keep_it_short) {
" --arg a v set variable $a to value <v>;\n"
" --argjson a v set variable $a to JSON value <v>;\n"
" --slurpfile a f set variable $a to an array of JSON texts read from <f>;\n"
+ " --rawfile a f set variable $a to a string consisting of the contents of <f>;\n"
" --args remaining arguments are string arguments, not files;\n"
" --jsonargs remaining arguments are JSON arguments, not files;\n"
" -- terminates argument processing;\n\n"
@@ -443,10 +444,14 @@ int main(int argc, char* argv[]) {
continue;
}
if (isoption(argv[i], 0, "argfile", &short_opts) ||
+ isoption(argv[i], 0, "rawfile", &short_opts) ||
isoption(argv[i], 0, "slurpfile", &short_opts)) {
+ int raw = isoption(argv[i], 0, "rawfile", &short_opts);
const char *which;
if (isoption(argv[i], 0, "argfile", &short_opts))
which = "argfile";
+ else if (raw)
+ which = "rawfile";
else
which = "slurpfile";
if (i >= argc - 2) {
@@ -454,7 +459,7 @@ int main(int argc, char* argv[]) {
die();
}
if (!jv_object_has(jv_copy(program_arguments), jv_string(argv[i+1]))) {
- jv data = jv_load_file(argv[i+2], 0);
+ jv data = jv_load_file(argv[i+2], raw);
if (!jv_is_valid(data)) {
data = jv_invalid_get_msg(data);
fprintf(stderr, "%s: Bad JSON in --%s %s %s: %s\n", progname, which,