mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
Merge pull request #4786 from jbradaric/vim-7.4.1516
vim-patch:7.4.1516,7.4.1521
This commit is contained in:
commit
849d61b551
@ -2051,6 +2051,7 @@ serverlist() String get a list of available servers
|
|||||||
setbufvar({expr}, {varname}, {val}) set {varname} in buffer {expr} to {val}
|
setbufvar({expr}, {varname}, {val}) set {varname} in buffer {expr} to {val}
|
||||||
setcharsearch({dict}) Dict set character search from {dict}
|
setcharsearch({dict}) Dict set character search from {dict}
|
||||||
setcmdpos({pos}) Number set cursor position in command-line
|
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}
|
setline({lnum}, {line}) Number set line {lnum} to {line}
|
||||||
setloclist({nr}, {list}[, {action}[, {title}]])
|
setloclist({nr}, {list}[, {action}[, {title}]])
|
||||||
Number modify location list using {list}
|
Number modify location list using {list}
|
||||||
@ -3628,6 +3629,8 @@ getfperm({fname}) *getfperm()*
|
|||||||
< This will hopefully (from a security point of view) display
|
< This will hopefully (from a security point of view) display
|
||||||
the string "rw-r--r--" or even "rw-------".
|
the string "rw-r--r--" or even "rw-------".
|
||||||
|
|
||||||
|
For setting permissions use |setfperm()|.
|
||||||
|
|
||||||
getftime({fname}) *getftime()*
|
getftime({fname}) *getftime()*
|
||||||
The result is a Number, which is the last modification time of
|
The result is a Number, which is the last modification time of
|
||||||
the given file {fname}. The value is measured as seconds
|
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
|
Returns 0 when successful, 1 when not editing the command
|
||||||
line.
|
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()*
|
setline({lnum}, {text}) *setline()*
|
||||||
Set line {lnum} of the current buffer to {text}. To insert
|
Set line {lnum} of the current buffer to {text}. To insert
|
||||||
lines use |append()|.
|
lines use |append()|.
|
||||||
|
@ -6877,6 +6877,7 @@ static struct fst {
|
|||||||
{ "setbufvar", 3, 3, f_setbufvar },
|
{ "setbufvar", 3, 3, f_setbufvar },
|
||||||
{ "setcharsearch", 1, 1, f_setcharsearch },
|
{ "setcharsearch", 1, 1, f_setcharsearch },
|
||||||
{ "setcmdpos", 1, 1, f_setcmdpos },
|
{ "setcmdpos", 1, 1, f_setcmdpos },
|
||||||
|
{ "setfperm", 2, 2, f_setfperm },
|
||||||
{ "setline", 2, 2, f_setline },
|
{ "setline", 2, 2, f_setline },
|
||||||
{ "setloclist", 2, 4, f_setloclist },
|
{ "setloclist", 2, 4, f_setloclist },
|
||||||
{ "setmatches", 1, 1, f_setmatches },
|
{ "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);
|
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
|
* "setline()" function
|
||||||
*/
|
*/
|
||||||
|
@ -163,12 +163,12 @@ static int included_patches[] = {
|
|||||||
// 1524 NA
|
// 1524 NA
|
||||||
// 1523 NA
|
// 1523 NA
|
||||||
// 1522 NA
|
// 1522 NA
|
||||||
// 1521,
|
1521,
|
||||||
// 1520 NA
|
// 1520 NA
|
||||||
// 1519 NA
|
// 1519 NA
|
||||||
// 1518 NA
|
// 1518 NA
|
||||||
// 1517 NA
|
// 1517 NA
|
||||||
// 1516,
|
1516,
|
||||||
// 1515 NA
|
// 1515 NA
|
||||||
// 1514 NA
|
// 1514 NA
|
||||||
1513,
|
1513,
|
||||||
|
42
test/functional/legacy/file_perm_spec.lua
Normal file
42
test/functional/legacy/file_perm_spec.lua
Normal 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)
|
Loading…
Reference in New Issue
Block a user