patch 8.1.0468: MS-Windows: filter command with pipe character fails
Problem: MS-Windows: Filter command with pipe character fails. (Johannes
Riecken)
Solution: Find the pipe character outside of quotes. (Yasuhiro Matsumoto,
closes #1743, closes #3523)
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 99c19f9..0a5387c 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -1676,6 +1676,26 @@
apply_autocmds(EVENT_SHELLCMDPOST, NULL, NULL, FALSE, curbuf);
}
+#if !defined(UNIX)
+ static char_u *
+find_pipe(char_u *cmd)
+{
+ char_u *p;
+ int inquote = FALSE;
+
+ for (p = cmd; *p != NUL; ++p)
+ {
+ if (!inquote && *p == '|')
+ return p;
+ if (*p == '"')
+ inquote = !inquote;
+ else if (rem_backslash(p))
+ ++p;
+ }
+ return NULL;
+}
+#endif
+
/*
* Create a shell command from a command string, input redirection file and
* output redirection file.
@@ -1746,7 +1766,7 @@
*/
if (*p_shq == NUL)
{
- p = vim_strchr(buf, '|');
+ p = find_pipe(buf);
if (p != NULL)
*p = NUL;
}
@@ -1754,7 +1774,7 @@
STRCAT(buf, itmp);
if (*p_shq == NUL)
{
- p = vim_strchr(cmd, '|');
+ p = find_pipe(cmd);
if (p != NULL)
{
STRCAT(buf, " "); /* insert a space before the '|' for DOS */