Skip to content

Commit dffe14b

Browse files
committed
parent: handle corner case for Windows
1 parent 2214ac9 commit dffe14b

File tree

18 files changed

+143
-98
lines changed

18 files changed

+143
-98
lines changed

+stdlib/canonical.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,4 @@
6060
end
6161

6262
%!assert(canonical("", 0,0), "")
63-
%!assert(canonical("~",1,0), homedir(0))
63+
%!assert(canonical("~",1,0), homedir())

+stdlib/cpu_count.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
function N = cpu_count()
33

44
N = maxNumCompThreads;
5-
if N < 2 % happens on some HPC
5+
6+
if N < 2 && ~stdlib.isoctave() % happens on some HPC
67
N = feature('NumCores');
78
end
89

910
% logical CPUs
1011
% https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/Runtime.html#getRuntime()
1112
% N=java.lang.Runtime.getRuntime().availableProcessors();
1213
end
14+
15+
%!assert(cpu_count() > 0)

+stdlib/cpu_load.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@
55
% A value of 0.0 means that all CPUs were idle during the recent period of time observed, while a value of 1.0 means that all CPUs were actively running 100% of the time during the recent period being observed.
66
% All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system.
77
% If the system recent cpu usage is not available, the method returns a negative value.
8-
%
9-
% Ref: https://docs.oracle.com/en/java/javase/21/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getCpuLoad()
108

119
function L = cpu_load()
1210

1311
b = java.lang.management.ManagementFactory.getOperatingSystemMXBean();
1412

1513
if stdlib.java_api() < 14
14+
% https://docs.oracle.com/en/java/javase/21/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getSystemCpuLoad()
1615
L = b.getSystemCpuLoad();
1716
else
17+
% https://docs.oracle.com/en/java/javase/21/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getCpuLoad()
1818
L = b.getCpuLoad();
1919
end
2020

21-
% https://docs.oracle.com/en/java/javase/21/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getSystemCpuLoad()
22-
2321
end

+stdlib/create_symlink.m

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,15 @@
1515
link (1,1) string
1616
end
1717

18-
if ispc || isMATLABReleaseOlderThan("R2024b")
18+
if stdlib.isoctave()
19+
20+
[err, msg] = symlink(target, link);
21+
ok = err == 0;
22+
if ~ok
23+
warning("symlink: %s", msg)
24+
end
25+
26+
elseif ispc || isMATLABReleaseOlderThan("R2024b")
1927
% ok = java.nio.file.Files.createSymbolicLink(java.io.File(link).toPath(), java.io.File(target).toPath());
2028
% the above should work, but Matlab Java doesn't recognize the optional argument omitted.
2129

@@ -50,3 +58,8 @@
5058
end
5159

5260
end
61+
62+
%!test
63+
%! if !ispc
64+
%! create_symlink(tempname, tempname)
65+
%! endif

+stdlib/diskfree.m

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@
55
%
66
% Ref: https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/File.html#getUsableSpace()
77

8-
function freebytes = diskfree(d)
8+
function f = diskfree(d)
99
arguments
1010
d (1,1) string {mustBeFolder}
1111
end
1212

13-
freebytes = java.io.File(d).getUsableSpace;
13+
if stdlib.isoctave()
14+
o = javaObject("java.io.File", d);
15+
else
16+
o = java.io.File(d);
17+
end
18+
19+
f = o.getUsableSpace();
1420

1521
end
22+
23+
%!assert (diskfree('.') > 0)

+stdlib/drop_slash.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
end
1818

1919
if ~ispc || (L ~= 3 || ~strcmp(d, stdlib.root(s, false)))
20-
if stdlib.isoctave()
20+
if ischar(s)
2121
if d(end) == '/'
2222
d = d(1:end-1);
2323
end

+stdlib/exists.m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
end
1414

1515

16-
if use_java
16+
if stdlib.isoctave()
17+
ok = javaObject("java.io.File", p).exists();
18+
elseif use_java
1719

1820
% https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/Files.html#exists(java.nio.file.Path,java.nio.file.LinkOption...)
1921
% this takes 2x longer than java.io.File.exists()
@@ -27,5 +29,8 @@
2729
ok = isfile(p) || isfolder(p);
2830
end
2931

30-
3132
end
33+
34+
%!assert (!exists(''))
35+
%!assert (!exists(tempname))
36+
%!assert (exists(program_invocation_name))

+stdlib/expanduser.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050

5151

5252
%!assert(expanduser('',0), '')
53-
%!assert(expanduser("~",0), homedir(0))
54-
%!assert(expanduser("~/",0), homedir(0))
53+
%!assert(expanduser("~",0), homedir())
54+
%!assert(expanduser("~/",0), homedir())
5555
%!assert(expanduser("~user",0), "~user")
5656
%!assert(expanduser("~user/",0), "~user")
57-
%!assert(expanduser("~///c",0), strcat(homedir(0), "/c"))
57+
%!assert(expanduser("~///c",0), strcat(homedir(), "/c"))

+stdlib/file_size.m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
use_java (1,1) logical = false
77
end
88

9-
if use_java
9+
if stdlib.isoctave()
10+
s = javaObject("java.io.File", p).length();
11+
elseif use_java
1012
% several percent slower than native Matlab
1113
s = java.io.File(p).length;
1214
else
@@ -18,5 +20,8 @@
1820
end
1921
end
2022

21-
2223
end
24+
25+
26+
%!assert (file_size(''), 0)
27+
%!assert (file_size('file_size.m') > 0)

+stdlib/filename.m

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
% FILENAME file name of path
22
% filename (including suffix) without directory
33

4-
function p = filename(p)
4+
function f = filename(p)
55
arguments
66
p (1,1) string
77
end
@@ -11,6 +11,14 @@
1111
% this is like C++17 filesystem::path::filename
1212

1313
[~, n, e] = fileparts(p);
14-
p = n + e;
1514

15+
if ischar(n)
16+
f = strcat(n, e);
17+
else
18+
f = n + e;
1619
end
20+
21+
end
22+
23+
24+
%!assert (filename('a/b/c.txt'), 'c.txt')

0 commit comments

Comments
 (0)