Function scolapasta_path::is_explicit_relative_bytes

source ·
pub fn is_explicit_relative_bytes<P: AsRef<[u8]>>(path: P) -> bool
Expand description

Return whether the given byte string to treat as a path starts with an explicit relative path.

Explicit relative paths start with . or .. followed immediately by a directory separator.

Some Ruby source loaders have special handling for explicit relative paths where explicit relative paths are resolved relative to the process’s current working directory rather than the load path.

§Usage

This function can be used instead of is_explicit_relative if callers already have a byte string, as they likely do when manipulating a Ruby String.

§Compatibility

Since this function operates on bytes, it is guaranteed to give a correct Boolean answer to whether a path is explicit relative on all platforms.

§Examples

assert!(is_explicit_relative_bytes(b"./test/loader"));
assert!(is_explicit_relative_bytes(b"../rake/test_task"));

assert!(!is_explicit_relative_bytes(b"json/pure"));
assert!(!is_explicit_relative_bytes(b"/artichoke/src/json/pure"));

§MRI C Declaration

This routine is derived from the reference implementation in MRI Ruby:

static int
is_explicit_relative(const char *path)
{
    if (*path++ != '.') return 0;
    if (*path == '.') path++;
    return isdirsep(*path);
}