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...@@ -373,7 +373,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
373 d.state = .{ .stored_block = @intCast(remaining_len - n) };373 d.state = .{ .stored_block = @intCast(remaining_len - n) };
374 }374 }
375 w.advance(n);375 w.advance(n);
376 return n;376 return @intFromEnum(limit) - remaining + n;
377 },377 },
378 .fixed_block => {378 .fixed_block => {
379 while (remaining > 0) {379 while (remaining > 0) {
...@@ -1265,6 +1265,7 @@ fn testDecompress(container: Container, compressed: []const u8, expected_plain:...@@ -1265,6 +1265,7 @@ fn testDecompress(container: Container, compressed: []const u8, expected_plain:
1265 defer aw.deinit();1265 defer aw.deinit();
12661266
1267 var decompress: Decompress = .init(&in, container, &.{});1267 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);
1269 try testing.expectEqualSlices(u8, expected_plain, aw.getWritten());1270 try testing.expectEqualSlices(u8, expected_plain, aw.getWritten());
1270}1271}
src/Package/Fetch/git.zig+7-5
...@@ -1678,7 +1678,7 @@ test "SHA-256 packfile indexing and checkout" {...@@ -1678,7 +1678,7 @@ test "SHA-256 packfile indexing and checkout" {
1678/// Checks out a commit of a packfile. Intended for experimenting with and1678/// Checks out a commit of a packfile. Intended for experimenting with and
1679/// benchmarking possible optimizations to the indexing and checkout behavior.1679/// benchmarking possible optimizations to the indexing and checkout behavior.
1680pub fn main() !void {1680pub fn main() !void {
1681 const allocator = std.heap.c_allocator;1681 const allocator = std.heap.smp_allocator;
16821682
1683 const args = try std.process.argsAlloc(allocator);1683 const args = try std.process.argsAlloc(allocator);
1684 defer std.process.argsFree(allocator, args);1684 defer std.process.argsFree(allocator, args);
...@@ -1703,12 +1703,14 @@ pub fn main() !void {...@@ -1703,12 +1703,14 @@ pub fn main() !void {
1703 std.debug.print("Starting index...\n", .{});1703 std.debug.print("Starting index...\n", .{});
1704 var index_file = try git_dir.createFile("idx", .{ .read = true });1704 var index_file = try git_dir.createFile("idx", .{ .read = true });
1705 defer index_file.close();1705 defer index_file.close();
1706 var index_buffered_writer = std.io.bufferedWriter(index_file.deprecatedWriter());1706 var index_file_buffer: [4096]u8 = undefined;
1707 try indexPack(allocator, format, &pack_file_reader, index_buffered_writer.writer());1707 var index_file_writer = index_file.writer(&index_file_buffer);
1708 try index_buffered_writer.flush();1708 try indexPack(allocator, format, &pack_file_reader, &index_file_writer);
17091709
1710 std.debug.print("Starting checkout...\n", .{});1710 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);
1712 defer repository.deinit();1714 defer repository.deinit();
1713 var diagnostics: Diagnostics = .{ .allocator = allocator };1715 var diagnostics: Diagnostics = .{ .allocator = allocator };
1714 defer diagnostics.deinit();1716 defer diagnostics.deinit();