| /* lzo1_d.ch -- common decompression stuff |
| |
| This file is part of the LZO real-time data compression library. |
| |
| Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer |
| Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer |
| All Rights Reserved. |
| |
| The LZO library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License as |
| published by the Free Software Foundation; either version 2 of |
| the License, or (at your option) any later version. |
| |
| The LZO library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with the LZO library; see the file COPYING. |
| If not, write to the Free Software Foundation, Inc., |
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| |
| Markus F.X.J. Oberhumer |
| <markus@oberhumer.com> |
| http://www.oberhumer.com/opensource/lzo/ |
| */ |
| |
| |
| |
| #if defined(LZO_TEST_OVERRUN) |
| # if !defined(LZO_TEST_OVERRUN_INPUT) |
| # define LZO_TEST_OVERRUN_INPUT 2 |
| # endif |
| # if !defined(LZO_TEST_OVERRUN_OUTPUT) |
| # define LZO_TEST_OVERRUN_OUTPUT 2 |
| # endif |
| # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) |
| # define LZO_TEST_OVERRUN_LOOKBEHIND |
| # endif |
| #endif |
| |
| |
| /*********************************************************************** |
| // Overrun detection is internally handled by these macros: |
| // |
| // TEST_IP test input overrun at loop begin |
| // NEED_IP test input overrun at every input byte |
| // |
| // TEST_OP test output overrun at loop begin |
| // NEED_OP test output overrun at every output byte |
| // |
| // TEST_LB test match postion |
| // |
| // The fastest decompressor results when testing for no overruns |
| // and using LZO_EOF_CODE. |
| ************************************************************************/ |
| |
| #undef TEST_IP |
| #undef TEST_OP |
| #undef TEST_LB |
| #undef TEST_LBO |
| #undef NEED_IP |
| #undef NEED_OP |
| #undef HAVE_TEST_IP |
| #undef HAVE_TEST_OP |
| #undef HAVE_NEED_IP |
| #undef HAVE_NEED_OP |
| #undef HAVE_ANY_IP |
| #undef HAVE_ANY_OP |
| |
| |
| #if defined(LZO_TEST_OVERRUN_INPUT) |
| # if (LZO_TEST_OVERRUN_INPUT >= 1) |
| # define TEST_IP (ip < ip_end) |
| # endif |
| # if (LZO_TEST_OVERRUN_INPUT >= 2) |
| # define NEED_IP(x) \ |
| if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun |
| # endif |
| #endif |
| |
| #if defined(LZO_TEST_OVERRUN_OUTPUT) |
| # if (LZO_TEST_OVERRUN_OUTPUT >= 1) |
| # define TEST_OP (op <= op_end) |
| # endif |
| # if (LZO_TEST_OVERRUN_OUTPUT >= 2) |
| # undef TEST_OP /* don't need both of the tests here */ |
| # define NEED_OP(x) \ |
| if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun |
| # endif |
| #endif |
| |
| #if defined(LZO_TEST_OVERRUN_LOOKBEHIND) |
| # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun |
| # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun |
| #else |
| # define TEST_LB(m_pos) ((void) 0) |
| # define TEST_LBO(m_pos,o) ((void) 0) |
| #endif |
| |
| |
| #if !defined(LZO_EOF_CODE) && !defined(TEST_IP) |
| /* if we have no EOF code, we have to test for the end of the input */ |
| # define TEST_IP (ip < ip_end) |
| #endif |
| |
| |
| #if defined(TEST_IP) |
| # define HAVE_TEST_IP |
| #else |
| # define TEST_IP 1 |
| #endif |
| #if defined(TEST_OP) |
| # define HAVE_TEST_OP |
| #else |
| # define TEST_OP 1 |
| #endif |
| |
| #if defined(NEED_IP) |
| # define HAVE_NEED_IP |
| #else |
| # define NEED_IP(x) ((void) 0) |
| #endif |
| #if defined(NEED_OP) |
| # define HAVE_NEED_OP |
| #else |
| # define NEED_OP(x) ((void) 0) |
| #endif |
| |
| |
| #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) |
| # define HAVE_ANY_IP |
| #endif |
| #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) |
| # define HAVE_ANY_OP |
| #endif |
| |
| |
| |
| /* |
| vi:ts=4:et |
| */ |
| |