summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-03-16 00:34:24 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-03-16 00:34:24 -0700
commitbe7b45c73099abee4dfd53502e9256f86342b6c4 (patch)
tree53e5fe4a97b6d8bc45356fe47604e600e1de08ad
parentaca7c64aa69a4e14a2dd57779cd206a5aa15f649 (diff)
downloadtxr-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--ChangeLog12
-rw-r--r--stream.c5
2 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d7b929fe..7f9615d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
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