authorgravatar for ian@ianjohnson.devIan Johnson <ian@ianjohnson.dev> 2025-08-04 21:30:21-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-04 19:32:14-07:00
log96be6f6566b19c242220f0f8571dc81ecadf6a79
treed57d103f15d6e99ec1b10a1a6a9c23ba797b4927
parent163e9ce7d9a1ff4e2cb6bbdac7fbdfdd0b751ade

std.compress.flate.Decompress: return correct size for unbuffered decompression

Closes #24686 As a bonus, this commit also makes the `git.zig` "testing `main`" compile again.

2 files changed, 10 insertions(+), 7 deletions(-)

lib/std/compress/flate/Decompress.zig+3-2
......@@ -373,7 +373,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
373373 d.state = .{ .stored_block = @intCast(remaining_len - n) };
374374 }
375375 w.advance(n);
376 return n;
376 return @intFromEnum(limit) - remaining + n;
377377 },
378378 .fixed_block => {
379379 while (remaining > 0) {
......@@ -1265,6 +1265,7 @@ fn testDecompress(container: Container, compressed: []const u8, expected_plain:
12651265 defer aw.deinit();
12661266
12671267 var decompress: Decompress = .init(&in, container, &.{});
1268 _ = try decompress.reader.streamRemaining(&aw.writer);
1268 const decompressed_len = try decompress.reader.streamRemaining(&aw.writer);
1269 try testing.expectEqual(expected_plain.len, decompressed_len);
12691270 try testing.expectEqualSlices(u8, expected_plain, aw.getWritten());
12701271}
src/Package/Fetch/git.zig+7-5
......@@ -1678,7 +1678,7 @@ test "SHA-256 packfile indexing and checkout" {
16781678/// Checks out a commit of a packfile. Intended for experimenting with and
16791679/// benchmarking possible optimizations to the indexing and checkout behavior.
16801680pub fn main() !void {
1681 const allocator = std.heap.c_allocator;
1681 const allocator = std.heap.smp_allocator;
16821682
16831683 const args = try std.process.argsAlloc(allocator);
16841684 defer std.process.argsFree(allocator, args);
......@@ -1703,12 +1703,14 @@ pub fn main() !void {
17031703 std.debug.print("Starting index...\n", .{});
17041704 var index_file = try git_dir.createFile("idx", .{ .read = true });
17051705 defer index_file.close();
1706 var index_buffered_writer = std.io.bufferedWriter(index_file.deprecatedWriter());
1707 try indexPack(allocator, format, &pack_file_reader, index_buffered_writer.writer());
1708 try index_buffered_writer.flush();
1706 var index_file_buffer: [4096]u8 = undefined;
1707 var index_file_writer = index_file.writer(&index_file_buffer);
1708 try indexPack(allocator, format, &pack_file_reader, &index_file_writer);
17091709
17101710 std.debug.print("Starting checkout...\n", .{});
1711 var repository = try Repository.init(allocator, format, &pack_file_reader, index_file);
1711 var index_file_reader = index_file.reader(&index_file_buffer);
1712 var repository: Repository = undefined;
1713 try repository.init(allocator, format, &pack_file_reader, &index_file_reader);
17121714 defer repository.deinit();
17131715 var diagnostics: Diagnostics = .{ .allocator = allocator };
17141716 defer diagnostics.deinit();