summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2021-07-28 11:51:48 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-28 11:51:48 +0200
commit7e6a2a64f09df577f29e024c1d1e6733d6bc1b7c (patch)
tree2c8867bbd35e1c07756c74041e2fff09e7f9f928
parent9088784972c0ed72997de8752964d6b587218778 (diff)
downloadvim-git-7e6a2a64f09df577f29e024c1d1e6733d6bc1b7c.tar.gz
patch 8.2.3232: system() does not work without a second argumentv8.2.3232
Problem: system() does not work without a second argument. Solution: Do not require a second argument. (Yegappan Lakshmanan, closes #8651, closes #8650)
-rw-r--r--src/misc1.c2
-rw-r--r--src/proto/typval.pro1
-rw-r--r--src/testdir/test_vim9_builtin.vim6
-rw-r--r--src/typval.c11
-rw-r--r--src/version.c2
5 files changed, 21 insertions, 1 deletions
diff --git a/src/misc1.c b/src/misc1.c
index e66f5a85d..7d7f022f1 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -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)
diff --git a/src/proto/typval.pro b/src/proto/typval.pro
index 9b5af699d..e509e4d95 100644
--- a/src/proto/typval.pro
+++ b/src/proto/typval.pro
@@ -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);
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index bd52f702c..20a81baac 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -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()
diff --git a/src/typval.c b/src/typval.c
index 34032177d..fb527e988 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -727,6 +727,17 @@ check_for_string_or_number_or_list_arg(typval_T *args, int idx)
}
/*
+ * 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.
*/
diff --git a/src/version.c b/src/version.c
index e6491db0f..85b8ae9f5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3232,
+/**/
3231,
/**/
3230,