mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
patch 8.2.3232: system() does not work without a second argument
Problem: system() does not work without a second argument. Solution: Do not require a second argument. (Yegappan Lakshmanan, closes #8651, closes #8650)
This commit is contained in:
parent
9088784972
commit
7e6a2a64f0
@ -2359,7 +2359,7 @@ get_cmd_output_as_rettv(
|
||||
|
||||
if (in_vim9script()
|
||||
&& (check_for_string_arg(argvars, 0) == FAIL
|
||||
|| check_for_string_or_number_or_list_arg(argvars, 1) == FAIL))
|
||||
|| check_for_opt_string_or_number_or_list_arg(argvars, 1) == FAIL))
|
||||
return;
|
||||
|
||||
if (argvars[1].v_type != VAR_UNKNOWN)
|
||||
|
@ -36,6 +36,7 @@ int check_for_string_or_list_arg(typval_T *args, int idx);
|
||||
int check_for_opt_string_or_list_arg(typval_T *args, int idx);
|
||||
int check_for_string_or_dict_arg(typval_T *args, int idx);
|
||||
int check_for_string_or_number_or_list_arg(typval_T *args, int idx);
|
||||
int check_for_opt_string_or_number_or_list_arg(typval_T *args, int idx);
|
||||
int check_for_string_or_list_or_dict_arg(typval_T *args, int idx);
|
||||
int check_for_list_or_blob_arg(typval_T *args, int idx);
|
||||
int check_for_list_or_dict_arg(typval_T *args, int idx);
|
||||
|
@ -3290,11 +3290,17 @@ enddef
|
||||
def Test_system()
|
||||
CheckDefAndScriptFailure2(['system(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
|
||||
CheckDefAndScriptFailure2(['system("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String or List required for argument 2')
|
||||
assert_equal("123\n", system('echo 123'))
|
||||
enddef
|
||||
|
||||
def Test_systemlist()
|
||||
CheckDefAndScriptFailure2(['systemlist(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
|
||||
CheckDefAndScriptFailure2(['systemlist("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String or List required for argument 2')
|
||||
if has('win32')
|
||||
call assert_equal(["123\r"], systemlist('echo 123'))
|
||||
else
|
||||
call assert_equal(['123'], systemlist('echo 123'))
|
||||
endif
|
||||
enddef
|
||||
|
||||
def Test_tabpagebuflist()
|
||||
|
11
src/typval.c
11
src/typval.c
@ -726,6 +726,17 @@ check_for_string_or_number_or_list_arg(typval_T *args, int idx)
|
||||
return OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Give an error and return FAIL unless "args[idx]" is an optional string
|
||||
* or number or a list
|
||||
*/
|
||||
int
|
||||
check_for_opt_string_or_number_or_list_arg(typval_T *args, int idx)
|
||||
{
|
||||
return (args[idx].v_type == VAR_UNKNOWN
|
||||
|| check_for_string_or_number_or_list_arg(args, idx) != FAIL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Give an error and return FAIL unless "args[idx]" is a string or a list
|
||||
* or a dict.
|
||||
|
@ -755,6 +755,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3232,
|
||||
/**/
|
||||
3231,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user