Index: remoting/base/compressor_zlib.cc |
diff --git a/remoting/base/compressor_zlib.cc b/remoting/base/compressor_zlib.cc |
index e08d2f90ab99219c6d0c251d1eb838aef8b9ddf4..ae5b388718fa6e7eb09abca9984382a8af3f73b5 100644 |
--- a/remoting/base/compressor_zlib.cc |
+++ b/remoting/base/compressor_zlib.cc |
@@ -35,39 +35,28 @@ CompressorZlib::~CompressorZlib() { |
deflateEnd(stream_.get()); |
} |
-void CompressorZlib::Write(const uint8* input_data, int input_size, |
- uint8* output_data, int output_size, |
- int* consumed, int* written) { |
+bool CompressorZlib::Process(const uint8* input_data, int input_size, |
+ uint8* output_data, int output_size, |
+ int* consumed, int* written) { |
+ DCHECK_GT(output_size, 0); |
+ |
// Setup I/O parameters. |
stream_->avail_in = input_size; |
stream_->next_in = (Bytef*)input_data; |
stream_->avail_out = output_size; |
stream_->next_out = (Bytef*)output_data; |
- int ret = deflate(stream_.get(), Z_NO_FLUSH); |
+ int ret = deflate(stream_.get(), input_size ? Z_NO_FLUSH : Z_FINISH); |
if (ret == Z_STREAM_ERROR) { |
NOTREACHED() << "zlib compression failed"; |
} |
*consumed = input_size - stream_->avail_in; |
*written = output_size - stream_->avail_out; |
-} |
- |
-bool CompressorZlib::Flush(uint8* output_data, int output_size, |
- int* written) { |
- // Setup I/O parameters. |
- stream_->avail_in = 0; |
- stream_->next_in = NULL; |
- stream_->avail_out = output_size; |
- stream_->next_out = (Bytef*)output_data; |
- int ret = deflate(stream_.get(), Z_FINISH); |
- if (ret == Z_STREAM_ERROR) { |
- NOTREACHED() << "zlib compression failed"; |
- } |
- |
- *written = output_size - stream_->avail_out; |
- return ret == Z_OK; |
+ // Return true when we get Z_BUF_ERROR, this way we can feed more data |
+ // to zlib. |
+ return ret == Z_OK || ret == Z_BUF_ERROR; |
} |
} // namespace remoting |