diff --git a/Userland/Libraries/LibCompress/Zlib.cpp b/Userland/Libraries/LibCompress/Zlib.cpp index c731191e9b..fa822ee285 100644 --- a/Userland/Libraries/LibCompress/Zlib.cpp +++ b/Userland/Libraries/LibCompress/Zlib.cpp @@ -74,16 +74,18 @@ ErrorOr> ZlibCompressor::construct(Core::Stream::H // Zlib only defines Deflate as a compression method. auto compression_method = ZlibCompressionMethod::Deflate; - auto zlib_compressor = TRY(adopt_nonnull_own_or_enomem(new (nothrow) ZlibCompressor(move(stream), compression_level))); + // FIXME: Find a way to compress with Deflate's "Best" compression level. + auto compressor_stream = TRY(DeflateCompressor::construct(Core::Stream::Handle(*stream), static_cast(compression_level))); + + auto zlib_compressor = TRY(adopt_nonnull_own_or_enomem(new (nothrow) ZlibCompressor(move(stream), move(compressor_stream)))); TRY(zlib_compressor->write_header(compression_method, compression_level)); return zlib_compressor; } -ZlibCompressor::ZlibCompressor(Core::Stream::Handle stream, ZlibCompressionLevel compression_level) +ZlibCompressor::ZlibCompressor(Core::Stream::Handle stream, NonnullOwnPtr compressor_stream) : m_output_stream(move(stream)) - // FIXME: Find a way to compress with Deflate's "Best" compression level. - , m_compressor(DeflateCompressor::construct(Core::Stream::Handle(*m_output_stream), static_cast(compression_level)).release_value_but_fixme_should_propagate_errors()) + , m_compressor(move(compressor_stream)) { } diff --git a/Userland/Libraries/LibCompress/Zlib.h b/Userland/Libraries/LibCompress/Zlib.h index 9d88cd966d..f345cc58fb 100644 --- a/Userland/Libraries/LibCompress/Zlib.h +++ b/Userland/Libraries/LibCompress/Zlib.h @@ -76,7 +76,7 @@ public: static ErrorOr compress_all(ReadonlyBytes bytes, ZlibCompressionLevel = ZlibCompressionLevel::Default); private: - ZlibCompressor(Core::Stream::Handle, ZlibCompressionLevel); + ZlibCompressor(Core::Stream::Handle stream, NonnullOwnPtr compressor_stream); ErrorOr write_header(ZlibCompressionMethod, ZlibCompressionLevel); bool m_finished { false };