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 (at) 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 161