--- liblzf/lzf_c.c 2007/11/13 07:54:18 1.17 +++ liblzf/lzf_c.c 2007/11/13 08:17:38 1.18 @@ -160,10 +160,6 @@ if (expect_false (op + lit + 1 + 3 >= out_end)) return 0; - do - len++; - while (len < maxlen && ref[len] == ip[len]); - if (lit) { *op++ = lit - 1; @@ -173,6 +169,27 @@ while (++lit); } + for (;;) + { + if (expect_true (ip < in_end - 2 - 8 && maxlen > 8)) + { + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + len++; if (ref [len] != ip [len]) break; + } + + do + len++; + while (len < maxlen && ref[len] == ip[len]); + + break; + } + len -= 2; ip++;