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:
parent
b0ba7a897f
commit
7e02cad476
2 changed files with 18 additions and 19 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue