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.
This commit is contained in:
Noam Postavsky 2015-02-10 18:51:14 +02:00 committed by Eli Zaretskii
parent 4b0b27d001
commit 680ee61d04
2 changed files with 35 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2015-02-10 Noam Postavsky <npostavs@users.sourceforget.net>
* 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 <eliz@gnu.org>
* cmdproxy.c (get_next_token): Don't make backslashes disappear

View file

@ -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))
{