aboutsummaryrefslogtreecommitdiff
path: root/lib/compiler/std-docs.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compiler/std-docs.zig')
-rw-r--r--lib/compiler/std-docs.zig45
1 files changed, 25 insertions, 20 deletions
diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig
index b5bc742717..74a9c65849 100644
--- a/lib/compiler/std-docs.zig
+++ b/lib/compiler/std-docs.zig
@@ -60,7 +60,9 @@ pub fn main() !void {
const should_open_browser = force_open_browser orelse (listen_port == 0);
const address = std.net.Address.parseIp("127.0.0.1", listen_port) catch unreachable;
- var http_server = try address.listen(.{});
+ var http_server = try address.listen(.{
+ .reuse_address = true,
+ });
const port = http_server.listen_address.in.getPort();
const url_with_newline = try std.fmt.allocPrint(arena, "http://127.0.0.1:{d}/\n", .{port});
std.fs.File.stdout().writeAll(url_with_newline) catch {};
@@ -189,7 +191,11 @@ 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());
+ var adapter_buffer: [500]u8 = undefined;
+ var response_writer = response.writer().adaptToNewApi();
+ response_writer.new_interface.buffer = &adapter_buffer;
+
+ var archiver: std.tar.Writer = .{ .underlying_writer = &response_writer.new_interface };
archiver.prefix = "std";
while (try walker.next()) |entry| {
@@ -204,7 +210,13 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
}
var file = try entry.dir.openFile(entry.basename, .{});
defer file.close();
- try archiver.writeFile(entry.path, file);
+ const stat = try file.stat();
+ var file_reader: std.fs.File.Reader = .{
+ .file = file,
+ .interface = std.fs.File.Reader.initInterface(&.{}),
+ .size = stat.size,
+ };
+ try archiver.writeFile(entry.path, &file_reader, stat.mtime);
}
{
@@ -217,6 +229,7 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
// intentionally omitting the pointless trailer
//try archiver.finish();
+ try response_writer.new_interface.flush();
try response.end();
}
@@ -307,21 +320,17 @@ fn buildWasmBinary(
try sendMessage(child.stdin.?, .update);
try sendMessage(child.stdin.?, .exit);
- const Header = std.zig.Server.Message.Header;
var result: ?Cache.Path = null;
var result_error_bundle = std.zig.ErrorBundle.empty;
- const stdout = poller.fifo(.stdout);
+ const stdout = poller.reader(.stdout);
poll: while (true) {
- while (stdout.readableLength() < @sizeOf(Header)) {
- if (!(try poller.poll())) break :poll;
- }
- const header = stdout.reader().readStruct(Header) catch unreachable;
- while (stdout.readableLength() < header.bytes_len) {
- if (!(try poller.poll())) break :poll;
- }
- const body = stdout.readableSliceOfLen(header.bytes_len);
+ const Header = std.zig.Server.Message.Header;
+ while (stdout.buffered().len < @sizeOf(Header)) if (!try poller.poll()) break :poll;
+ const header = stdout.takeStruct(Header, .little) catch unreachable;
+ while (stdout.buffered().len < header.bytes_len) if (!try poller.poll()) break :poll;
+ const body = stdout.take(header.bytes_len) catch unreachable;
switch (header.tag) {
.zig_version => {
@@ -361,15 +370,11 @@ fn buildWasmBinary(
},
else => {}, // ignore other messages
}
-
- stdout.discard(body.len);
}
- const stderr = poller.fifo(.stderr);
- if (stderr.readableLength() > 0) {
- const owned_stderr = try stderr.toOwnedSlice();
- defer gpa.free(owned_stderr);
- std.debug.print("{s}", .{owned_stderr});
+ const stderr = poller.reader(.stderr);
+ if (stderr.bufferedLen() > 0) {
+ std.debug.print("{s}", .{stderr.buffered()});
}
// Send EOF to stdin.