aboutsummaryrefslogtreecommitdiff
path: root/lib/compiler/std-docs.zig
diff options
context:
space:
mode:
authorIgor Anić <igor.anic@gmail.com>2024-08-16 07:05:53 +0200
committerGitHub <noreply@github.com>2024-08-15 22:05:53 -0700
commit72bcc3b7a52a8ce7a582ed205325f761da72a6a5 (patch)
treec28796fb8db1093c10f3b27ca8b0980c6103308b /lib/compiler/std-docs.zig
parent708414aaf4d88157153cf413137d2cb3c106c3b4 (diff)
downloadzig-72bcc3b7a52a8ce7a582ed205325f761da72a6a5.tar.gz
zig-72bcc3b7a52a8ce7a582ed205325f761da72a6a5.zip
std.tar: add writer (#19603)
Simplifies code in docs creation where we used `std.tar.output.Header`. Writer uses that Header internally and provides higher level interface. Updates checksum on write, handles long file names, allows setting mtime and file permission mode. Provides handy interface for passing `Dir.WalkerEntry`.
Diffstat (limited to 'lib/compiler/std-docs.zig')
-rw-r--r--lib/compiler/std-docs.zig40
1 files changed, 8 insertions, 32 deletions
diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig
index c11665101c..4cfdf9b1e3 100644
--- a/lib/compiler/std-docs.zig
+++ b/lib/compiler/std-docs.zig
@@ -181,7 +181,6 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
},
},
});
- const w = response.writer();
var std_dir = try context.lib_dir.openDir("std", .{ .iterate = true });
defer std_dir.close();
@@ -189,6 +188,9 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
var walker = try std_dir.walk(gpa);
defer walker.deinit();
+ var archiver = std.tar.writer(response.writer());
+ archiver.prefix = "std";
+
while (try walker.next()) |entry| {
switch (entry.kind) {
.file => {
@@ -199,47 +201,21 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
},
else => continue,
}
-
- var file = try std_dir.openFile(entry.path, .{});
+ var file = try entry.dir.openFile(entry.basename, .{});
defer file.close();
-
- const stat = try file.stat();
- const padding = p: {
- const remainder = stat.size % 512;
- break :p if (remainder > 0) 512 - remainder else 0;
- };
-
- var file_header = std.tar.output.Header.init();
- file_header.typeflag = .regular;
- try file_header.setPath("std", entry.path);
- try file_header.setSize(stat.size);
- try file_header.updateChecksum();
- try w.writeAll(std.mem.asBytes(&file_header));
- try w.writeFile(file);
- try w.writeByteNTimes(0, padding);
+ try archiver.writeFile(entry.path, file);
}
{
// Since this command is JIT compiled, the builtin module available in
// this source file corresponds to the user's host system.
const builtin_zig = @embedFile("builtin");
-
- var file_header = std.tar.output.Header.init();
- file_header.typeflag = .regular;
- try file_header.setPath("builtin", "builtin.zig");
- try file_header.setSize(builtin_zig.len);
- try file_header.updateChecksum();
- try w.writeAll(std.mem.asBytes(&file_header));
- try w.writeAll(builtin_zig);
- const padding = p: {
- const remainder = builtin_zig.len % 512;
- break :p if (remainder > 0) 512 - remainder else 0;
- };
- try w.writeByteNTimes(0, padding);
+ archiver.prefix = "builtin";
+ try archiver.writeFileBytes("builtin.zig", builtin_zig, .{});
}
// intentionally omitting the pointless trailer
- //try w.writeByteNTimes(0, 512 * 2);
+ //try archiver.finish();
try response.end();
}