|
1 | 1 | %% IS_ABSOLUTE is path absolute? |
2 | 2 | % |
3 | | -% Ref: https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/io/File.html#isAbsolute() |
| 3 | +%!assert(is_absolute('', false), false) |
| 4 | +%!test |
| 5 | +%! if ispc |
| 6 | +%! assert(is_absolute('C:\', false), true) |
| 7 | +%! assert(is_absolute('C:/', false), true) |
| 8 | +%! assert(is_absolute('C:', false), false) |
| 9 | +%! assert(is_absolute('C', false), false) |
| 10 | +%! else |
| 11 | +%! assert(is_absolute('/', false), true) |
| 12 | +%! assert(is_absolute('/usr', false), true) |
| 13 | +%! assert(is_absolute('usr', false), false) |
| 14 | +%! endif |
4 | 15 |
|
5 | 16 | function isabs = is_absolute(p, use_java) |
6 | 17 | arguments |
7 | | - p (1,1) string |
| 18 | + p (1,1) |
8 | 19 | use_java (1,1) logical = false |
9 | 20 | end |
10 | 21 |
|
11 | 22 | if use_java |
12 | 23 | % java is about 5x to 10x slower than intrinsic |
| 24 | + % https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/io/File.html#isAbsolute() |
13 | 25 | isabs = java.io.File(p).toPath().isAbsolute(); |
| 26 | +elseif ischar(p) |
| 27 | + L = length(p); |
| 28 | + if ispc |
| 29 | + isabs = L > 2 && ~isempty(stdlib.root_name(p)) && (p(3) == '\' || p(3) == '/'); |
| 30 | + else |
| 31 | + isabs = L >= 1 && p(1) == '/'; |
| 32 | + end |
14 | 33 | else |
15 | 34 | L = strlength(p); |
16 | 35 | if ispc |
17 | | - isabs = L >= 2 && isletter(extractBetween(p, 1, 1)) && extractBetween(p, 2, 2) == ":"; |
| 36 | + isabs = L > 2 && strlength(stdlib.root_name(p)) >= 2 && any(extractBetween(p, 3, 3) == ['/', '\']); |
18 | 37 | else |
19 | 38 | isabs = L >= 1 && startsWith(p, "/"); |
20 | 39 | end |
|
0 commit comments