authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-09 23:13:03-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-12 00:14:08-07:00
logdcbb3aa1f329ba0f12f8a039df62cd347b8f2559
tree6a1c67705f15a5759f40cec9948d99a50b89fc76
parentd1c14f2f52ddec476eca6d605b985a27f4d4fe28

std.Build.Cache.Path: fix format function for absolute paths


1 files changed, 18 insertions(+), 0 deletions(-)

lib/std/Build/Cache/Path.zig+18
...@@ -58,6 +58,20 @@ pub fn openFile(...@@ -58,6 +58,20 @@ pub fn openFile(
58 return p.root_dir.handle.openFile(joined_path, flags);58 return p.root_dir.handle.openFile(joined_path, flags);
59}59}
6060
61pub fn openDir(
62 p: Path,
63 sub_path: []const u8,
64 args: fs.Dir.OpenOptions,
65) fs.Dir.OpenError!fs.Dir {
66 var buf: [fs.max_path_bytes]u8 = undefined;
67 const joined_path = if (p.sub_path.len == 0) sub_path else p: {
68 break :p std.fmt.bufPrint(&buf, "{s}" ++ fs.path.sep_str ++ "{s}", .{
69 p.sub_path, sub_path,
70 }) catch return error.NameTooLong;
71 };
72 return p.root_dir.handle.openDir(joined_path, args);
73}
74
61pub fn makeOpenPath(p: Path, sub_path: []const u8, opts: fs.Dir.OpenOptions) !fs.Dir {75pub fn makeOpenPath(p: Path, sub_path: []const u8, opts: fs.Dir.OpenOptions) !fs.Dir {
62 var buf: [fs.max_path_bytes]u8 = undefined;76 var buf: [fs.max_path_bytes]u8 = undefined;
63 const joined_path = if (p.sub_path.len == 0) sub_path else p: {77 const joined_path = if (p.sub_path.len == 0) sub_path else p: {
...@@ -137,6 +151,10 @@ pub fn format(...@@ -137,6 +151,10 @@ pub fn format(
137 }151 }
138 if (fmt_string.len > 0)152 if (fmt_string.len > 0)
139 std.fmt.invalidFmtError(fmt_string, self);153 std.fmt.invalidFmtError(fmt_string, self);
154 if (std.fs.path.isAbsolute(self.sub_path)) {
155 try writer.writeAll(self.sub_path);
156 return;
157 }
140 if (self.root_dir.path) |p| {158 if (self.root_dir.path) |p| {
141 try writer.writeAll(p);159 try writer.writeAll(p);
142 try writer.writeAll(fs.path.sep_str);160 try writer.writeAll(fs.path.sep_str);