|
1 | 1 | %% IS_ABSOLUTE is path absolute? |
2 | | -% |
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 |
| 2 | +% on Windows, absolute paths must be at least 3 character long, starting with a root name followed by a slash |
| 3 | +% on non-Windows, absolute paths must start with a slash |
| 4 | + |
15 | 5 |
|
16 | 6 | function isabs = is_absolute(p, use_java) |
17 | 7 | arguments |
|
33 | 23 | else |
34 | 24 | L = strlength(p); |
35 | 25 | if ispc |
36 | | - isabs = L > 2 && strlength(stdlib.root_name(p)) && any(extractBetween(p, 3, 3) == ["/", "\"]); |
| 26 | + s = extractBetween(p, 3, 3); |
| 27 | + isabs = L > 2 && strlength(stdlib.root_name(p)) && (s == '/' || s == '\'); |
37 | 28 | else |
38 | 29 | isabs = L >= 1 && startsWith(p, "/"); |
39 | 30 | end |
40 | 31 | end |
41 | 32 |
|
42 | 33 | end |
| 34 | + |
| 35 | +%!assert(is_absolute('', false), false) |
| 36 | +%!test |
| 37 | +%! if ispc |
| 38 | +%! assert(is_absolute('C:\', false), true) |
| 39 | +%! assert(is_absolute('C:/', false), true) |
| 40 | +%! assert(is_absolute('C:', false), false) |
| 41 | +%! assert(is_absolute('C', false), false) |
| 42 | +%! else |
| 43 | +%! assert(is_absolute('/', false), true) |
| 44 | +%! assert(is_absolute('/usr', false), true) |
| 45 | +%! assert(is_absolute('usr', false), false) |
| 46 | +%! endif |
0 commit comments