diff src/channel.c @ 13750:3ab6198c1f9a v8.0.1747

patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd commit https://github.com/vim/vim/commit/ebe74b73677b06db7d483987a863b41cee051cc0 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 21 23:34:43 2018 +0200 patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd Problem: MS-Windows: term_start() does not set job_info() cmd. Solution: Share the code from job_start() to set jv_argv.
author Christian Brabandt <cb@256bit.org>
date Sat, 21 Apr 2018 23:45:06 +0200
parents e5244201fed6
children 5f6c61a71c02
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -5563,8 +5563,6 @@ job_start(typval_T *argvars, char **argv
 #endif
     if (argvars[0].v_type == VAR_STRING)
     {
-	char_u	*cmd_copy;
-
 	/* Command is a string. */
 	cmd = argvars[0].vval.v_string;
 	if (cmd == NULL || *cmd == NUL)
@@ -5572,18 +5570,9 @@ job_start(typval_T *argvars, char **argv
 	    EMSG(_(e_invarg));
 	    goto theend;
 	}
-	/* Make a copy, parsing will modify "cmd". */
-	cmd_copy = vim_strsave(cmd);
-	if (cmd_copy == NULL
-		|| mch_parse_cmd(cmd_copy, FALSE, &argv, &argc) == FAIL)
-	{
-	    vim_free(cmd_copy);
+
+	if (build_argv_from_string(cmd, &argv, &argc) == FAIL)
 	    goto theend;
-	}
-	for (i = 0; i < argc; i++)
-	    argv[i] = (char *)vim_strsave((char_u *)argv[i]);
-	argv[argc] = NULL;
-	vim_free(cmd_copy);
     }
     else if (argvars[0].v_type != VAR_LIST
 	    || argvars[0].vval.v_list == NULL
@@ -5594,27 +5583,10 @@ job_start(typval_T *argvars, char **argv
     }
     else
     {
-	list_T	    *l = argvars[0].vval.v_list;
-	listitem_T  *li;
-	char_u	    *s;
-
-	/* Pass argv[] to mch_call_shell(). */
-	argv = (char **)alloc(sizeof(char *) * (l->lv_len + 1));
-	if (argv == NULL)
+	list_T *l = argvars[0].vval.v_list;
+
+	if (build_argv_from_list(l, &argv, &argc) == FAIL)
 	    goto theend;
-	for (li = l->lv_first; li != NULL; li = li->li_next)
-	{
-	    s = get_tv_string_chk(&li->li_tv);
-	    if (s == NULL)
-	    {
-		for (i = 0; i < argc; ++i)
-		    vim_free(argv[i]);
-		goto theend;
-	    }
-	    argv[argc++] = (char *)vim_strsave(s);
-	}
-	argv[argc] = NULL;
-
 #ifndef USE_ARGV
 	if (win32_build_cmd(l, &ga) == FAIL)
 	    goto theend;