if (UNLIKELY(s->lookahead <= (unsigned int)(match.match_length + WANT_MIN_MATCH)))
return;
+ /* string at strstart already in table */
+ match.strstart++;
+ match.match_length--;
+
/* matches that are not long enough we need to emit as literals */
- if (LIKELY(match.match_length < WANT_MIN_MATCH)) {
- match.strstart++;
- match.match_length--;
+ if (LIKELY(match.match_length < WANT_MIN_MATCH - 1)) {
if (UNLIKELY(match.match_length > 0)) {
if (match.strstart >= match.orgstart) {
if (match.strstart + match.match_length - 1 >= match.orgstart) {
return;
}
- /* Insert new strings in the hash table. */
- if (s->lookahead >= WANT_MIN_MATCH) {
- match.match_length--; /* string at strstart already in table */
- match.strstart++;
-
- if (LIKELY(match.strstart >= match.orgstart)) {
- if (LIKELY(match.strstart + match.match_length - 1 >= match.orgstart)) {
- insert_string(s, match.strstart, match.match_length);
- } else {
- insert_string(s, match.strstart, match.orgstart - match.strstart + 1);
- }
- } else if (match.orgstart < match.strstart + match.match_length) {
- insert_string(s, match.orgstart, match.strstart + match.match_length - match.orgstart);
+ /* Insert into hash table. */
+ if (LIKELY(match.strstart >= match.orgstart)) {
+ if (LIKELY(match.strstart + match.match_length - 1 >= match.orgstart)) {
+ insert_string(s, match.strstart, match.match_length);
+ } else {
+ insert_string(s, match.strstart, match.orgstart - match.strstart + 1);
}
- match.strstart += match.match_length;
- match.match_length = 0;
- } else {
- match.strstart += match.match_length;
- match.match_length = 0;
-
- if (match.strstart >= (STD_MIN_MATCH - 2))
- quick_insert_string(s, match.strstart + 2 - STD_MIN_MATCH);
-
- /* If lookahead < WANT_MIN_MATCH, ins_h is garbage, but it does not
- * matter since it will be recomputed at next deflate call.
- */
+ } else if (match.orgstart < match.strstart + match.match_length) {
+ insert_string(s, match.orgstart, match.strstart + match.match_length - match.orgstart);
}
+ match.strstart += match.match_length;
+ match.match_length = 0;
}
static void fizzle_matches(deflate_state *s, struct match *current, struct match *next) {