summaryrefslogtreecommitdiff
path: root/deflate_quick.c
diff options
context:
space:
mode:
authorNathan Moinvaziri <nathan@nathanm.com>2020-07-06 16:46:18 -0700
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-07-14 06:15:43 +0200
commit072f0bd93de683ba97d522421e98192caf6484d2 (patch)
tree3843962c82ab6fa3df73049c9cfe6479d15e6d3d /deflate_quick.c
parent1e2877069fcd2d02802b00c0b65f0bf4d6ade63f (diff)
Return proper exit code after flushing end block in deflate_quick when no available output.
Diffstat (limited to 'deflate_quick.c')
-rw-r--r--deflate_quick.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/deflate_quick.c b/deflate_quick.c
index 4c77530..fb2e138 100644
--- a/deflate_quick.c
+++ b/deflate_quick.c
@@ -38,6 +38,8 @@ extern const ct_data static_dtree[D_CODES];
s->block_open = 0; \
s->block_start = s->strstart; \
flush_pending(s->strm); \
+ if (s->strm->avail_out == 0) \
+ return (last) ? finish_started : need_more; \
} \
}
@@ -58,11 +60,11 @@ ZLIB_INTERNAL block_state deflate_quick(deflate_state *s, int flush) {
QUICK_START_BLOCK(s, last);
}
- do {
+ for (;;) {
if (UNLIKELY(s->pending + ((BIT_BUF_SIZE + 7) >> 3) >= s->pending_buf_size)) {
flush_pending(s->strm);
- if (s->strm->avail_out == 0 && flush != Z_FINISH) {
- return need_more;
+ if (s->strm->avail_out == 0) {
+ return (last && s->strm->avail_in == 0) ? finish_started : need_more;
}
}
@@ -105,14 +107,10 @@ ZLIB_INTERNAL block_state deflate_quick(deflate_state *s, int flush) {
zng_tr_emit_lit(s, static_ltree, s->window[s->strstart]);
s->strstart++;
s->lookahead--;
- } while (s->strm->avail_out != 0);
+ }
s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
-
if (UNLIKELY(last)) {
- if (s->strm->avail_out == 0)
- return s->strm->avail_in == 0 ? finish_started : need_more;
-
QUICK_END_BLOCK(s, 1);
return finish_done;
}