aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2016-05-22 12:55:30 -0400
committerJustin M. Keyes <justinkz@gmail.com>2016-05-22 12:55:30 -0400
commit849d61b5510b3a3449c2664cb5a702126a2f6e8b (patch)
tree2d3b10a780465dd63892f7590c20de3bc621a307 /src/nvim/eval.c
parentd8d159c123336ed0c2eac36fcca66c45633d0370 (diff)
parent114fd522308c8b4b66b8ff30b0a91b02e347db73 (diff)
downloadrneovim-849d61b5510b3a3449c2664cb5a702126a2f6e8b.tar.gz
rneovim-849d61b5510b3a3449c2664cb5a702126a2f6e8b.tar.bz2
rneovim-849d61b5510b3a3449c2664cb5a702126a2f6e8b.zip
Merge pull request #4786 from jbradaric/vim-7.4.1516
vim-patch:7.4.1516,7.4.1521
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c33
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
*/