[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-24 680ee61: Backport fix for bug#18745 from master.
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] emacs-24 680ee61: Backport fix for bug#18745 from master. |
Date: |
Tue, 10 Feb 2015 16:52:41 +0000 |
branch: emacs-24
commit 680ee61d04e220e0b2eb4246c8f33773e0185852
Author: Noam Postavsky <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Backport fix for bug#18745 from master.
nt/cmdproxy.c (batch_file_p): New function.
(spawn): If calling a quoted batch file pass NULL for progname.
---
nt/ChangeLog | 6 ++++++
nt/cmdproxy.c | 29 +++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/nt/ChangeLog b/nt/ChangeLog
index d1f953f..861cb18 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-10 Noam Postavsky <address@hidden>
+
+ * nt/cmdproxy.c (batch_file_p): New function.
+ (spawn): If calling a quoted batch file pass NULL for progname.
+ (Bug#18745)
+
2015-02-10 Eli Zaretskii <address@hidden>
* cmdproxy.c (get_next_token): Don't make backslashes disappear
diff --git a/nt/cmdproxy.c b/nt/cmdproxy.c
index ce58152..1695628 100644
--- a/nt/cmdproxy.c
+++ b/nt/cmdproxy.c
@@ -243,6 +243,28 @@ get_next_token (char * buf, const char ** pSrc)
return o - buf;
}
+/* Return TRUE if PROGNAME is a batch file. */
+BOOL
+batch_file_p (const char *progname)
+{
+ const char *exts[] = {".bat", ".cmd"};
+ int n_exts = sizeof (exts) / sizeof (char *);
+ int i;
+
+ const char *ext = strrchr (progname, '.');
+
+ if (ext)
+ {
+ for (i = 0; i < n_exts; i++)
+ {
+ if (stricmp (ext, exts[i]) == 0)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
/* Search for EXEC file in DIR. If EXEC does not have an extension,
DIR is searched for EXEC with the standard extensions appended. */
int
@@ -524,6 +546,13 @@ spawn (const char *progname, char *cmdline, const char
*dir, int *retcode)
memset (&start, 0, sizeof (start));
start.cb = sizeof (start);
+ /* CreateProcess handles batch files as progname specially. This
+ special handling fails when both the batch file and arguments are
+ quoted. We pass NULL as progname to avoid the special
+ handling. */
+ if (progname != NULL && cmdline[0] == '"' && batch_file_p (progname))
+ progname = NULL;
+
if (CreateProcess (progname, cmdline, &sec_attrs, NULL, TRUE,
0, envblock, dir, &start, &child))
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-24 680ee61: Backport fix for bug#18745 from master.,
Eli Zaretskii <=