Skip to content

Commit 50eda9c

Browse files
committed
generalize function impl
1 parent 0ee7271 commit 50eda9c

File tree

14 files changed

+147
-67
lines changed

14 files changed

+147
-67
lines changed

+stdlib/cpu_load.m

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88

99
function L = cpu_load()
1010

11-
b = java.lang.management.ManagementFactory.getOperatingSystemMXBean();
11+
if stdlib.isoctave()
12+
b = javaMethod("getOperatingSystemMXBean", "java.lang.management.ManagementFactory");
13+
else
14+
b = java.lang.management.ManagementFactory.getOperatingSystemMXBean();
15+
end
1216

1317
if stdlib.java_api() < 14
1418
% https://docs.oracle.com/en/java/javase/21/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getSystemCpuLoad()
@@ -19,3 +23,6 @@
1923
end
2024

2125
end
26+
27+
%!assert(cpu_load()>=0)
28+
%!assert(cpu_load()<=1)

+stdlib/file_checksum.m

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,41 @@
1010
% Ref: https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#getInstance(java.lang.String)
1111

1212
function hash = file_checksum(file, method)
13-
arguments
14-
file (1,1) string {mustBeFile}
15-
method (1,1) string {mustBeNonzeroLengthText}
16-
end
13+
% arguments
14+
% file (1,1) string {mustBeFile}
15+
% method (1,1) string
16+
% end
1717

18-
if any(method == ["sha256", "SHA256"])
18+
if strcmp(method, "sha256") || strcmp(method, "SHA256")
1919
method = "SHA-256";
2020
end
2121

2222
file_chunk = 10e6; % arbitrary (bytes) didn't seem to be very sensitive for speed
2323

24-
inst = java.security.MessageDigest.getInstance(method);
24+
if stdlib.isoctave()
25+
inst = javaMethod("getInstance", "java.security.MessageDigest", method);
26+
else
27+
inst = java.security.MessageDigest.getInstance(method);
28+
end
2529

2630
fid = fopen(file, 'r');
27-
assert(fid > 0, "could not open " + file)
31+
assert(fid > 0, "could not open %s", file)
2832

2933
while ~feof(fid)
3034
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#update(byte)
31-
inst.update(fread(fid, file_chunk, '*uint8'))
35+
inst.update(fread(fid, file_chunk, '*uint8'));
3236
end
3337
fclose(fid);
3438

3539
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html#digest()
3640
hash = typecast(inst.digest, 'uint8');
3741

38-
hash = string(sprintf('%.2x', hash));
42+
hash = sprintf('%.2x', hash);
3943

44+
try %#ok<TRYNC>
45+
hash = string(hash);
4046
end
47+
48+
end
49+
50+
%!assert(!isempty(file_checksum('file_checksum.m', "sha256")))

+stdlib/filesystem_type.m

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,24 @@
33
% example outputs: ntfs, ext4, apfs, ...
44

55
function t = filesystem_type(p)
6-
arguments
7-
p (1,1) string
6+
% arguments
7+
% p (1,1) string
8+
% end
9+
10+
if stdlib.isoctave()
11+
op = javaObject("java.io.File", p).toPath();
12+
m = javaMethod("getFileStore", "java.nio.file.Files", op);
13+
else
14+
op = java.io.File(p).toPath();
15+
m = java.nio.file.Files.getFileStore(op);
816
end
917

10-
t = string(java.nio.file.Files.getFileStore(java.io.File(p).toPath()).type());
18+
t = m.type();
19+
20+
try %#ok<TRYNC>
21+
t = string(t);
22+
end
1123

1224
end
25+
26+
%!assert(!isempty(filesystem_type(pwd)))

+stdlib/get_owner.m

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
%% GET_OWNER owner of file or directory
22

3-
function owner = get_owner(p)
4-
arguments
5-
p (1,1) string
6-
end
3+
function n = get_owner(p)
4+
% arguments
5+
% p (1,1) string
6+
% end
77

88
% https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/nio/file/Files.html#getOwner(java.nio.file.Path,java.nio.file.LinkOption...)
99
% https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/nio/file/LinkOption.html
1010

11-
opt = java.nio.file.LinkOption.values;
12-
13-
owner = string(java.nio.file.Files.getOwner(java.io.File(p).toPath(), opt));
11+
if stdlib.isoctave()
12+
opt = javaMethod("values", "java.nio.file.LinkOption");
13+
op = javaObject("java.io.File", p).toPath();
14+
n = javaMethod("getOwner", "java.nio.file.Files", op, opt).toString();
15+
else
16+
opt = java.nio.file.LinkOption.values;
17+
n = string(java.nio.file.Files.getOwner(java.io.File(p).toPath(), opt));
18+
end
1419

1520
end
21+
22+
%!assert(!isempty(get_owner(pwd)))

+stdlib/get_permissions.m

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
% output is string like "rwxrwxr--"
44

55
function p = get_permissions(f)
6-
arguments
7-
f (1,1) string
8-
end
6+
% arguments
7+
% f (1,1) string
8+
% end
99

10-
p = string.empty;
10+
p = "";
1111

1212
% Get the permissions of a file or directory
1313
[status, v] = fileattrib(f);
@@ -17,32 +17,42 @@
1717

