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.
This commit is contained in:
Ian Johnson 2025-08-04 21:30:21 -04:00 committed by Andrew Kelley
parent 163e9ce7d9
commit 96be6f6566
2 changed files with 10 additions and 7 deletions

View file

@ -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());
}

View file

@ -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();