|
2 | 2 | % optional: mex |
3 | 3 | % |
4 | 4 | %%% Inputs |
5 | | -% * path {mustBeTextScalar} |
6 | | -% * readable (1,1) int (-1 remove read permission, 0 no change, 1 add read permission) |
7 | | -% * writable (1,1) int (-1 remove write permission, 0 no change, 1 add write permission) |
8 | | -% * executable (1,1) int (-1 remove execute permission, 0 no change, 1 add execute permission) |
| 5 | +% * file |
| 6 | +% * readable (-1 remove read permission, 0 no change, 1 add read permission) |
| 7 | +% * writable (-1 remove write permission, 0 no change, 1 add write permission) |
| 8 | +% * executable (-1 remove execute permission, 0 no change, 1 add execute permission) |
9 | 9 | %%% Outputs |
10 | 10 | % * ok (1,1) logical |
11 | 11 |
|
12 | | -function ok = set_permissions(path, readable, writable, executable) |
| 12 | +function ok = set_permissions(file, readable, writable, executable) |
13 | 13 | arguments |
14 | | - path {mustBeTextScalar,mustBeFile} |
| 14 | + file {mustBeTextScalar} |
15 | 15 | readable (1,1) {mustBeInteger, mustBeInRange(readable, -1, 1)} |
16 | 16 | writable (1,1) {mustBeInteger, mustBeInRange(writable, -1, 1)} |
17 | 17 | executable (1,1) {mustBeInteger, mustBeInRange(executable, -1, 1)} |
18 | 18 | end |
19 | 19 |
|
| 20 | +ok = false; |
| 21 | + |
| 22 | +if ~stdlib.exists(file), return, end |
| 23 | + |
20 | 24 |
|
21 | 25 | if isMATLABReleaseOlderThan('R2025a') |
22 | | - warning("stdlib:set_permissions:RequiresMex", "set_permissions requires 'buildtool mex'"); |
23 | | - ok = false; |
| 26 | + |
| 27 | + mode = ''; |
| 28 | + if readable == 1 |
| 29 | + mode = [mode '+r']; |
| 30 | + elseif readable == -1 |
| 31 | + mode = [mode '-r']; |
| 32 | + end |
| 33 | + if writable == 1 |
| 34 | + mode = [mode '+w']; |
| 35 | + elseif writable == -1 |
| 36 | + mode = [mode '-w']; |
| 37 | + end |
| 38 | + if executable == 1 |
| 39 | + mode = [mode '+x']; |
| 40 | + elseif executable == -1 |
| 41 | + mode = [mode '-x']; |
| 42 | + end |
| 43 | + |
| 44 | + [s, msg, id] = fileattrib(file, mode); |
| 45 | + ok = s == 1; |
| 46 | + if ~ok |
| 47 | + warning(id, "Failed to set permissions for %s: %s", file, msg) |
| 48 | + end |
| 49 | + |
24 | 50 | else |
25 | | - p = filePermissions(path); |
| 51 | + p = filePermissions(file); |
26 | 52 |
|
27 | 53 | if readable ~= 0 |
28 | 54 | setPermissions(p, "Readable", readable > 0); |
|
0 commit comments