mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 08:24:58 +00:00
LibCompress: Port GzipDecompressor to Core::Stream
This commit is contained in:
parent
4e7da96d58
commit
f93c7fbb5e
9 changed files with 80 additions and 145 deletions
|
@ -11,18 +11,17 @@
|
|||
#include <LibMain/Main.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static bool decompress_file(Buffered<Core::InputFileStream>& input_stream, Buffered<Core::OutputFileStream>& output_stream)
|
||||
static ErrorOr<void> decompress_file(NonnullOwnPtr<Core::Stream::File> input_stream, Buffered<Core::OutputFileStream>& output_stream)
|
||||
{
|
||||
auto gzip_stream = Compress::GzipDecompressor { input_stream };
|
||||
auto gzip_stream = Compress::GzipDecompressor { move(input_stream) };
|
||||
|
||||
u8 buffer[4096];
|
||||
|
||||
while (!gzip_stream.has_any_error() && !gzip_stream.unreliable_eof()) {
|
||||
auto const nread = gzip_stream.read({ buffer, sizeof(buffer) });
|
||||
output_stream.write_or_error({ buffer, nread });
|
||||
auto buffer = TRY(ByteBuffer::create_uninitialized(4096));
|
||||
while (!gzip_stream.is_eof()) {
|
||||
auto span = TRY(gzip_stream.read(buffer));
|
||||
output_stream.write_or_error(span);
|
||||
}
|
||||
|
||||
return !gzip_stream.handle_any_error();
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<int> serenity_main(Main::Arguments args)
|
||||
|
@ -52,20 +51,15 @@ ErrorOr<int> serenity_main(Main::Arguments args)
|
|||
output_filename = filename;
|
||||
}
|
||||
|
||||
auto input_stream_result = TRY(Core::InputFileStream::open_buffered(input_filename));
|
||||
auto input_stream_result = TRY(Core::Stream::File::open(input_filename, Core::Stream::OpenMode::Read));
|
||||
|
||||
auto success = false;
|
||||
if (write_to_stdout) {
|
||||
auto stdout = Core::OutputFileStream::stdout_buffered();
|
||||
success = decompress_file(input_stream_result, stdout);
|
||||
TRY(decompress_file(move(input_stream_result), stdout));
|
||||
} else {
|
||||
auto output_stream_result = TRY(Core::OutputFileStream::open_buffered(output_filename));
|
||||
|
||||
success = decompress_file(input_stream_result, output_stream_result);
|
||||
}
|
||||
if (!success) {
|
||||
warnln("Failed gzip decompressing input file");
|
||||
return 1;
|
||||
TRY(decompress_file(move(input_stream_result), output_stream_result));
|
||||
}
|
||||
|
||||
if (!keep_input_files)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue