}
}
- switch (lzma_code(zs, LZMA_RUN)) {
+ ret = lzma_code(zs, LZMA_RUN);
+ switch (ret) {
case LZMA_OK:
break;
case LZMA_MEM_ERROR:
"lzma.write(%s): Out of memory",
o_stream_get_name(&zstream->ostream.ostream));
default:
- i_unreached();
+ i_panic("lzma.write(%s) failed with unexpected code %d",
+ o_stream_get_name(&zstream->ostream.ostream), ret);
}
}
size -= zs->avail_in;
i_assert(zstream->outbuf_used == 0);
do {
- len = sizeof(zstream->outbuf) - zs->avail_out;
- if (len != 0) {
- zs->next_out = zstream->outbuf;
- zs->avail_out = sizeof(zstream->outbuf);
-
- zstream->outbuf_used = len;
- if ((ret = o_stream_zlib_send_outbuf(zstream)) <= 0)
- return ret;
- if (done)
- break;
- }
-
ret = lzma_code(zs, LZMA_FINISH);
switch (ret) {
+ case LZMA_OK:
+ break;
case LZMA_STREAM_END:
done = TRUE;
break;
"lzma.write(%s): Out of memory",
o_stream_get_name(&zstream->ostream.ostream));
default:
- i_unreached();
+ i_panic("lzma.write(%s) flush failed with unexpected code %d",
+ o_stream_get_name(&zstream->ostream.ostream), ret);
+ }
+ if (zs->avail_out == 0 || done) {
+ len = sizeof(zstream->outbuf) - zs->avail_out;
+ zs->next_out = zstream->outbuf;
+ zs->avail_out = sizeof(zstream->outbuf);
+
+ zstream->outbuf_used = len;
+ if ((ret = o_stream_zlib_send_outbuf(zstream)) <= 0)
+ return ret;
}
- } while (zs->avail_out != sizeof(zstream->outbuf));
+ } while (!done);
zstream->flushed = TRUE;
return 0;