Skip to content

Commit 3441180

Browse files
committed
wider compatibility and speed
1 parent 92f8f96 commit 3441180

File tree

6 files changed

+47
-31
lines changed

6 files changed

+47
-31
lines changed

+stdlib/expanduser.m

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,26 @@
1111

1212
function e = expanduser(file)
1313

14-
pat = ['~[/\', filesep, ']+|^~$'];
14+
e = char(file);
1515

16-
[i0, i1] = regexp(file, pat, 'once');
16+
pat = ['~[/', filesep, ']+|^~$'];
1717

18-
if isempty(i0)
19-
% no leading ~ or it's ~user, which we don't handle
20-
e = file;
21-
return
22-
end
18+
[i0, i1] = regexp(e, pat, 'once');
19+
20+
if ~isempty(i0)
2321

24-
home = stdlib.homedir();
22+
home = stdlib.homedir();
2523

26-
if i1 - i0 == 0 || strlength(file) == i1
27-
e = home;
28-
if isstring(file)
29-
e = string(e);
24+
if i1 - i0 == 0 || length(e) == i1
25+
e = home;
26+
else
27+
e = [home, '/', e(i1+1:end)];
3028
end
31-
else
32-
e = stdlib.append(home, '/', extractAfter(file, i1));
29+
30+
end
31+
32+
if isstring(file)
33+
e = string(e);
3334
end
3435

3536
end

+stdlib/get_modtime.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
function t = get_modtime(file)
99

10-
t = datetime.empty;
11-
1210
% char() for Matlab < R2018a
1311
finf = dir(char(file));
1412

@@ -18,7 +16,13 @@
1816
finf = finf(i);
1917
end
2018

21-
if ~isempty(finf)
19+
if isempty(finf)
20+
t = datetime.empty;
21+
else
22+
t = finf.datenum;
23+
end
24+
25+
try %#ok<TRYNC>
2226
t = datetime(finf.datenum, 'ConvertFrom', 'datenum');
2327
end
2428

+stdlib/is_rosetta.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
if ismac()
1313
[s, raw] = system('sysctl -n sysctl.proc_translated');
14-
r = s == 0 && startsWith(raw, '1');
14+
r = s == 0 && raw(1) == '1';
1515
else
1616
r = false;
1717
end

+stdlib/root_dir.m

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@
1010

1111
function r = root_dir(p)
1212

13-
if startsWith(p, ["/", filesep])
14-
r = extractBefore(p, 2);
13+
c = char(p);
14+
r = '';
15+
16+
if isempty(c)
17+
% pass
18+
elseif ismember(c(1), ["/", filesep])
19+
r = c(1);
1520
elseif ispc()
16-
m = regexp(p, '^[A-Za-z]:([\\/])', 'tokens', 'once');
17-
if isempty(m)
18-
r = extractBefore(p, 1);
19-
else
21+
m = regexp(c, '^[A-Za-z]:([\\/])', 'tokens', 'once');
22+
if ~isempty(m)
2023
r = m{1};
2124
end
22-
else
23-
r = extractBefore(p, 1);
25+
end
26+
27+
if isstring(p)
28+
r = string(r);
2429
end
2530

2631
end

+stdlib/root_name.m

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@
77

88
function r = root_name(p)
99

10-
if ispc() && ~isempty(regexp(p, '^[A-Za-z]:', 'once'))
11-
r = extractBefore(p, 3);
10+
c = char(p);
11+
12+
if ispc() && ~isempty(regexp(c, '^[A-Za-z]:', 'once'))
13+
r = c(1:2);
1214
else
13-
r = extractBefore(p, 1);
15+
r = '';
16+
end
17+
18+
if isstring(p)
19+
r = string(r);
1420
end
1521

1622
end

test/TestSymlink.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
function setup_symlink(tc)
2121
tc.applyFixture(matlab.unittest.fixtures.WorkingFolderFixture());
2222

23-
tc.link = [pwd(), '/my.lnk'];
23+
tc.link = fullfile(pwd(), 'my.lnk');
2424

25-
tc.target = [pwd(), '/my_target.txt'];
25+
tc.target = fullfile(pwd(), 'my_target.txt');
2626
tc.assertTrue(stdlib.touch(tc.target), "failed to create test target " + tc.target)
2727

2828
tc.assertTrue(stdlib.create_symlink(tc.target, tc.link), ...

0 commit comments

Comments
 (0)