diff options
author | Jurica Bradaric <jbradaric@gmail.com> | 2016-05-19 21:36:13 +0200 |
---|---|---|
committer | Jurica Bradaric <jbradaric@gmail.com> | 2016-05-19 22:46:50 +0200 |
commit | 093f8d537646e1e13ee45ab8a534b4995ff6d003 (patch) | |
tree | 528f573b972350058dc0171b7329f07a523fce79 /src/nvim/eval.c | |
parent | 1fabc639078e1ddbc4ef6ddd7cb310a67fb1c0fb (diff) | |
download | rneovim-093f8d537646e1e13ee45ab8a534b4995ff6d003.tar.gz rneovim-093f8d537646e1e13ee45ab8a534b4995ff6d003.tar.bz2 rneovim-093f8d537646e1e13ee45ab8a534b4995ff6d003.zip |
vim-patch:7.4.1516
Problem: Cannot change file permissions.
Solution: Add setfperm().
https://github.com/vim/vim/commit/8049253b96838b3584600e5ad229abad37a95b10
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 201a71facb..96c008b0e0 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -6877,6 +6877,7 @@ static struct fst { { "setbufvar", 3, 3, f_setbufvar }, { "setcharsearch", 1, 1, f_setcharsearch }, { "setcmdpos", 1, 1, f_setcmdpos }, + { "setfperm", 2, 2, f_setfperm }, { "setline", 2, 2, f_setline }, { "setloclist", 2, 4, f_setloclist }, { "setmatches", 1, 1, f_setmatches }, @@ -14446,6 +14447,38 @@ static void f_setcmdpos(typval_T *argvars, typval_T *rettv) rettv->vval.v_number = set_cmdline_pos(pos); } + +/// "setfperm({fname}, {mode})" function +static void f_setfperm(typval_T *argvars, typval_T *rettv) +{ + rettv->vval.v_number = 0; + + char_u *fname = get_tv_string_chk(&argvars[0]); + if (fname == NULL) { + return; + } + + char_u modebuf[NUMBUFLEN]; + char_u *mode_str = get_tv_string_buf_chk(&argvars[1], modebuf); + if (mode_str == NULL) { + return; + } + if (STRLEN(mode_str) != 9) { + EMSG2(_(e_invarg2), mode_str); + return; + } + + int mask = 1; + int mode = 0; + for (int i = 8; i >= 0; i--) { + if (mode_str[i] != '-') { + mode |= mask; + } + mask = mask << 1; + } + rettv->vval.v_number = os_setperm(fname, mode) == OK; +} + /* * "setline()" function */ |