| ... | ... | @@ -60,7 +60,9 @@ pub fn main() !void { |
| 60 | 60 | const should_open_browser = force_open_browser orelse (listen_port == 0); |
| 61 | 61 | |
| 62 | 62 | const address = std.net.Address.parseIp("127.0.0.1", listen_port) catch unreachable; |
| 63 | | var http_server = try address.listen(.{}); |
| 63 | var http_server = try address.listen(.{ |
| 64 | .reuse_address = true, |
| 65 | }); |
| 64 | 66 | const port = http_server.listen_address.in.getPort(); |
| 65 | 67 | const url_with_newline = try std.fmt.allocPrint(arena, "http://127.0.0.1:{d}/\n", .{port}); |
| 66 | 68 | std.fs.File.stdout().writeAll(url_with_newline) catch {}; |
| ... | ... | @@ -189,7 +191,11 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void { |
| 189 | 191 | var walker = try std_dir.walk(gpa); |
| 190 | 192 | defer walker.deinit(); |
| 191 | 193 | |
| 192 | | var archiver = std.tar.writer(response.writer()); |
| 194 | var adapter_buffer: [500]u8 = undefined; |
| 195 | var response_writer = response.writer().adaptToNewApi(); |
| 196 | response_writer.new_interface.buffer = &adapter_buffer; |
| 197 | |
| 198 | var archiver: std.tar.Writer = .{ .underlying_writer = &response_writer.new_interface }; |
| 193 | 199 | archiver.prefix = "std"; |
| 194 | 200 | |
| 195 | 201 | while (try walker.next()) |entry| { |
| ... | ... | @@ -204,7 +210,13 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void { |
| 204 | 210 | } |
| 205 | 211 | var file = try entry.dir.openFile(entry.basename, .{}); |
| 206 | 212 | defer file.close(); |
| 207 | | try archiver.writeFile(entry.path, file); |
| 213 | const stat = try file.stat(); |
| 214 | var file_reader: std.fs.File.Reader = .{ |
| 215 | .file = file, |
| 216 | .interface = std.fs.File.Reader.initInterface(&.{}), |
| 217 | .size = stat.size, |
| 218 | }; |
| 219 | try archiver.writeFile(entry.path, &file_reader, stat.mtime); |
| 208 | 220 | } |
| 209 | 221 | |
| 210 | 222 | { |