formatJoin
Function parameters
Parameters
- paths:[]const []const u8
- w:*std.io.Writer
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
fn formatJoin(paths: []const []const u8, w: *std.io.Writer) std.io.Writer.Error!void {
const first_path_idx = for (paths, 0..) |p, idx| {
if (p.len != 0) break idx;
} else return;
try w.writeAll(paths[first_path_idx]); // first component
var prev_path = paths[first_path_idx];
for (paths[first_path_idx + 1 ..]) |this_path| {
if (this_path.len == 0) continue; // skip empty components
const prev_sep = isSep(prev_path[prev_path.len - 1]);
const this_sep = isSep(this_path[0]);
if (!prev_sep and !this_sep) {
try w.writeByte(sep);
}
if (prev_sep and this_sep) {
try w.writeAll(this_path[1..]); // skip redundant separator
} else {
try w.writeAll(this_path);
}
prev_path = this_path;
}
}