summaryrefslogtreecommitdiff
path: root/deflate_medium.c
diff options
context:
space:
mode:
Diffstat (limited to 'deflate_medium.c')
-rw-r--r--deflate_medium.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/deflate_medium.c b/deflate_medium.c
index 82301d1..046449f 100644
--- a/deflate_medium.c
+++ b/deflate_medium.c
@@ -68,17 +68,18 @@ static void insert_match(deflate_state *s, struct match match) {
}
}
#else
- if (likely(match.match_length == 1)) {
- match.strstart++;
- match.match_length = 0;
- }else{
- match.strstart++;
- match.match_length--;
+ match.strstart++;
+ match.match_length--;
+ if (match.match_length > 0) {
if (match.strstart >= match.orgstart) {
- insert_string(s, match.strstart, match.match_length);
+ if (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;
}
- match.strstart += match.match_length;
- match.match_length = 0;
}
#endif
return;
@@ -102,7 +103,11 @@ static void insert_match(deflate_state *s, struct match match) {
} while (--match.match_length != 0);
#else
if (likely(match.strstart >= match.orgstart)) {
- insert_string(s, match.strstart, match.match_length);
+ 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;
@@ -111,7 +116,7 @@ static void insert_match(deflate_state *s, struct match match) {
match.strstart += match.match_length;
match.match_length = 0;
s->ins_h = s->window[match.strstart];
- if (match.strstart >= 1)
+ if (match.strstart >= (MIN_MATCH - 2))
#ifndef NOT_TWEAK_COMPILER
insert_string(s, match.strstart + 2 - MIN_MATCH, MIN_MATCH - 2);
#else