Merge pull request #4786 from jbradaric/vim-7.4.1516

vim-patch:7.4.1516,7.4.1521
This commit is contained in:
Justin M. Keyes 2016-05-22 12:55:30 -04:00
commit 849d61b551
4 changed files with 97 additions and 2 deletions

View File

@ -2051,6 +2051,7 @@ serverlist() String get a list of available servers
setbufvar({expr}, {varname}, {val}) set {varname} in buffer {expr} to {val}
setcharsearch({dict}) Dict set character search from {dict}
setcmdpos({pos}) Number set cursor position in command-line
setfperm({fname}, {mode} Number set {fname} file permissions to {mode}
setline({lnum}, {line}) Number set line {lnum} to {line}
setloclist({nr}, {list}[, {action}[, {title}]])
Number modify location list using {list}
@ -3628,6 +3629,8 @@ getfperm({fname}) *getfperm()*
< This will hopefully (from a security point of view) display
the string "rw-r--r--" or even "rw-------".
For setting permissions use |setfperm()|.
getftime({fname}) *getftime()*
The result is a Number, which is the last modification time of
the given file {fname}. The value is measured as seconds
@ -5866,6 +5869,23 @@ setcmdpos({pos}) *setcmdpos()*
Returns 0 when successful, 1 when not editing the command
line.
setfperm({fname}, {mode}) *setfperm()* *chmod*
Set the file permissions for {fname} to {mode}.
{mode} must be a string with 9 characters. It is of the form
"rwxrwxrwx", where each group of "rwx" flags represent, in
turn, the permissions of the owner of the file, the group the
file belongs to, and other users. A '-' character means the
permission is off, any other character means on. Multi-byte
characters are not supported.
For example "rw-r-----" means read-write for the user,
readable by the group, not accessible by others. "xx-x-----"
would do the same thing.
Returns non-zero for success, zero for failure.
To read permissions see |getfperm()|.
setline({lnum}, {text}) *setline()*
Set line {lnum} of the current buffer to {text}. To insert
lines use |append()|.

View File

@ -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
*/

View File

@ -163,12 +163,12 @@ static int included_patches[] = {
// 1524 NA
// 1523 NA
// 1522 NA
// 1521,
1521,
// 1520 NA
// 1519 NA
// 1518 NA
// 1517 NA
// 1516,
1516,
// 1515 NA
// 1514 NA
1513,

View File

@ -0,0 +1,42 @@
-- Test getting and setting file permissions.
require('os')
local helpers = require('test.functional.helpers')
local clear, call, eq = helpers.clear, helpers.call, helpers.eq
local neq, exc_exec = helpers.neq, helpers.exc_exec
describe('Test getting and setting file permissions', function()
local tempfile = os.tmpname()
before_each(function()
os.remove(tempfile)
clear()
end)
it('file permissions', function()
eq('', call('getfperm', tempfile))
eq(0, call('setfperm', tempfile, 'r------'))
call('writefile', {'one'}, tempfile)
eq(9, call('len', call('getfperm', tempfile)))
eq(1, call('setfperm', tempfile, 'rwx------'))
if helpers.os_name == 'windows' then
eq('rw-rw-rw-', call('getfperm', tempfile))
else
eq('rwx------', call('getfperm', tempfile))
end
eq(1, call('setfperm', tempfile, 'r--r--r--'))
eq('r--r--r--', call('getfperm', tempfile))
local err = exc_exec(('call setfperm("%s", "---")'):format(tempfile))
neq(err:find('E475:'), nil)
eq(1, call('setfperm', tempfile, 'rwx------'))
end)
after_each(function()
os.remove(tempfile)
end)
end)