From dcbb3aa1f329ba0f12f8a039df62cd347b8f2559 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 9 Jul 2024 23:13:03 -0700 Subject: [PATCH] std.Build.Cache.Path: fix format function for absolute paths --- lib/std/Build/Cache/Path.zig | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/std/Build/Cache/Path.zig b/lib/std/Build/Cache/Path.zig index 89dba6b577..f6e469c254 100644 --- a/lib/std/Build/Cache/Path.zig +++ b/lib/std/Build/Cache/Path.zig @@ -58,6 +58,20 @@ pub fn openFile( return p.root_dir.handle.openFile(joined_path, flags); } +pub fn openDir( + p: Path, + sub_path: []const u8, + args: fs.Dir.OpenOptions, +) fs.Dir.OpenError!fs.Dir { + var buf: [fs.max_path_bytes]u8 = undefined; + const joined_path = if (p.sub_path.len == 0) sub_path else p: { + break :p std.fmt.bufPrint(&buf, "{s}" ++ fs.path.sep_str ++ "{s}", .{ + p.sub_path, sub_path, + }) catch return error.NameTooLong; + }; + return p.root_dir.handle.openDir(joined_path, args); +} + pub fn makeOpenPath(p: Path, sub_path: []const u8, opts: fs.Dir.OpenOptions) !fs.Dir { var buf: [fs.max_path_bytes]u8 = undefined; const joined_path = if (p.sub_path.len == 0) sub_path else p: { @@ -137,6 +151,10 @@ pub fn format( } if (fmt_string.len > 0) std.fmt.invalidFmtError(fmt_string, self); + if (std.fs.path.isAbsolute(self.sub_path)) { + try writer.writeAll(self.sub_path); + return; + } if (self.root_dir.path) |p| { try writer.writeAll(p); try writer.writeAll(fs.path.sep_str);