diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-03-06 21:15:36 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-03-10 17:51:07 -0700 |
| commit | ffd53a459e1b665e5070987f68dd583171a12459 (patch) | |
| tree | 18691adb98010a6ac185428b740013d917a790ac /lib/compiler/std-docs.zig | |
| parent | 91260459e3c534b1583b516a2888f232d3d99581 (diff) | |
| download | zig-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.zig | 77 |
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}); - } -}; |
