1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 20:17:41 +00:00

LibCompress: Use OutputMemoryStream in decompress_all methods.

This commit is contained in:
asynts 2020-09-07 19:56:06 +02:00 committed by Andreas Kling
parent b0ba7a897f
commit 7e02cad476
2 changed files with 18 additions and 19 deletions

View file

@ -308,18 +308,18 @@ ByteBuffer DeflateDecompressor::decompress_all(ReadonlyBytes bytes)
InputMemoryStream memory_stream { bytes }; InputMemoryStream memory_stream { bytes };
InputBitStream bit_stream { memory_stream }; InputBitStream bit_stream { memory_stream };
DeflateDecompressor deflate_stream { bit_stream }; DeflateDecompressor deflate_stream { bit_stream };
OutputMemoryStream output_stream;
auto buffer = ByteBuffer::create_uninitialized(4096); u8 buffer[4096];
while (!deflate_stream.has_any_error() && !deflate_stream.eof()) {
size_t nread = 0; const auto nread = deflate_stream.read({ buffer, sizeof(buffer) });
while (!deflate_stream.eof()) { output_stream.write_or_error({ buffer, nread });
nread += deflate_stream.read(buffer.bytes().slice(nread));
if (buffer.size() - nread < 4096)
buffer.grow(buffer.size() + 4096);
} }
buffer.trim(nread); if (deflate_stream.handle_any_error())
return buffer; return {};
return output_stream.copy_into_contiguous_buffer();
} }
u32 DeflateDecompressor::decode_run_length(u32 symbol) u32 DeflateDecompressor::decode_run_length(u32 symbol)

View file

@ -162,19 +162,18 @@ ByteBuffer GzipDecompressor::decompress_all(ReadonlyBytes bytes)
{ {
InputMemoryStream memory_stream { bytes }; InputMemoryStream memory_stream { bytes };
GzipDecompressor gzip_stream { memory_stream }; GzipDecompressor gzip_stream { memory_stream };
OutputMemoryStream output_stream;
auto buffer = ByteBuffer::create_uninitialized(4096); u8 buffer[4096];
while (!gzip_stream.has_any_error() && !gzip_stream.eof()) {
size_t nread = 0; const auto nread = gzip_stream.read({ buffer, sizeof(buffer) });
while (!gzip_stream.eof()) { output_stream.write_or_error({ buffer, nread });
nread += gzip_stream.read(buffer.bytes().slice(nread));
if (buffer.size() - nread < 4096)
buffer.grow(buffer.size() + 4096);
} }
buffer.trim(nread); if (gzip_stream.handle_any_error())
return buffer; return {};
return output_stream.copy_into_contiguous_buffer();
} }
bool GzipDecompressor::eof() const bool GzipDecompressor::eof() const