authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-22 17:07:03-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-22 17:07:03-07:00
log11a81bc659aa44caf084046e3e1048a4ca0957a6
tree3b6e89de8b33180b75e6fe26742ca4631aa650ab
parentec5cdb2fe394b6a8ca3d30b7652049f39c1aecdb

std.tar.Writer: delete ill-advised API

dependency on time is sus

1 files changed, 1 insertions(+), 36 deletions(-)

lib/std/tar/Writer.zig+1-36
...@@ -85,30 +85,6 @@ pub fn writeLink(w: *Writer, sub_path: []const u8, link_name: []const u8, option...@@ -85,30 +85,6 @@ pub fn writeLink(w: *Writer, sub_path: []const u8, link_name: []const u8, option
85 try w.writeHeader(.symbolic_link, sub_path, link_name, 0, options);85 try w.writeHeader(.symbolic_link, sub_path, link_name, 0, options);
86}86}
8787
88/// Writes fs.Dir.WalkerEntry. Uses `mtime` from file system entry and
89/// default for entry mode .
90pub fn writeEntry(w: *Writer, entry: std.fs.Dir.Walker.Entry) Error!void {
91 switch (entry.kind) {
92 .directory => {
93 try w.writeDir(entry.path, .{ .mtime = try entryMtime(entry) });
94 },
95 .file => {
96 var file = try entry.dir.openFile(entry.basename, .{});
97 defer file.close();
98 const stat = try file.stat();
99 try w.writeFile(entry.path, file, stat);
100 },
101 .sym_link => {
102 var link_name_buffer: [std.fs.max_path_bytes]u8 = undefined;
103 const link_name = try entry.dir.readLink(entry.basename, &link_name_buffer);
104 try w.writeLink(entry.path, link_name, .{ .mtime = try entryMtime(entry) });
105 },
106 else => {
107 return error.UnsupportedWalkerEntryKind;
108 },
109 }
110}
111
112fn writeHeader(88fn writeHeader(
113 w: *Writer,89 w: *Writer,
114 typeflag: Header.FileType,90 typeflag: Header.FileType,
...@@ -120,7 +96,7 @@ fn writeHeader(...@@ -120,7 +96,7 @@ fn writeHeader(
120 var header = Header.init(typeflag);96 var header = Header.init(typeflag);
121 try w.setPath(&header, sub_path);97 try w.setPath(&header, sub_path);
122 try header.setSize(size);98 try header.setSize(size);
123 try header.setMtime(if (options.mtime != 0) options.mtime else w.mtimeNow());99 try header.setMtime(options.mtime);
124 if (options.mode != 0)100 if (options.mode != 0)
125 try header.setMode(options.mode);101 try header.setMode(options.mode);
126 if (typeflag == .symbolic_link)102 if (typeflag == .symbolic_link)
...@@ -131,17 +107,6 @@ fn writeHeader(...@@ -131,17 +107,6 @@ fn writeHeader(
131 try header.write(w.underlying_writer);107 try header.write(w.underlying_writer);
132}108}
133109
134fn mtimeNow(w: *Writer) u64 {
135 if (w.mtime_now == 0)
136 w.mtime_now = @intCast(std.time.timestamp());
137 return w.mtime_now;
138}
139
140fn entryMtime(entry: std.fs.Dir.Walker.Entry) !u64 {
141 const stat = try entry.dir.statFile(entry.basename);
142 return @intCast(@divFloor(stat.mtime, std.time.ns_per_s));
143}
144
145/// Writes path in posix header, if don't fit (in name+prefix; 100+155110/// Writes path in posix header, if don't fit (in name+prefix; 100+155
146/// bytes) writes it in gnu extended header.111/// bytes) writes it in gnu extended header.
147fn setPath(w: *Writer, header: *Header, sub_path: []const u8) Error!void {112fn setPath(w: *Writer, header: *Header, sub_path: []const u8) Error!void {