]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.269 v7.3.269
authorBram Moolenaar <Bram@vim.org>
Thu, 4 Aug 2011 20:59:28 +0000 (22:59 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 4 Aug 2011 20:59:28 +0000 (22:59 +0200)
Problem:    'shellcmdflag' only works with one flag.
Solution:   Split into multiple arguments. (Gary Johnson)

src/os_unix.c
src/version.c

index 391af9cb13ffd9077655b4aa97cfdb4b1a55c2e4..7b41a90a4f81967bb899c201dc13f28738052966 100644 (file)
@@ -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)
index 8adefc0809fcfcbd97ec7f183f697cd94281b08c..0d97adec54743a28c25b67069579100440489896 100644 (file)
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    269,
 /**/
     268,
 /**/