diff options
Diffstat (limited to 'linux/lib/xz/xz_dec_bcj.c')
-rw-r--r-- | linux/lib/xz/xz_dec_bcj.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/linux/lib/xz/xz_dec_bcj.c b/linux/lib/xz/xz_dec_bcj.c index f053cfd..f5b25f1 100644 --- a/linux/lib/xz/xz_dec_bcj.c +++ b/linux/lib/xz/xz_dec_bcj.c @@ -28,6 +28,9 @@ struct xz_dec_bcj { */ enum xz_ret ret; + /* True if we are operating in single-call mode. */ + bool single_call; + /* * Absolute position relative to the beginning of the uncompressed * data (in a single .xz Block). We care only about the lowest 32 @@ -441,7 +444,8 @@ XZ_EXTERN enum xz_ret XZ_FUNC xz_dec_bcj_run(struct xz_dec_bcj *s, b->out_pos += s->temp.size; s->ret = xz_dec_lzma2_run(lzma2, b); - if (s->ret != XZ_OK && s->ret != XZ_STREAM_END) + if (s->ret != XZ_STREAM_END + && (s->ret != XZ_OK || s->single_call)) return s->ret; bcj_apply(s, b->out, &out_start, b->out_pos); @@ -503,9 +507,12 @@ XZ_EXTERN enum xz_ret XZ_FUNC xz_dec_bcj_run(struct xz_dec_bcj *s, return s->ret; } -XZ_EXTERN struct xz_dec_bcj * XZ_FUNC xz_dec_bcj_create(void) +XZ_EXTERN struct xz_dec_bcj * XZ_FUNC xz_dec_bcj_create(bool single_call) { struct xz_dec_bcj *s = kmalloc(sizeof(*s), GFP_KERNEL); + if (s != NULL) + s->single_call = single_call; + return s; } |