Mercurial > vim
comparison src/misc2.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 | 260256caac38 |
children | 96e4c6b26998 |
comparison
equal
deleted
inserted
replaced
13749:f30ac8135299 | 13750:3ab6198c1f9a |
---|---|
6511 return FAIL; | 6511 return FAIL; |
6512 } | 6512 } |
6513 } | 6513 } |
6514 return OK; | 6514 return OK; |
6515 } | 6515 } |
6516 #endif | 6516 |
6517 # if defined(FEAT_JOB_CHANNEL) || defined(PROTO) | |
6518 /* | |
6519 * Build "argv[argc]" from the string "cmd". | |
6520 * "argv[argc]" is set to NULL; | |
6521 * Return FAIL when out of memory. | |
6522 */ | |
6523 int | |
6524 build_argv_from_string(char_u *cmd, char ***argv, int *argc) | |
6525 { | |
6526 char_u *cmd_copy; | |
6527 int i; | |
6528 | |
6529 /* Make a copy, parsing will modify "cmd". */ | |
6530 cmd_copy = vim_strsave(cmd); | |
6531 if (cmd_copy == NULL | |
6532 || mch_parse_cmd(cmd_copy, FALSE, argv, argc) == FAIL) | |
6533 { | |
6534 vim_free(cmd_copy); | |
6535 return FAIL; | |
6536 } | |
6537 for (i = 0; i < *argc; i++) | |
6538 (*argv)[i] = (char *)vim_strsave((char_u *)(*argv)[i]); | |
6539 (*argv)[*argc] = NULL; | |
6540 vim_free(cmd_copy); | |
6541 return OK; | |
6542 } | |
6543 | |
6544 /* | |
6545 * Build "argv[argc]" from the list "l". | |
6546 * "argv[argc]" is set to NULL; | |
6547 * Return FAIL when out of memory. | |
6548 */ | |
6549 int | |
6550 build_argv_from_list(list_T *l, char ***argv, int *argc) | |
6551 { | |
6552 listitem_T *li; | |
6553 char_u *s; | |
6554 | |
6555 /* Pass argv[] to mch_call_shell(). */ | |
6556 *argv = (char **)alloc(sizeof(char *) * (l->lv_len + 1)); | |
6557 if (*argv == NULL) | |
6558 return FAIL; | |
6559 *argc = 0; | |
6560 for (li = l->lv_first; li != NULL; li = li->li_next) | |
6561 { | |
6562 s = get_tv_string_chk(&li->li_tv); | |
6563 if (s == NULL) | |
6564 { | |
6565 int i; | |
6566 | |
6567 for (i = 0; i < *argc; ++i) | |
6568 vim_free((*argv)[i]); | |
6569 return FAIL; | |
6570 } | |
6571 (*argv)[*argc] = (char *)vim_strsave(s); | |
6572 *argc += 1; | |
6573 } | |
6574 (*argv)[*argc] = NULL; | |
6575 return OK; | |
6576 } | |
6577 # endif | |
6578 #endif |