summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deflate_medium.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/deflate_medium.c b/deflate_medium.c
index f67e1b60e7..dfb5e92cc0 100644
--- a/deflate_medium.c
+++ b/deflate_medium.c
@@ -22,23 +22,24 @@ struct match {
static int emit_match(deflate_state *s, struct match match) {
int bflush = 0;
+ uint32_t match_len = match.match_length;
+
+ /* None of the below functions care about s->lookahead, so decrement it early */
+ s->lookahead -= match_len;
/* matches that are not long enough we need to emit as literals */
- if (match.match_length < WANT_MIN_MATCH) {
- while (match.match_length) {
+ if (match_len < WANT_MIN_MATCH) {
+ while (match_len) {
bflush += zng_tr_tally_lit(s, s->window[match.strstart]);
- s->lookahead--;
+ match_len--;
match.strstart++;
- match.match_length--;
}
return bflush;
}
- check_match(s, match.strstart, match.match_start, match.match_length);
-
- bflush += zng_tr_tally_dist(s, match.strstart - match.match_start, match.match_length - STD_MIN_MATCH);
+ check_match(s, match.strstart, match.match_start, match_len);
- s->lookahead -= match.match_length;
+ bflush += zng_tr_tally_dist(s, match.strstart - match.match_start, match_len - STD_MIN_MATCH);
return bflush;
}