windowsParsePath
Function parameters
Parameters
- path:[]const u8
Type definitions in this namespace
Types
Returns if the given byte is a valid path separator
Functions
- isSep
- Returns if the given byte is a valid path separator
- join
- Naively combines a series of paths with the native path separator.
- joinZ
- Naively combines a series of paths with the native path separator and null terminator.
- resolve
- On Windows, this calls `resolveWindows` and on POSIX it calls `resolvePosix`.
- resolveWindows
- This function is like a series of `cd` statements executed one after another.
- resolvePosix
- This function is like a series of `cd` statements executed one after another.
- dirname
- Strip the last component from a file path.
- relative
- Returns the relative path from `from` to `to`.
- extension
- Searches for a file extension separated by a `.` and returns the string after that `.`.
- stem
- Returns the last component of this path without its extension (if any):
- ComponentIterator
- A path component iterator that can move forwards and backwards.
- fmtAsUtf8Lossy
- Format a path encoded as bytes for display as UTF-8.
- fmtWtf16LeAsUtf8Lossy
- Format a path encoded as WTF-16 LE for display as UTF-8.
= '\\'
Values
- sep_windows
- = '\\'
- sep_posix
- = '/'
- sep
- = switch (native_os) { .windows, .uefi => sep_windows, else => sep_posix, }
- sep_str_windows
- = "\\"
- sep_str_posix
- = "/"
- sep_str
- = switch (native_os) { .windows, .uefi => sep_str_windows, else => sep_str_posix, }
- delimiter_windows
- = ';'
- delimiter_posix
- = ':'
- delimiter
- = if (native_os == .windows) delimiter_windows else delimiter_posix
Source
Implementation
pub fn windowsParsePath(path: []const u8) WindowsPath {
if (path.len >= 2 and path[1] == ':') {
return WindowsPath{
.is_abs = isAbsoluteWindows(path),
.kind = WindowsPath.Kind.Drive,
.disk_designator = path[0..2],
};
}
if (path.len >= 1 and (path[0] == '/' or path[0] == '\\') and
(path.len == 1 or (path[1] != '/' and path[1] != '\\')))
{
return WindowsPath{
.is_abs = true,
.kind = WindowsPath.Kind.None,
.disk_designator = path[0..0],
};
}
const relative_path = WindowsPath{
.kind = WindowsPath.Kind.None,
.disk_designator = &[_]u8{},
.is_abs = false,
};
if (path.len < "//a/b".len) {
return relative_path;
}
inline for ("/\\") |this_sep| {
const two_sep = [_]u8{ this_sep, this_sep };
if (mem.startsWith(u8, path, &two_sep)) {
if (path[2] == this_sep) {
return relative_path;
}
var it = mem.tokenizeScalar(u8, path, this_sep);
_ = (it.next() orelse return relative_path);
_ = (it.next() orelse return relative_path);
return WindowsPath{
.is_abs = isAbsoluteWindows(path),
.kind = WindowsPath.Kind.NetworkShare,
.disk_designator = path[0..it.index],
};
}
}
return relative_path;
}