Function dirnameWindows [src]

Prototype

pub fn dirnameWindows(path: []const u8) ?[]const u8

Parameters

path: []const u8

Example

test dirnameWindows { try testDirnameWindows("c:\\", null); try testDirnameWindows("c:\\foo", "c:\\"); try testDirnameWindows("c:\\foo\\", "c:\\"); try testDirnameWindows("c:\\foo\\bar", "c:\\foo"); try testDirnameWindows("c:\\foo\\bar\\", "c:\\foo"); try testDirnameWindows("c:\\foo\\bar\\baz", "c:\\foo\\bar"); try testDirnameWindows("\\", null); try testDirnameWindows("\\foo", "\\"); try testDirnameWindows("\\foo\\", "\\"); try testDirnameWindows("\\foo\\bar", "\\foo"); try testDirnameWindows("\\foo\\bar\\", "\\foo"); try testDirnameWindows("\\foo\\bar\\baz", "\\foo\\bar"); try testDirnameWindows("c:", null); try testDirnameWindows("c:foo", null); try testDirnameWindows("c:foo\\", null); try testDirnameWindows("c:foo\\bar", "c:foo"); try testDirnameWindows("c:foo\\bar\\", "c:foo"); try testDirnameWindows("c:foo\\bar\\baz", "c:foo\\bar"); try testDirnameWindows("file:stream", null); try testDirnameWindows("dir\\file:stream", "dir"); try testDirnameWindows("\\\\unc\\share", null); try testDirnameWindows("\\\\unc\\share\\foo", "\\\\unc\\share\\"); try testDirnameWindows("\\\\unc\\share\\foo\\", "\\\\unc\\share\\"); try testDirnameWindows("\\\\unc\\share\\foo\\bar", "\\\\unc\\share\\foo"); try testDirnameWindows("\\\\unc\\share\\foo\\bar\\", "\\\\unc\\share\\foo"); try testDirnameWindows("\\\\unc\\share\\foo\\bar\\baz", "\\\\unc\\share\\foo\\bar"); try testDirnameWindows("/a/b/", "/a"); try testDirnameWindows("/a/b", "/a"); try testDirnameWindows("/a", "/"); try testDirnameWindows("", null); try testDirnameWindows("/", null); try testDirnameWindows("////", null); try testDirnameWindows("foo", null); }

Source

pub fn dirnameWindows(path: []const u8) ?[]const u8 { if (path.len == 0) return null; const root_slice = diskDesignatorWindows(path); if (path.len == root_slice.len) return null; const have_root_slash = path.len > root_slice.len and (path[root_slice.len] == '/' or path[root_slice.len] == '\\'); var end_index: usize = path.len - 1; while (path[end_index] == '/' or path[end_index] == '\\') { if (end_index == 0) return null; end_index -= 1; } while (path[end_index] != '/' and path[end_index] != '\\') { if (end_index == 0) return null; end_index -= 1; } if (have_root_slash and end_index == root_slice.len) { end_index += 1; } if (end_index == 0) return null; return path[0..end_index]; }