Skip to content

Commit 5d27ed7

Browse files
committed
hard_link_count: choose_method
1 parent 4de8594 commit 5d27ed7

File tree

3 files changed

+17
-19
lines changed

3 files changed

+17
-19
lines changed

+stdlib/hard_link_count.m

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,15 @@
55
% * https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/Files.html#getPosixFileAttributes(java.nio.file.Path,java.nio.file.LinkOption...)
66
% * https://docs.oracle.com/javase/tutorial/essential/io/links.html
77

8-
function c = hard_link_count(p)
8+
function c = hard_link_count(file, method)
99
arguments
10-
p {mustBeTextScalar}
10+
file {mustBeTextScalar}
11+
method (1,:) string = ["java", "python"]
1112
end
1213

13-
c = 0;
14+
fun = choose_method(method, "hard_link_count");
1415

15-
if isunix() && stdlib.has_java()
16-
c = stdlib.java.hard_link_count(p);
17-
elseif stdlib.has_python()
18-
c = stdlib.python.hard_link_count(p);
19-
elseif stdlib.isoctave()
20-
[s, err] = stat(p);
21-
if err == 0
22-
c = s.nlink;
23-
end
24-
end
16+
c = fun(file);
2517

2618
end
2719

+stdlib/private/choose_method.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
if endsWith(name, "ram_total")
1919
if stdlib.dotnet_api() < 6, continue, end
2020
end
21+
case "java"
22+
has = @stdlib.has_java;
23+
if endsWith(name, "hard_link_count")
24+
if ~isunix(), continue, end
25+
end
2126
case "python"
2227
has = @stdlib.has_python;
2328

test/TestDisk.m

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
inode_fun = {@stdlib.inode, @stdlib.sys.inode, @stdlib.java.inode, @stdlib.python.inode}
1212
disk_available_fun = {@stdlib.disk_available, @stdlib.sys.disk_available, @stdlib.dotnet.disk_available, @stdlib.java.disk_available, @stdlib.python.disk_available}
1313
disk_capacity_fun = {@stdlib.disk_capacity, @stdlib.sys.disk_capacity, @stdlib.dotnet.disk_capacity, @stdlib.java.disk_capacity, @stdlib.python.disk_capacity}
14-
hl_fun = {@stdlib.hard_link_count, @stdlib.java.hard_link_count, @stdlib.python.hard_link_count}
14+
hl_fun = {'java', 'python'}
1515
fst_fun = {@stdlib.filesystem_type, @stdlib.sys.filesystem_type, @stdlib.dotnet.filesystem_type, @stdlib.java.filesystem_type, @stdlib.python.filesystem_type}
1616
owner_fun = {@stdlib.get_owner, @stdlib.sys.get_owner, @stdlib.dotnet.get_owner, @stdlib.java.get_owner, @stdlib.python.get_owner}
1717
end
@@ -60,11 +60,12 @@ function test_disk_capacity(tc, Ps, disk_capacity_fun)
6060

6161

6262
function test_hard_link_count(tc, hl_fun)
63-
is_capable(tc, hl_fun)
64-
65-
fn = mfilename("fullpath") + ".m";
66-
67-
tc.verifyGreaterThanOrEqual(hl_fun(fn), 1)
63+
try
64+
c = stdlib.hard_link_count(mfilename("fullpath") + ".m", hl_fun);
65+
tc.verifyGreaterThanOrEqual(c, 1)
66+
catch e
67+
tc.verifyEqual(e.identifier, 'stdlib:choose_method:NameError')
68+
end
6869
end
6970

7071

0 commit comments

Comments
 (0)