1818
% Extract the permission string
1919
p = "---------"; % Default permissions
20-
if v.UserRead
21-
p = replaceBetween(p, 1, 1, "r");
22-
end
23-
if v.UserWrite
24-
p = replaceBetween(p, 2, 2, "w");
25-
end
26-
if v.UserExecute
27-
p = replaceBetween(p, 3, 3, "x");
28-
end
29-
if ~isnan(v.GroupRead) && logical(v.GroupRead)
30-
p = replaceBetween(p, 4, 4, "r");
31-
end
32-
if ~isnan(v.GroupWrite) && logical(v.GroupWrite)
33-
p = replaceBetween(p, 5, 5, "w");
34-
end
35-
if ~isnan(v.GroupExecute) && logical(v.GroupExecute)
36-
p = replaceBetween(p, 6, 6, "x");
37-
end
38-
if ~isnan(v.OtherRead) && logical(v.OtherRead)
39-
p = replaceBetween(p, 7, 7, "r");
40-
end
41-
if ~isnan(v.OtherWrite) && logical(v.OtherWrite)
42-
p = replaceBetween(p, 8, 8, "w");
43-
end
44-
if ~isnan(v.OtherExecute) && logical(v.OtherExecute)
45-
p = replaceBetween(p, 9, 9, "x");
20+
21+
groupRead = ~isnan(v.GroupRead) && logical(v.GroupRead);
22+
groupWrite = ~isnan(v.GroupWrite) && logical(v.GroupWrite);
23+
groupExecute = ~isnan(v.GroupExecute) && logical(v.GroupExecute);
24+
otherRead = ~isnan(v.OtherRead) && logical(v.OtherRead);
25+
otherWrite = ~isnan(v.OtherWrite) && logical(v.OtherWrite);
26+
otherExecute = ~isnan(v.OtherExecute) && logical(v.OtherExecute);
27+
28+
try
29+
30+
if v.UserRead, p = replaceBetween(p, 1, 1, "r"); end
31+
if v.UserWrite, p = replaceBetween(p, 2, 2, "w"); end
32+
if v.UserExecute, p = replaceBetween(p, 3, 3, "x"); end
33+
if groupRead, p = replaceBetween(p, 4, 4, "r"); end
34+
if groupWrite, p = replaceBetween(p, 5, 5, "w"); end
35+
if groupExecute, p = replaceBetween(p, 6, 6, "x"); end
36+
if otherRead, p = replaceBetween(p, 7, 7, "r"); end
37+
if otherWrite, p = replaceBetween(p, 8, 8, "w"); end
38+
if otherExecute, p = replaceBetween(p, 9, 9, "x"); end
39+
40+
catch e
41+
if ~strcmp(e.identifier, "Octave:undefined-function")
42+
rethrow(e)
43+
end
44+
45+
if v.UserRead, p(1) = "r"; end
46+
if v.UserWrite, p(2) = "w"; end
47+
if v.UserExecute, p(3) = "x"; end
48+
if groupRead, p(4) = "r"; end
49+
if groupWrite, p(5) = "w"; end
50+
if groupExecute, p(6) = "x"; end
51+
if otherRead, p(7) = "r"; end
52+
if otherWrite, p(8) = "w"; end
53+
if otherExecute, p(9) = "x"; end
4654
end
4755

4856
end
57+
58+
%!assert(length(get_permissions('get_permissions.m')) == 9)

+stdlib/get_shell.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@
1111
end
1212

1313
end
14+
15+
%!assert(ischar(get_shell()))

+stdlib/hard_link_count.m

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,26 @@
44
% * 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...)
55
% * https://docs.oracle.com/javase/tutorial/essential/io/links.html
66

7-
function c = hard_link_count(filepath)
8-
arguments
9-
filepath (1,1) string
10-
end
7+
function c = hard_link_count(p)
8+
% arguments
9+
% p (1,1) string
10+
% end
1111

12-
if ispc || ~isfile(filepath)
12+
if ispc || ~isfile(p)
1313
c = [];
1414
return
1515
end
1616

17-
opt = java.nio.file.LinkOption.values;
18-
19-
c = java.nio.file.Files.getAttribute(java.io.File(filepath).toPath(), "unix:nlink", opt);
20-
%Files.getAttribute(filePath, "unix:nlink")
17+
if stdlib.isoctave()
18+
opt = javaMethod("values", "java.nio.file.LinkOption");
19+
op = javaObject("java.io.File", p).toPath();
20+
c = javaMethod("getAttribute", "java.nio.file.Files", op, "unix:nlink", opt);
21+
else
22+
opt = java.nio.file.LinkOption.values;
23+
op = java.io.File(p).toPath();
24+
c = java.nio.file.Files.getAttribute(op, "unix:nlink", opt);
25+
end
2126

2227
end
28+
29+
%!assert(hard_link_count('hard_link_count.m') >= 1)

+stdlib/iscygwin.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@
1212
end
1313

1414
end
15+
16+
%!assert(islogical(iscygwin()))

+stdlib/makedir.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ function makedir(d)
1919
assert(isfolder(d), "stdlib:makedir:mkdir", "Failed to create %s", d)
2020

2121
end
22+
23+
%!test
24+
%! d = tempname();
25+
%! makedir(d);

+stdlib/md5sum.m

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
%% MD5SUM compute MD5 hash of file
22

33
function hash = md5sum(file)
4-
arguments
5-
file (1,1) string {mustBeFile}
6-
end
4+
% arguments
5+
% file (1,1) string {mustBeFile}
6+
% end
77

88
hash = stdlib.file_checksum(file, "md5");
99

1010
end
11+
12+
%!assert(~isempty(md5sum('md5sum.m')))

0 commit comments

Comments
 (0)