@@ -60,7 +60,7 @@ pub fn init(input: *Reader, container: Container, buffer: []u8) Decompress {
60
60
.stream = stream ,
61
61
.rebase = rebase ,
62
62
.discard = discard ,
63
- .readVec = Reader . indirectReadVec ,
63
+ .readVec = readVec ,
64
64
},
65
65
.buffer = buffer ,
66
66
.seek = 0 ,
@@ -109,6 +109,22 @@ fn discard(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
109
109
return n ;
110
110
}
111
111
112
+ fn readVec (r : * Reader , data : []const []u8 ) Reader.Error ! usize {
113
+ _ = data ;
114
+ assert (r .seek == r .end );
115
+ r .rebase (flate .history_len ) catch unreachable ;
116
+ var writer : Writer = .{
117
+ .buffer = r .buffer ,
118
+ .end = r .end ,
119
+ .vtable = &.{ .drain = Writer .fixedDrain },
120
+ };
121
+ r .end += r .vtable .stream (r , & writer , .limited (writer .buffer .len - writer .end )) catch | err | switch (err ) {
122
+ error .WriteFailed = > unreachable ,
123
+ else = > | e | return e ,
124
+ };
125
+ return 0 ;
126
+ }
127
+
112
128
fn decodeLength (self : * Decompress , code : u8 ) ! u16 {
113
129
if (code > 28 ) return error .InvalidCode ;
114
130
const ml = Token .matchLength (code );
@@ -1073,8 +1089,8 @@ test "reading into empty buffer" {
1073
1089
var in : Reader = .fixed (input );
1074
1090
var decomp : Decompress = .init (& in , .raw , &.{});
1075
1091
const r = & decomp .reader ;
1076
- var buf : [0 ] u8 = undefined ;
1077
- try testing .expectEqual (0 , try r .readVec (&.{ & buf } ));
1092
+ var bufs : [1 ][] u8 = .{&.{}} ;
1093
+ try testing .expectEqual (0 , try r .readVec (& bufs ));
1078
1094
}
1079
1095
1080
1096
test "zlib header" {
@@ -1135,7 +1151,8 @@ test "zlib should not overshoot" {
1135
1151
1136
1152
var reader : std.Io.Reader = .fixed (& data );
1137
1153
1138
- var decompress : Decompress = .init (& reader , .zlib , &.{});
1154
+ var decompress_buffer : [flate .max_window_len ]u8 = undefined ;
1155
+ var decompress : Decompress = .init (& reader , .zlib , & decompress_buffer );
1139
1156
var out : [128 ]u8 = undefined ;
1140
1157
1141
1158
{
0 commit comments