Skip to content

Commit 8ca2870

Browse files
committed
read_symlink: array
1 parent 81b15d5 commit 8ca2870

File tree

7 files changed

+29
-11
lines changed

7 files changed

+29
-11
lines changed

+stdlib/+dotnet/read_symlink.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@
55
try
66
h = System.IO.FileInfo(p);
77
r = string(h.LinkTarget);
8+
% on Unix, this can be empty if the file is not a symlink
89
catch
9-
r = string.empty;
10+
r = "";
11+
end
12+
13+
if isempty(r)
14+
r = "";
1015
end
1116

1217
end

+stdlib/+java/read_symlink.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/Files.html#readSymbolicLink(java.nio.file.Path)
1111
r = string(java.nio.file.Files.readSymbolicLink(javaPathObject(r)));
1212
else
13-
r = string.empty;
13+
r = "";
1414
end
1515

1616
end

+stdlib/+native/read_symlink.m

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
function r = read_symlink(file)
22

33
[ok, r] = isSymbolicLink(file);
4-
if ~ok
5-
r = string.empty;
6-
end
4+
5+
r(~ok) = "";
76

87
end

+stdlib/+python/read_symlink.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function r = read_symlink(p)
22

3-
r = string.empty;
3+
r = "";
44

55
if ~stdlib.is_symlink(p), return, end
66

+stdlib/+sys/read_symlink.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function r = read_symlink(p)
22

3-
r = string.empty;
3+
r = "";
44

55
if ~stdlib.is_symlink(p), return, end
66

+stdlib/read_symlink.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55

66
function r = read_symlink(file, backend)
77
arguments
8-
file {mustBeTextScalar}
8+
file string
99
backend (1,:) string = ["native", "java", "dotnet", "python", "sys"]
1010
end
1111

12-
fun = hbackend(backend, "read_symlink", 'R2024b');
12+
[fun, b] = hbackend(backend, "read_symlink", 'R2024b');
1313

14-
r = fun(file);
14+
if isscalar(file) || b == "native"
15+
r = fun(file);
16+
else
17+
r = arrayfun(fun, file);
18+
end
1519

1620
end

test/TestSymlink.m

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function test_is_symlink_array(tc, ir_backend)
6666

6767
function test_read_symlink_empty(tc, Pre, ir_backend)
6868
try
69-
tc.verifyEmpty(stdlib.read_symlink(Pre, ir_backend))
69+
tc.verifyEqual(stdlib.read_symlink(Pre, ir_backend), "")
7070
catch e
7171
tc.verifyEqual(e.identifier, 'stdlib:hbackend:NameError', e.message)
7272
end
@@ -83,6 +83,16 @@ function test_read_symlink(tc, ir_backend)
8383
end
8484

8585

86+
function test_read_symlink_array(tc, ir_backend)
87+
try
88+
r = stdlib.read_symlink([tc.link, mfilename() + ".m"], ir_backend);
89+
tc.verifyClass(r, 'string')
90+
tc.verifyEqual(r, [tc.target, ""], "failed to detect own link")
91+
catch e
92+
tc.verifyEqual(e.identifier, 'stdlib:hbackend:NameError', e.message)
93+
end
94+
end
95+
8696
function test_create_symlink(tc, cs_backend)
8797
tc.assumeNotEmpty(which("stdlib." + cs_backend + ".create_symlink"))
8898
tc.applyFixture(matlab.unittest.fixtures.SuppressedWarningsFixture(["MATLAB:io:filesystem:symlink:TargetNotFound","MATLAB:io:filesystem:symlink:FileExists"]))

0 commit comments

Comments
 (0)