diff options
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 43 |
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; |