summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2011-08-04 22:59:28 +0200
committerBram Moolenaar <bram@vim.org>2011-08-04 22:59:28 +0200
commit6b1063e01f0efa997965cd69797595b5da0d08a9 (patch)
treef2da0b806e94b0582a43a5cc129071f125da239b
parent4c57d2cc6c3c18369e96d8e2cf2d2a9b03284207 (diff)
downloadvim-6b1063e01f0efa997965cd69797595b5da0d08a9.tar.gz
updated for version 7.3.269v7.3.269v7-3-269
Problem: 'shellcmdflag' only works with one flag. Solution: Split into multiple arguments. (Gary Johnson)
-rw-r--r--src/os_unix.c34
-rw-r--r--src/version.c2
2 files changed, 35 insertions, 1 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index 391af9cb..7b41a90a 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3795,8 +3795,10 @@ mch_call_shell(cmd, options)
int retval = -1;
char **argv = NULL;
int argc;
+ char_u *p_shcf_copy = NULL;
int i;
char_u *p;
+ char_u *s;
int inquote;
int pty_master_fd = -1; /* for pty's */
# ifdef FEAT_GUI
@@ -3855,6 +3857,19 @@ mch_call_shell(cmd, options)
}
if (argv == NULL)
{
+ /*
+ * Account for possible multiple args in p_shcf.
+ */
+ p = p_shcf;
+ for (;;)
+ {
+ p = skiptowhite(p);
+ if (*p == NUL)
+ break;
+ ++argc;
+ p = skipwhite(p);
+ }
+
argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
if (argv == NULL) /* out of memory */
goto error;
@@ -3864,7 +3879,23 @@ mch_call_shell(cmd, options)
{
if (extra_shell_arg != NULL)
argv[argc++] = (char *)extra_shell_arg;
- argv[argc++] = (char *)p_shcf;
+
+ /* Break 'shellcmdflag' into white separated parts. This doesn't
+ * handle quoted strings, they are very unlikely to appear. */
+ p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
+ if (p_shcf_copy == NULL) /* out of memory */
+ goto error;
+ s = p_shcf_copy;
+ p = p_shcf;
+ while (*p != NUL)
+ {
+ argv[argc++] = (char *)s;
+ while (*p && *p != ' ' && *p != TAB)
+ *s++ = *p++;
+ *s++ = NUL;
+ p = skipwhite(p);
+ }
+
argv[argc++] = (char *)cmd;
}
argv[argc] = NULL;
@@ -4677,6 +4708,7 @@ finished:
}
}
vim_free(argv);
+ vim_free(p_shcf_copy);
error:
if (!did_settmode)
diff --git a/src/version.c b/src/version.c
index 8adefc08..0d97adec 100644
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 269,
+/**/
268,
/**/
267,