diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-03-16 00:34:24 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-03-16 00:34:24 -0700 |
commit | be7b45c73099abee4dfd53502e9256f86342b6c4 (patch) | |
tree | 53e5fe4a97b6d8bc45356fe47604e600e1de08ad | |
parent | aca7c64aa69a4e14a2dd57779cd206a5aa15f649 (diff) | |
download | txr-be7b45c73099abee4dfd53502e9256f86342b6c4.tar.gz txr-be7b45c73099abee4dfd53502e9256f86342b6c4.tar.bz2 txr-be7b45c73099abee4dfd53502e9256f86342b6c4.zip |
* stream.c (win_make_cmdline): I think I cracked the code of
passing escaped arguments to Microsoft's popen and system
functions. The first argument cannot be quoted, but the
subsequent ones can. It is the quoting of the first argument
that causes the whole thing to be quoted. So we just
avoid quoting the first argument. (If it has spaces, too bad;
don't do that).
(open_process): Fix neglected optional argument handling
in Windows version of this function.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | stream.c | 5 |
2 files changed, 16 insertions, 1 deletions
@@ -1,5 +1,17 @@ 2014-03-16 Kaz Kylheku <kaz@kylheku.com> + * stream.c (win_make_cmdline): I think I cracked the code of + passing escaped arguments to Microsoft's popen and system + functions. The first argument cannot be quoted, but the + subsequent ones can. It is the quoting of the first argument + that causes the whole thing to be quoted. So we just + avoid quoting the first argument. (If it has spaces, too bad; + don't do that). + (open_process): Fix neglected optional argument handling + in Windows version of this function. + +2014-03-16 Kaz Kylheku <kaz@kylheku.com> + * configure: Detect _wspawn* functions. * stream.c (run): Implement using _wspawnvp on MinGW. @@ -2252,6 +2252,9 @@ static val win_make_cmdline(val args) { val out = string(L""); + string_extend(out, pop(&args)); + string_extend(out, lit(" ")); + for (; args; args = cdr(args)) { string_extend(out, lit("\"")); string_extend(out, win_escape_arg(car(args))); @@ -2266,7 +2269,7 @@ static val win_make_cmdline(val args) val open_process(val name, val mode_str, val args) { - val win_cmdline = win_make_cmdline(cons(name, args)); + val win_cmdline = win_make_cmdline(cons(name, default_bool_arg(args))); return open_command(win_cmdline, mode_str); } #endif |