diff options
author | Mark Adler <fork@madler.net> | 2022-07-24 11:41:07 -0700 |
---|---|---|
committer | Mark Adler <fork@madler.net> | 2022-07-24 11:41:07 -0700 |
commit | b8bd09801f4a2c224655e14edffc5793943a33d2 (patch) | |
tree | 23b57c28678995cc28c71eb3c9a4bc689e1c6960 /infback.c | |
parent | 2333419cd76cb9ae5f15c9b240b16a2052b27691 (diff) | |
download | zlib-b8bd09801f4a2c224655e14edffc5793943a33d2.tar.gz |
Have infback() deliver all of the available output up to any error.
Diffstat (limited to 'infback.c')
-rw-r--r-- | infback.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -606,25 +606,27 @@ void FAR *out_desc; break; case DONE: - /* inflate stream terminated properly -- write leftover output */ + /* inflate stream terminated properly */ ret = Z_STREAM_END; - if (left < state->wsize) { - if (out(out_desc, state->window, state->wsize - left)) - ret = Z_BUF_ERROR; - } goto inf_leave; case BAD: ret = Z_DATA_ERROR; goto inf_leave; - default: /* can't happen, but makes compilers happy */ + default: + /* can't happen, but makes compilers happy */ ret = Z_STREAM_ERROR; goto inf_leave; } - /* Return unused input */ + /* Write leftover output and return unused input */ inf_leave: + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left) && + ret == Z_STREAM_END) + ret = Z_BUF_ERROR; + } strm->next_in = next; strm->avail_in = have; return ret; |