diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-08-06 20:49:59 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-06 12:49:59 +0000 |
commit | 28fbba2092adb9659253434605cb94252241f5e0 (patch) | |
tree | e7665e98c3c87f3b57ab348d143da98196efdfcc /src/nvim/eval | |
parent | b5f92c4e5c7428fe1c1f91620f4b545b30b49855 (diff) | |
download | rneovim-28fbba2092adb9659253434605cb94252241f5e0.tar.gz rneovim-28fbba2092adb9659253434605cb94252241f5e0.tar.bz2 rneovim-28fbba2092adb9659253434605cb94252241f5e0.zip |
vim-patch:9.1.0465: missing filecopy() function (#29989)
Problem: missing filecopy() function
Solution: implement filecopy() Vim script function
(Shougo Matsushita)
closes: vim/vim#12346
https://github.com/vim/vim/commit/60c8743ab6c90e402e6ed49d27455ef7e5698abe
Co-authored-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Diffstat (limited to 'src/nvim/eval')
-rw-r--r-- | src/nvim/eval/fs.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/nvim/eval/fs.c b/src/nvim/eval/fs.c index 9719caa52e..381fee1a3f 100644 --- a/src/nvim/eval/fs.c +++ b/src/nvim/eval/fs.c @@ -154,6 +154,27 @@ void f_exepath(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) rettv->vval.v_string = path; } +/// "filecopy()" function +void f_filecopy(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) +{ + rettv->vval.v_number = false; + + if (check_secure() + || tv_check_for_string_arg(argvars, 0) == FAIL + || tv_check_for_string_arg(argvars, 1) == FAIL) { + return; + } + + const char *from = tv_get_string(&argvars[0]); + + FileInfo from_info; + if (os_fileinfo_link(from, &from_info) + && (S_ISREG(from_info.stat.st_mode) || S_ISLNK(from_info.stat.st_mode))) { + rettv->vval.v_number + = vim_copyfile(tv_get_string(&argvars[0]), tv_get_string(&argvars[1])) == OK; + } +} + /// "filereadable()" function void f_filereadable(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) { |