--- liblzf/lzf_c.c 2008/08/25 01:40:31 1.33 +++ liblzf/lzf_c.c 2008/08/30 06:32:20 1.34 @@ -222,37 +222,40 @@ } *op++ = off; + lit = 0; op++; /* start run */ + + ip += len + 1; + + if (expect_false (ip > in_end - 2)) + break; - if (expect_true (ip + len < in_end - 2)) - { #if ULTRA_FAST || VERY_FAST - ip += len; + --ip; # if VERY_FAST && !ULTRA_FAST - --ip; + --ip; # endif - hval = FRST (ip); + hval = FRST (ip); - hval = NEXT (hval, ip); - htab[IDX (hval)] = ip; - ip++; + hval = NEXT (hval, ip); + htab[IDX (hval)] = ip; + ip++; # if VERY_FAST && !ULTRA_FAST + hval = NEXT (hval, ip); + htab[IDX (hval)] = ip; + ip++; +# endif +#else + ip -= len + 1; + + do + { hval = NEXT (hval, ip); htab[IDX (hval)] = ip; ip++; -# endif -#else - do - { - hval = NEXT (hval, ip); - htab[IDX (hval)] = ip; - ip++; - } - while (len--); -#endif } - - lit = 0; op++; /* start run */ + while (len--); +#endif } else {