[e16e8f2] | 1 | /* lzo1_d.ch -- common decompression stuff |
---|
| 2 | |
---|
| 3 | This file is part of the LZO real-time data compression library. |
---|
| 4 | |
---|
| 5 | Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer |
---|
| 6 | All Rights Reserved. |
---|
| 7 | |
---|
| 8 | The LZO library is free software; you can redistribute it and/or |
---|
| 9 | modify it under the terms of the GNU General Public License as |
---|
| 10 | published by the Free Software Foundation; either version 2 of |
---|
| 11 | the License, or (at your option) any later version. |
---|
| 12 | |
---|
| 13 | The LZO library is distributed in the hope that it will be useful, |
---|
| 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
| 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
| 16 | GNU General Public License for more details. |
---|
| 17 | |
---|
| 18 | You should have received a copy of the GNU General Public License |
---|
| 19 | along with the LZO library; see the file COPYING. |
---|
| 20 | If not, write to the Free Software Foundation, Inc., |
---|
| 21 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
---|
| 22 | |
---|
| 23 | Markus F.X.J. Oberhumer |
---|
| 24 | <markus@oberhumer.com> |
---|
| 25 | http://www.oberhumer.com/opensource/lzo/ |
---|
| 26 | */ |
---|
| 27 | |
---|
| 28 | |
---|
| 29 | |
---|
| 30 | #if defined(LZO_TEST_OVERRUN) |
---|
| 31 | # if !defined(LZO_TEST_OVERRUN_INPUT) |
---|
| 32 | # define LZO_TEST_OVERRUN_INPUT 2 |
---|
| 33 | # endif |
---|
| 34 | # if !defined(LZO_TEST_OVERRUN_OUTPUT) |
---|
| 35 | # define LZO_TEST_OVERRUN_OUTPUT 2 |
---|
| 36 | # endif |
---|
| 37 | # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) |
---|
| 38 | # define LZO_TEST_OVERRUN_LOOKBEHIND 1 |
---|
| 39 | # endif |
---|
| 40 | #endif |
---|
| 41 | |
---|
| 42 | |
---|
| 43 | /*********************************************************************** |
---|
| 44 | // Overrun detection is internally handled by these macros: |
---|
| 45 | // |
---|
| 46 | // TEST_IP test input overrun at loop begin |
---|
| 47 | // NEED_IP test input overrun at every input byte |
---|
| 48 | // |
---|
| 49 | // TEST_OP test output overrun at loop begin |
---|
| 50 | // NEED_OP test output overrun at every output byte |
---|
| 51 | // |
---|
| 52 | // TEST_LB test match position |
---|
| 53 | // |
---|
| 54 | // The fastest decompressor results when testing for no overruns |
---|
| 55 | // and using LZO_EOF_CODE. |
---|
| 56 | ************************************************************************/ |
---|
| 57 | |
---|
| 58 | #undef TEST_IP |
---|
| 59 | #undef TEST_OP |
---|
| 60 | #undef TEST_IP_AND_TEST_OP |
---|
| 61 | #undef TEST_LB |
---|
| 62 | #undef TEST_LBO |
---|
| 63 | #undef NEED_IP |
---|
| 64 | #undef NEED_OP |
---|
| 65 | #undef TEST_IV |
---|
| 66 | #undef TEST_OV |
---|
| 67 | #undef HAVE_TEST_IP |
---|
| 68 | #undef HAVE_TEST_OP |
---|
| 69 | #undef HAVE_NEED_IP |
---|
| 70 | #undef HAVE_NEED_OP |
---|
| 71 | #undef HAVE_ANY_IP |
---|
| 72 | #undef HAVE_ANY_OP |
---|
| 73 | |
---|
| 74 | |
---|
| 75 | #if defined(LZO_TEST_OVERRUN_INPUT) |
---|
| 76 | # if (LZO_TEST_OVERRUN_INPUT >= 1) |
---|
| 77 | # define TEST_IP (ip < ip_end) |
---|
| 78 | # endif |
---|
| 79 | # if (LZO_TEST_OVERRUN_INPUT >= 2) |
---|
| 80 | # define NEED_IP(x) \ |
---|
| 81 | if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun |
---|
| 82 | # define TEST_IV(x) if ((x) > (lzo_uint)0 - (511)) goto input_overrun |
---|
| 83 | # endif |
---|
| 84 | #endif |
---|
| 85 | |
---|
| 86 | #if defined(LZO_TEST_OVERRUN_OUTPUT) |
---|
| 87 | # if (LZO_TEST_OVERRUN_OUTPUT >= 1) |
---|
| 88 | # define TEST_OP (op <= op_end) |
---|
| 89 | # endif |
---|
| 90 | # if (LZO_TEST_OVERRUN_OUTPUT >= 2) |
---|
| 91 | # undef TEST_OP /* don't need both of the tests here */ |
---|
| 92 | # define NEED_OP(x) \ |
---|
| 93 | if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun |
---|
| 94 | # define TEST_OV(x) if ((x) > (lzo_uint)0 - (511)) goto output_overrun |
---|
| 95 | # endif |
---|
| 96 | #endif |
---|
| 97 | |
---|
| 98 | #if defined(LZO_TEST_OVERRUN_LOOKBEHIND) |
---|
| 99 | # define TEST_LB(m_pos) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op)) goto lookbehind_overrun |
---|
| 100 | # define TEST_LBO(m_pos,o) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op-(o))) goto lookbehind_overrun |
---|
| 101 | #else |
---|
| 102 | # define TEST_LB(m_pos) ((void) 0) |
---|
| 103 | # define TEST_LBO(m_pos,o) ((void) 0) |
---|
| 104 | #endif |
---|
| 105 | |
---|
| 106 | |
---|
| 107 | #if !defined(LZO_EOF_CODE) && !defined(TEST_IP) |
---|
| 108 | /* if we have no EOF code, we have to test for the end of the input */ |
---|
| 109 | # define TEST_IP (ip < ip_end) |
---|
| 110 | #endif |
---|
| 111 | |
---|
| 112 | |
---|
| 113 | #if defined(TEST_IP) |
---|
| 114 | # define HAVE_TEST_IP 1 |
---|
| 115 | #else |
---|
| 116 | # define TEST_IP 1 |
---|
| 117 | #endif |
---|
| 118 | #if defined(TEST_OP) |
---|
| 119 | # define HAVE_TEST_OP 1 |
---|
| 120 | #else |
---|
| 121 | # define TEST_OP 1 |
---|
| 122 | #endif |
---|
| 123 | |
---|
| 124 | #if defined(HAVE_TEST_IP) && defined(HAVE_TEST_OP) |
---|
| 125 | # define TEST_IP_AND_TEST_OP (TEST_IP && TEST_OP) |
---|
| 126 | #elif defined(HAVE_TEST_IP) |
---|
| 127 | # define TEST_IP_AND_TEST_OP TEST_IP |
---|
| 128 | #elif defined(HAVE_TEST_OP) |
---|
| 129 | # define TEST_IP_AND_TEST_OP TEST_OP |
---|
| 130 | #else |
---|
| 131 | # define TEST_IP_AND_TEST_OP 1 |
---|
| 132 | #endif |
---|
| 133 | |
---|
| 134 | #if defined(NEED_IP) |
---|
| 135 | # define HAVE_NEED_IP 1 |
---|
| 136 | #else |
---|
| 137 | # define NEED_IP(x) ((void) 0) |
---|
| 138 | # define TEST_IV(x) ((void) 0) |
---|
| 139 | #endif |
---|
| 140 | #if defined(NEED_OP) |
---|
| 141 | # define HAVE_NEED_OP 1 |
---|
| 142 | #else |
---|
| 143 | # define NEED_OP(x) ((void) 0) |
---|
| 144 | # define TEST_OV(x) ((void) 0) |
---|
| 145 | #endif |
---|
| 146 | |
---|
| 147 | |
---|
| 148 | #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) |
---|
| 149 | # define HAVE_ANY_IP 1 |
---|
| 150 | #endif |
---|
| 151 | #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) |
---|
| 152 | # define HAVE_ANY_OP 1 |
---|
| 153 | #endif |
---|
| 154 | |
---|
| 155 | |
---|
| 156 | |
---|
| 157 | /* |
---|
| 158 | vi:ts=4:et |
---|
| 159 | */ |
---|
| 160 | |
---|