From 0dab2b18d73e561f5118011a65cc9877bf21c110 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Sun, 24 Mar 2019 14:39:58 -0500 Subject: [PATCH] Add -b / --binary option for Windows --- docs/content/manual/manual.yml | 6 ++++++ src/main.c | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/docs/content/manual/manual.yml b/docs/content/manual/manual.yml index ef609a6496..e721ddfa94 100644 --- a/docs/content/manual/manual.yml +++ b/docs/content/manual/manual.yml @@ -164,6 +164,12 @@ sections: Colors can be configured with the `JQ_COLORS` environment variable (see below). + * `--binary` / `-b`: + + Windows users using WSL, MSYS2, or Cygwin, should use this option + when using a native jq.exe, otherwise jq will turn newlines (LFs) + into carriage-return-then-newline (CRLF). + * `--ascii-output` / `-a`: jq usually outputs non-ASCII Unicode codepoints as UTF-8, even diff --git a/src/main.c b/src/main.c index 34d2c7e764..9d539eb219 100644 --- a/src/main.c +++ b/src/main.c @@ -394,6 +394,16 @@ int main(int argc, char* argv[]) { options |= RAW_OUTPUT | RAW_NO_LF; if (!short_opts) continue; } + if (isoption(argv[i], 'b', "binary", &short_opts)) { +#ifdef WIN32 + fflush(stdout); + fflush(stderr); + _setmode(fileno(stdin), _O_BINARY); + _setmode(fileno(stdout), _O_BINARY); + _setmode(fileno(stderr), _O_BINARY); + if (!short_opts) continue; +#endif + } if (isoption(argv[i], 0, "tab", &short_opts)) { dumpopts &= ~JV_PRINT_INDENT_FLAGS(7); dumpopts |= JV_PRINT_TAB | JV_PRINT_PRETTY;