authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-20 21:08:40-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-22 09:41:44-07:00
log91640f5f819de5bb6211d6bfa3c778737fa822aa
tree189b1181762d8aa32d0ba6ee42175295e9624ad4
parent6ae1bcd8bdf284b28bc708ab6bdafd4e0a5f7ac5

give the Reader API adapter a buffer

it needs one or else it always asserts

2 files changed, 8 insertions(+), 5 deletions(-)

lib/std/Io.zig+2-2
...@@ -314,11 +314,11 @@ pub fn GenericReader(...@@ -314,11 +314,11 @@ pub fn GenericReader(
314 }314 }
315315
316 /// Helper for bridging to the new `Reader` API while upgrading.316 /// Helper for bridging to the new `Reader` API while upgrading.
317 pub fn adaptToNewApi(self: *const Self) Adapter {317 pub fn adaptToNewApi(self: *const Self, buffer: []u8) Adapter {
318 return .{318 return .{
319 .derp_reader = self.*,319 .derp_reader = self.*,
320 .new_interface = .{320 .new_interface = .{
321 .buffer = &.{},321 .buffer = buffer,
322 .vtable = &.{ .stream = Adapter.stream },322 .vtable = &.{ .stream = Adapter.stream },
323 .seek = 0,323 .seek = 0,
324 .end = 0,324 .end = 0,
src/Package/Fetch.zig+6-3
...@@ -1205,7 +1205,8 @@ fn unpackResource(...@@ -1205,7 +1205,8 @@ fn unpackResource(
1205 const reader = resource.reader();1205 const reader = resource.reader();
1206 var br = std.io.bufferedReaderSize(std.crypto.tls.max_ciphertext_record_len, reader);1206 var br = std.io.bufferedReaderSize(std.crypto.tls.max_ciphertext_record_len, reader);
1207 var dcp = std.compress.gzip.decompressor(br.reader());1207 var dcp = std.compress.gzip.decompressor(br.reader());
1208 var adapter = dcp.reader().adaptToNewApi();1208 var adapter_buffer: [1024]u8 = undefined;
1209 var adapter = dcp.reader().adaptToNewApi(&adapter_buffer);
1209 return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface);1210 return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface);
1210 },1211 },
1211 .@"tar.xz" => {1212 .@"tar.xz" => {
...@@ -1219,7 +1220,8 @@ fn unpackResource(...@@ -1219,7 +1220,8 @@ fn unpackResource(
1219 ));1220 ));
1220 };1221 };
1221 defer dcp.deinit();1222 defer dcp.deinit();
1222 var adapter = dcp.reader().adaptToNewApi();1223 var adapter_buffer: [1024]u8 = undefined;
1224 var adapter = dcp.reader().adaptToNewApi(&adapter_buffer);
1223 return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface);1225 return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface);
1224 },1226 },
1225 .@"tar.zst" => {1227 .@"tar.zst" => {
...@@ -1230,7 +1232,8 @@ fn unpackResource(...@@ -1230,7 +1232,8 @@ fn unpackResource(
1230 var dcp = std.compress.zstd.decompressor(br.reader(), .{1232 var dcp = std.compress.zstd.decompressor(br.reader(), .{
1231 .window_buffer = window_buffer,1233 .window_buffer = window_buffer,
1232 });1234 });
1233 var adapter = dcp.reader().adaptToNewApi();1235 var adapter_buffer: [1024]u8 = undefined;
1236 var adapter = dcp.reader().adaptToNewApi(&adapter_buffer);
1234 return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface);1237 return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface);
1235 },1238 },
1236 .git_pack => return unpackGitPack(f, tmp_directory.handle, &resource.git) catch |err| switch (err) {1239 .git_pack => return unpackGitPack(f, tmp_directory.handle, &resource.git) catch |err| switch (err) {