diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-04-21 23:34:43 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-04-21 23:34:43 +0200 |
commit | ebe74b73677b06db7d483987a863b41cee051cc0 (patch) | |
tree | 845132a5cdf2177e0d45e500e08443f57b3a3bf4 /src/channel.c | |
parent | a69b39511d769bc88f0854bd026556fdb9bd2817 (diff) |
patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmdv8.0.1747
Problem: MS-Windows: term_start() does not set job_info() cmd.
Solution: Share the code from job_start() to set jv_argv.
Diffstat (limited to 'src/channel.c')
-rw-r--r-- | src/channel.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/src/channel.c b/src/channel.c index fbf1cbeb9f..359052208f 100644 --- a/src/channel.c +++ b/src/channel.c @@ -5563,8 +5563,6 @@ job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg) #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_arg, jobopt_T *opt_arg) 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_arg, jobopt_T *opt_arg) } else { - list_T *l = argvars[0].vval.v_list; - listitem_T *li; - char_u *s; + list_T *l = argvars[0].vval.v_list; - /* Pass argv[] to mch_call_shell(). */ - argv = (char **)alloc(sizeof(char *) * (l->lv_len + 1)); - if (argv == NULL) + 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; |