forked from aniani/vim
patch 8.1.2092: MS-Windows: redirect in system() does not work
Problem: MS-Windows: redirect in system() does not work. Solution: Handle 'shellxescape' and 'shellxquote' better. (Yasuhiro Matsumoto, closes #2054)
This commit is contained in:
@@ -1762,12 +1762,21 @@ make_filter_cmd(
|
||||
STRCAT(buf, itmp);
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* For shells that don't understand braces around commands, at least allow
|
||||
* the use of commands in a pipe.
|
||||
*/
|
||||
STRCPY(buf, cmd);
|
||||
if (itmp != NULL)
|
||||
// For shells that don't understand braces around commands, at least allow
|
||||
// the use of commands in a pipe.
|
||||
if (*p_sxe != NUL && *p_sxq == '(')
|
||||
{
|
||||
if (itmp != NULL || otmp != NULL)
|
||||
vim_snprintf((char *)buf, len, "(%s)", (char *)cmd);
|
||||
else
|
||||
STRCPY(buf, cmd);
|
||||
if (itmp != NULL)
|
||||
{
|
||||
STRCAT(buf, " < ");
|
||||
STRCAT(buf, itmp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
@@ -1819,18 +1828,20 @@ append_redir(
|
||||
char_u *end;
|
||||
|
||||
end = buf + STRLEN(buf);
|
||||
/* find "%s" */
|
||||
// find "%s"
|
||||
for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p)
|
||||
{
|
||||
if (p[1] == 's') /* found %s */
|
||||
if (p[1] == 's') // found %s
|
||||
break;
|
||||
if (p[1] == '%') /* skip %% */
|
||||
if (p[1] == '%') // skip %%
|
||||
++p;
|
||||
}
|
||||
if (p != NULL)
|
||||
{
|
||||
*end = ' '; /* not really needed? Not with sh, ksh or bash */
|
||||
vim_snprintf((char *)end + 1, (size_t)(buflen - (end + 1 - buf)),
|
||||
#ifdef MSWIN
|
||||
*end++ = ' '; // not really needed? Not with sh, ksh or bash
|
||||
#endif
|
||||
vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
|
||||
(char *)opt, (char *)fname);
|
||||
}
|
||||
else
|
||||
@@ -1838,7 +1849,7 @@ append_redir(
|
||||
#ifdef FEAT_QUICKFIX
|
||||
" %s %s",
|
||||
#else
|
||||
" %s%s", /* " > %s" causes problems on Amiga */
|
||||
" %s%s", // " > %s" causes problems on Amiga
|
||||
#endif
|
||||
(char *)opt, (char *)fname);
|
||||
}
|
||||
|
Reference in New Issue
Block a user