| ... | @@ -164,50 +164,6 @@ pub const EndRecord = extern struct { | ... | @@ -164,50 +164,6 @@ pub const EndRecord = extern struct { |
| 164 | } | 164 | } |
| 165 | }; | 165 | }; |
| 166 | | 166 | |
| 167 | pub const Decompress = struct { | | |
| 168 | interface: Reader, | | |
| 169 | state: union { | | |
| 170 | inflate: flate.Decompress, | | |
| 171 | store: *Reader, | | |
| 172 | }, | | |
| 173 | | | |
| 174 | pub fn init(reader: *Reader, method: CompressionMethod, buffer: []u8) Reader { | | |
| 175 | return switch (method) { | | |
| 176 | .store => .{ | | |
| 177 | .state = .{ .store = reader }, | | |
| 178 | .interface = .{ | | |
| 179 | .context = undefined, | | |
| 180 | .vtable = &.{ .stream = streamStore }, | | |
| 181 | .buffer = buffer, | | |
| 182 | .end = 0, | | |
| 183 | .seek = 0, | | |
| 184 | }, | | |
| 185 | }, | | |
| 186 | .deflate => .{ | | |
| 187 | .state = .{ .inflate = .init(reader, .raw) }, | | |
| 188 | .interface = .{ | | |
| 189 | .context = undefined, | | |
| 190 | .vtable = &.{ .stream = streamDeflate }, | | |
| 191 | .buffer = buffer, | | |
| 192 | .end = 0, | | |
| 193 | .seek = 0, | | |
| 194 | }, | | |
| 195 | }, | | |
| 196 | else => unreachable, | | |
| 197 | }; | | |
| 198 | } | | |
| 199 | | | |
| 200 | fn streamStore(r: *Reader, w: *Writer, limit: std.Io.Limit) Reader.StreamError!usize { | | |
| 201 | const d: *Decompress = @fieldParentPtr("interface", r); | | |
| 202 | return d.store.read(w, limit); | | |
| 203 | } | | |
| 204 | | | |
| 205 | fn streamDeflate(r: *Reader, w: *Writer, limit: std.Io.Limit) Reader.StreamError!usize { | | |
| 206 | const d: *Decompress = @fieldParentPtr("interface", r); | | |
| 207 | return flate.Decompress.read(&d.inflate, w, limit); | | |
| 208 | } | | |
| 209 | }; | | |
| 210 | | | |
| 211 | fn isBadFilename(filename: []const u8) bool { | 167 | fn isBadFilename(filename: []const u8) bool { |
| 212 | if (filename.len == 0 or filename[0] == '/') | 168 | if (filename.len == 0 or filename[0] == '/') |
| 213 | return true; | 169 | return true; |