Skip to content

Commit 888a196

Browse files
committed
set_permission: correct algorithms and layout
1 parent 0418a99 commit 888a196

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

+stdlib/+native/set_permissions_legacy.m renamed to +stdlib/+legacy/set_permissions.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function ok = set_permissions_legacy(file, readable, writable, executable)
1+
function ok = set_permissions(file, readable, writable, executable)
22

33
mode = '';
44
% mode is space-delimited

+stdlib/+native/set_permissions.m

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,35 @@
22

33
p = filePermissions(file);
44

5+
k = string.empty;
6+
v = logical.empty;
7+
58
if readable ~= 0
6-
setPermissions(p, "Readable", readable > 0);
9+
k(end+1) = "Readable";
10+
v(end+1) = readable > 0;
711
end
12+
813
if writable ~= 0
9-
setPermissions(p, "Writable", writable > 0);
14+
k(end+1) = "Writable";
15+
v(end+1) = writable > 0;
1016
end
17+
1118
if executable ~= 0
12-
setPermissions(p, "Executable", executable > 0);
19+
if ispc()
20+
if executable > 0 && ~any(ismember(k, "Readable"))
21+
k(end+1) = "Readable";
22+
v(end+1) = true;
23+
end
24+
else
25+
k(end+1) = "Executable";
26+
v(end+1) = executable > 0;
27+
end
1328
end
1429

1530
ok = true;
1631

32+
if ~isempty(k)
33+
setPermissions(p, k, v)
34+
end
35+
1736
end

+stdlib/set_permissions.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424

2525
if isMATLABReleaseOlderThan('R2025a')
26-
ok = stdlib.native.set_permissions_legacy(file, readable, writable, executable);
26+
ok = stdlib.legacy.set_permissions(file, readable, writable, executable);
2727
else
2828
ok = stdlib.native.set_permissions(file, readable, writable, executable);
2929
end

test/TestPermissions.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
properties (TestParameter)
44
Ps = {".", pwd(), "", tempname(), mfilename('fullpath') + ".m"}
5-
sp_fun = {@stdlib.native.set_permissions, @stdlib.native.set_permissions_legacy}
5+
sp_fun = {@stdlib.native.set_permissions, @stdlib.legacy.set_permissions}
66
end
77

88
methods(TestClassSetup)
@@ -67,7 +67,7 @@ function test_set_permissions_nowrite(tc, sp_fun)
6767
tc.verifyTrue(sp_fun(nw, 0, -1, 0))
6868
p = stdlib.get_permissions(nw);
6969

70-
if ~ispc() || ~endsWith(func2str(sp_fun), "legacy")
70+
if ~ispc() || ~contains(func2str(sp_fun), ".legacy.")
7171
tc.verifyThat(p, StartsWithSubstring("r-"), "no-write permission failed to set")
7272
end
7373

0 commit comments

Comments
 (0)