@@ -227,10 +227,12 @@ template<typename INFO>
227227class Compressor
228228{
229229 public:
230- Compressor (size_t initial_size=1024 *1024 ) :
230+ explicit Compressor (size_t initial_size=1024 *1024 ) :
231231 ret_data(new char [initial_size]),
232232 ret_size(initial_size)
233- {}
233+ {
234+ ASSERT (initial_size, >, 0u );
235+ }
234236
235237 ~Compressor () = default ;
236238
@@ -244,32 +246,25 @@ class Compressor
244246 stream.next_in = (unsigned char *)data;
245247 stream.avail_in = size;
246248 while (true ) {
249+ if (stream.avail_out == 0 ) {
250+ ret_size *= 2 ;
251+ std::unique_ptr<char []> new_ret_data (new char [ret_size]);
252+ memcpy (new_ret_data.get (), ret_data.get (), stream.total_out );
253+ stream.next_out = (unsigned char *)(new_ret_data.get () + stream.total_out );
254+ stream.avail_out = ret_size - stream.total_out ;
255+ ret_data = std::move (new_ret_data);
256+ }
247257 auto errcode = INFO::stream_run_encode (&stream, step);
248258 switch (errcode) {
249259 case CompStatus::OK:
250- if (stream.avail_out == 0 ) {
251- // lzma return a OK return status the first time it runs out of output memory.
252- // The BUF_ERROR is returned only the second time we call a lzma_code.
253- continue ;
254- } else {
255- return RunnerStatus::NEED_MORE;
256- }
260+ return RunnerStatus::NEED_MORE;
257261 case CompStatus::STREAM_END:
258262 return RunnerStatus::NEED_MORE;
259263 case CompStatus::BUF_ERROR:
260- if (stream.avail_out == 0 ) {
261- // Not enought output size
262- ret_size *= 2 ;
263- std::unique_ptr<char []> new_ret_data (new char [ret_size]);
264- memcpy (new_ret_data.get (), ret_data.get (), stream.total_out );
265- stream.next_out = (unsigned char *)(new_ret_data.get () + stream.total_out );
266- stream.avail_out = ret_size - stream.total_out ;
267- ret_data = std::move (new_ret_data);
268- continue ;
269- } else {
264+ if (stream.avail_out != 0 ) {
270265 return RunnerStatus::ERROR;
271266 }
272- break ;
267+ break ;
273268 default :
274269 // unreachable
275270 return RunnerStatus::ERROR;
0 commit comments