aboutsummaryrefslogtreecommitdiff
path: root/lib/compiler/std-docs.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-03-06 21:15:36 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-03-10 17:51:07 -0700
commitffd53a459e1b665e5070987f68dd583171a12459 (patch)
tree18691adb98010a6ac185428b740013d917a790ac /lib/compiler/std-docs.zig
parent91260459e3c534b1583b516a2888f232d3d99581 (diff)
downloadzig-ffd53a459e1b665e5070987f68dd583171a12459.tar.gz
zig-ffd53a459e1b665e5070987f68dd583171a12459.zip
-femit-docs: creating sources.tar
It's always a good day when you get to use File.writeFileAll 😎
Diffstat (limited to 'lib/compiler/std-docs.zig')
-rw-r--r--lib/compiler/std-docs.zig77
1 files changed, 1 insertions, 76 deletions
diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig
index 532c698c84..93a04a28e5 100644
--- a/lib/compiler/std-docs.zig
+++ b/lib/compiler/std-docs.zig
@@ -167,9 +167,8 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
const remainder = stat.size % 512;
break :p if (remainder > 0) 512 - remainder else 0;
};
- comptime assert(@sizeOf(TarHeader) == 512);
- var file_header = TarHeader.init();
+ 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);
@@ -383,77 +382,3 @@ fn openBrowserTabThread(gpa: Allocator, url: []const u8) !void {
try child.spawn();
_ = try child.wait();
}
-
-/// Forked from https://github.com/mattnite/tar/blob/main/src/main.zig which is
-/// MIT licensed.
-pub const TarHeader = extern struct {
- name: [100]u8,
- mode: [7:0]u8,
- uid: [7:0]u8,
- gid: [7:0]u8,
- size: [11:0]u8,
- mtime: [11:0]u8,
- checksum: [7:0]u8,
- typeflag: FileType,
- linkname: [100]u8,
- magic: [5:0]u8,
- version: [2]u8,
- uname: [31:0]u8,
- gname: [31:0]u8,
- devmajor: [7:0]u8,
- devminor: [7:0]u8,
- prefix: [155]u8,
- pad: [12]u8,
-
- const FileType = enum(u8) {
- regular = '0',
- hard_link = '1',
- symbolic_link = '2',
- character = '3',
- block = '4',
- directory = '5',
- fifo = '6',
- reserved = '7',
- pax_global = 'g',
- extended = 'x',
- _,
- };
-
- fn init() TarHeader {
- var ret = std.mem.zeroes(TarHeader);
- ret.magic = [_:0]u8{ 'u', 's', 't', 'a', 'r' };
- ret.version = [_:0]u8{ '0', '0' };
- return ret;
- }
-
- fn setPath(self: *TarHeader, prefix: []const u8, path: []const u8) !void {
- if (prefix.len + 1 + path.len > 100) {
- var i: usize = 0;
- while (i < path.len and path.len - i > 100) {
- while (path[i] != '/') : (i += 1) {}
- }
-
- _ = try std.fmt.bufPrint(&self.prefix, "{s}/{s}", .{ prefix, path[0..i] });
- _ = try std.fmt.bufPrint(&self.name, "{s}", .{path[i + 1 ..]});
- } else {
- _ = try std.fmt.bufPrint(&self.name, "{s}/{s}", .{ prefix, path });
- }
- }
-
- fn setSize(self: *TarHeader, size: u64) !void {
- _ = try std.fmt.bufPrint(&self.size, "{o:0>11}", .{size});
- }
-
- fn updateChecksum(self: *TarHeader) !void {
- const offset = @offsetOf(TarHeader, "checksum");
- var checksum: usize = 0;
- for (std.mem.asBytes(self), 0..) |val, i| {
- checksum += if (i >= offset and i < offset + @sizeOf(@TypeOf(self.checksum)))
- ' '
- else
- val;
- }
-
- _ = try std.fmt.bufPrint(&self.checksum, "{o:0>7}", .{checksum});
- }
-};