aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 04d90e255d..a61f082e59 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -6494,8 +6494,8 @@ static struct fst {
{"searchpair", 3, 7, f_searchpair},
{"searchpairpos", 3, 7, f_searchpairpos},
{"searchpos", 1, 4, f_searchpos},
- {"send_call", 3, 3, f_send_call},
- {"send_event", 3, 3, f_send_event},
+ {"send_call", 2, 64, f_send_call},
+ {"send_event", 2, 64, f_send_event},
{"setbufvar", 3, 3, f_setbufvar},
{"setcmdpos", 1, 1, f_setcmdpos},
{"setline", 2, 2, f_setline},
@@ -9166,15 +9166,16 @@ static void f_getfsize(typval_T *argvars, typval_T *rettv)
rettv->v_type = VAR_NUMBER;
- off_t file_size;
- if (os_get_file_size(fname, &file_size)) {
+ FileInfo file_info;
+ if (os_fileinfo(fname, &file_info)) {
+ uint64_t filesize = os_fileinfo_size(&file_info);
if (os_isdir((char_u *)fname))
rettv->vval.v_number = 0;
else {
- rettv->vval.v_number = (varnumber_T)file_size;
+ rettv->vval.v_number = (varnumber_T)filesize;
/* non-perfect check for overflow */
- if ((off_t)rettv->vval.v_number != file_size) {
+ if ((uint64_t)rettv->vval.v_number != filesize) {
rettv->vval.v_number = -2;
}
}
@@ -9191,7 +9192,7 @@ static void f_getftime(typval_T *argvars, typval_T *rettv)
char *fname = (char *)get_tv_string(&argvars[0]);
FileInfo file_info;
- if (os_get_file_info(fname, &file_info)) {
+ if (os_fileinfo(fname, &file_info)) {
rettv->vval.v_number = (varnumber_T)file_info.stat.st_mtim.tv_sec;
} else {
rettv->vval.v_number = -1;
@@ -9211,7 +9212,7 @@ static void f_getftype(typval_T *argvars, typval_T *rettv)
rettv->v_type = VAR_STRING;
FileInfo file_info;
- if (os_get_file_info_link((char *)fname, &file_info)) {
+ if (os_fileinfo_link((char *)fname, &file_info)) {
uint64_t mode = file_info.stat.st_mode;
#ifdef S_ISREG
if (S_ISREG(mode))
@@ -12700,13 +12701,19 @@ static void f_send_call(typval_T *argvars, typval_T *rettv)
return;
}
+ Array args = ARRAY_DICT_INIT;
+
+ for (typval_T *tv = argvars + 2; tv->v_type != VAR_UNKNOWN; tv++) {
+ ADD(args, vim_to_object(tv));
+ }
+
bool errored;
Object result;
if (!channel_send_call((uint64_t)argvars[0].vval.v_number,
- (char *)argvars[1].vval.v_string,
- vim_to_object(&argvars[2]),
- &result,
- &errored)) {
+ (char *)argvars[1].vval.v_string,
+ args,
+ &result,
+ &errored)) {
EMSG2(_(e_invarg2), "Channel doesn't exist");
return;
}
@@ -12741,9 +12748,15 @@ static void f_send_event(typval_T *argvars, typval_T *rettv)
return;
}
+ Array args = ARRAY_DICT_INIT;
+
+ for (typval_T *tv = argvars + 2; tv->v_type != VAR_UNKNOWN; tv++) {
+ ADD(args, vim_to_object(tv));
+ }
+
if (!channel_send_event((uint64_t)argvars[0].vval.v_number,
(char *)argvars[1].vval.v_string,
- vim_to_object(&argvars[2]))) {
+ args)) {
EMSG2(_(e_invarg2), "Channel doesn't exist");
return;
}
@@ -19217,7 +19230,9 @@ static void apply_job_autocmds(Job *job, char *name, char *type, char *str)
static void script_host_eval(char *method, typval_T *argvars, typval_T *rettv)
{
- Object result = provider_call(method, vim_to_object(argvars));
+ Array args = ARRAY_DICT_INIT;
+ ADD(args, vim_to_object(argvars));
+ Object result = provider_call(method, args);
if (result.type == kObjectTypeNil) {
return;