From be7b45c73099abee4dfd53502e9256f86342b6c4 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 16 Mar 2014 00:34:24 -0700 Subject: * 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. --- ChangeLog | 12 ++++++++++++ stream.c | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d7b929fe..7f9615d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2014-03-16 Kaz Kylheku + + * 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 * configure: Detect _wspawn* functions. diff --git a/stream.c b/stream.c index 338f62d8..64ac01d3 100644 --- a/stream.c +++ b/stream.c @@ -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 -- cgit v1.2.3