From 96be6f6566b19c242220f0f8571dc81ecadf6a79 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Mon, 4 Aug 2025 21:30:21 -0400 Subject: [PATCH] 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. --- lib/std/compress/flate/Decompress.zig | 5 +++-- src/Package/Fetch/git.zig | 12 +++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/std/compress/flate/Decompress.zig b/lib/std/compress/flate/Decompress.zig index 90f89ea6c9..da57d56ab8 100644 --- a/lib/std/compress/flate/Decompress.zig +++ b/lib/std/compress/flate/Decompress.zig @@ -373,7 +373,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader d.state = .{ .stored_block = @intCast(remaining_len - n) }; } w.advance(n); - return n; + return @intFromEnum(limit) - remaining + n; }, .fixed_block => { while (remaining > 0) { @@ -1265,6 +1265,7 @@ fn testDecompress(container: Container, compressed: []const u8, expected_plain: defer aw.deinit(); var decompress: Decompress = .init(&in, container, &.{}); - _ = try decompress.reader.streamRemaining(&aw.writer); + const decompressed_len = try decompress.reader.streamRemaining(&aw.writer); + try testing.expectEqual(expected_plain.len, decompressed_len); try testing.expectEqualSlices(u8, expected_plain, aw.getWritten()); } diff --git a/src/Package/Fetch/git.zig b/src/Package/Fetch/git.zig index 8f5bff2522..6ff951014b 100644 --- a/src/Package/Fetch/git.zig +++ b/src/Package/Fetch/git.zig @@ -1678,7 +1678,7 @@ test "SHA-256 packfile indexing and checkout" { /// Checks out a commit of a packfile. Intended for experimenting with and /// benchmarking possible optimizations to the indexing and checkout behavior. pub fn main() !void { - const allocator = std.heap.c_allocator; + const allocator = std.heap.smp_allocator; const args = try std.process.argsAlloc(allocator); defer std.process.argsFree(allocator, args); @@ -1703,12 +1703,14 @@ pub fn main() !void { std.debug.print("Starting index...\n", .{}); var index_file = try git_dir.createFile("idx", .{ .read = true }); defer index_file.close(); - var index_buffered_writer = std.io.bufferedWriter(index_file.deprecatedWriter()); - try indexPack(allocator, format, &pack_file_reader, index_buffered_writer.writer()); - try index_buffered_writer.flush(); + var index_file_buffer: [4096]u8 = undefined; + var index_file_writer = index_file.writer(&index_file_buffer); + try indexPack(allocator, format, &pack_file_reader, &index_file_writer); std.debug.print("Starting checkout...\n", .{}); - var repository = try Repository.init(allocator, format, &pack_file_reader, index_file); + var index_file_reader = index_file.reader(&index_file_buffer); + var repository: Repository = undefined; + try repository.init(allocator, format, &pack_file_reader, &index_file_reader); defer repository.deinit(); var diagnostics: Diagnostics = .{ .allocator = allocator }; defer diagnostics.deinit();