|
MythTV
0.26-pre
|
00001 /* minilzo.c -- mini subset of the LZO real-time data compression library 00002 00003 This file is part of the LZO real-time data compression library. 00004 00005 Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer 00006 Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer 00007 Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer 00008 Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer 00009 Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer 00010 Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer 00011 Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer 00012 Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer 00013 Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer 00014 Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer 00015 Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer 00016 Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer 00017 Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer 00018 All Rights Reserved. 00019 00020 The LZO library is free software; you can redistribute it and/or 00021 modify it under the terms of the GNU General Public License as 00022 published by the Free Software Foundation; either version 2 of 00023 the License, or (at your option) any later version. 00024 00025 The LZO library is distributed in the hope that it will be useful, 00026 but WITHOUT ANY WARRANTY; without even the implied warranty of 00027 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00028 GNU General Public License for more details. 00029 00030 You should have received a copy of the GNU General Public License 00031 along with the LZO library; see the file COPYING. 00032 If not, write to the Free Software Foundation, Inc., 00033 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00034 00035 Markus F.X.J. Oberhumer 00036 <markus@oberhumer.com> 00037 http://www.oberhumer.com/opensource/lzo/ 00038 */ 00039 00040 /* 00041 * NOTE: 00042 * the full LZO package can be found at 00043 * http://www.oberhumer.com/opensource/lzo/ 00044 */ 00045 00046 #define __LZO_IN_MINILZO 00047 #define LZO_BUILD 00048 00049 #if defined(LZO_CFG_FREESTANDING) 00050 # undef MINILZO_HAVE_CONFIG_H 00051 # define LZO_LIBC_FREESTANDING 1 00052 # define LZO_OS_FREESTANDING 1 00053 #endif 00054 00055 #ifdef MINILZO_HAVE_CONFIG_H 00056 # include <config.h> 00057 #endif 00058 #include <limits.h> 00059 #include <stddef.h> 00060 #if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS) 00061 00062 #ifndef __LZODEFS_H_INCLUDED 00063 #define __LZODEFS_H_INCLUDED 1 00064 00065 #if defined(__CYGWIN32__) && !defined(__CYGWIN__) 00066 # define __CYGWIN__ __CYGWIN32__ 00067 #endif 00068 #if defined(__IBMCPP__) && !defined(__IBMC__) 00069 # define __IBMC__ __IBMCPP__ 00070 #endif 00071 #if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) 00072 # define __INTEL_COMPILER __ICL 00073 #endif 00074 #if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) 00075 # define _ALL_SOURCE 1 00076 #endif 00077 #if defined(__mips__) && defined(__R5900__) 00078 # if !defined(__LONG_MAX__) 00079 # define __LONG_MAX__ 9223372036854775807L 00080 # endif 00081 #endif 00082 #if defined(__INTEL_COMPILER) && defined(__linux__) 00083 # pragma warning(disable: 193) 00084 #endif 00085 #if defined(__KEIL__) && defined(__C166__) 00086 # pragma warning disable = 322 00087 #elif 0 && defined(__C251__) 00088 # pragma warning disable = 322 00089 #endif 00090 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) 00091 # if (_MSC_VER >= 1300) 00092 # pragma warning(disable: 4668) 00093 # endif 00094 #endif 00095 #if 0 && defined(__WATCOMC__) 00096 # if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) 00097 # pragma warning 203 9 00098 # endif 00099 #endif 00100 #if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) 00101 # pragma option -h 00102 #endif 00103 #if 0 00104 #define LZO_0xffffL 0xfffful 00105 #define LZO_0xffffffffL 0xfffffffful 00106 #else 00107 #define LZO_0xffffL 65535ul 00108 #define LZO_0xffffffffL 4294967295ul 00109 #endif 00110 #if (LZO_0xffffL == LZO_0xffffffffL) 00111 # error "your preprocessor is broken 1" 00112 #endif 00113 #if (16ul * 16384ul != 262144ul) 00114 # error "your preprocessor is broken 2" 00115 #endif 00116 #if 0 00117 #if (32767 >= 4294967295ul) 00118 # error "your preprocessor is broken 3" 00119 #endif 00120 #if (65535u >= 4294967295ul) 00121 # error "your preprocessor is broken 4" 00122 #endif 00123 #endif 00124 #if (UINT_MAX == LZO_0xffffL) 00125 #if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) 00126 # if !defined(MSDOS) 00127 # define MSDOS 1 00128 # endif 00129 # if !defined(_MSDOS) 00130 # define _MSDOS 1 00131 # endif 00132 #elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) 00133 # if (__VERSION == 520) && (MB_LEN_MAX == 1) 00134 # if !defined(__AZTEC_C__) 00135 # define __AZTEC_C__ __VERSION 00136 # endif 00137 # if !defined(__DOS__) 00138 # define __DOS__ 1 00139 # endif 00140 # endif 00141 #endif 00142 #endif 00143 #if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) 00144 # define ptrdiff_t long 00145 # define _PTRDIFF_T_DEFINED 00146 #endif 00147 #if (UINT_MAX == LZO_0xffffL) 00148 # undef __LZO_RENAME_A 00149 # undef __LZO_RENAME_B 00150 # if defined(__AZTEC_C__) && defined(__DOS__) 00151 # define __LZO_RENAME_A 1 00152 # elif defined(_MSC_VER) && defined(MSDOS) 00153 # if (_MSC_VER < 600) 00154 # define __LZO_RENAME_A 1 00155 # elif (_MSC_VER < 700) 00156 # define __LZO_RENAME_B 1 00157 # endif 00158 # elif defined(__TSC__) && defined(__OS2__) 00159 # define __LZO_RENAME_A 1 00160 # elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) 00161 # define __LZO_RENAME_A 1 00162 # elif defined(__PACIFIC__) && defined(DOS) 00163 # if !defined(__far) 00164 # define __far far 00165 # endif 00166 # if !defined(__near) 00167 # define __near near 00168 # endif 00169 # endif 00170 # if defined(__LZO_RENAME_A) 00171 # if !defined(__cdecl) 00172 # define __cdecl cdecl 00173 # endif 00174 # if !defined(__far) 00175 # define __far far 00176 # endif 00177 # if !defined(__huge) 00178 # define __huge huge 00179 # endif 00180 # if !defined(__near) 00181 # define __near near 00182 # endif 00183 # if !defined(__pascal) 00184 # define __pascal pascal 00185 # endif 00186 # if !defined(__huge) 00187 # define __huge huge 00188 # endif 00189 # elif defined(__LZO_RENAME_B) 00190 # if !defined(__cdecl) 00191 # define __cdecl _cdecl 00192 # endif 00193 # if !defined(__far) 00194 # define __far _far 00195 # endif 00196 # if !defined(__huge) 00197 # define __huge _huge 00198 # endif 00199 # if !defined(__near) 00200 # define __near _near 00201 # endif 00202 # if !defined(__pascal) 00203 # define __pascal _pascal 00204 # endif 00205 # elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 00206 # if !defined(__cdecl) 00207 # define __cdecl cdecl 00208 # endif 00209 # if !defined(__pascal) 00210 # define __pascal pascal 00211 # endif 00212 # endif 00213 # undef __LZO_RENAME_A 00214 # undef __LZO_RENAME_B 00215 #endif 00216 #if (UINT_MAX == LZO_0xffffL) 00217 #if defined(__AZTEC_C__) && defined(__DOS__) 00218 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1 00219 #elif defined(_MSC_VER) && defined(MSDOS) 00220 # if (_MSC_VER < 600) 00221 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1 00222 # endif 00223 # if (_MSC_VER < 700) 00224 # define LZO_BROKEN_INTEGRAL_PROMOTION 1 00225 # define LZO_BROKEN_SIZEOF 1 00226 # endif 00227 #elif defined(__PACIFIC__) && defined(DOS) 00228 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1 00229 #elif defined(__TURBOC__) && defined(__MSDOS__) 00230 # if (__TURBOC__ < 0x0150) 00231 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1 00232 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1 00233 # define LZO_BROKEN_INTEGRAL_PROMOTION 1 00234 # endif 00235 # if (__TURBOC__ < 0x0200) 00236 # define LZO_BROKEN_SIZEOF 1 00237 # endif 00238 # if (__TURBOC__ < 0x0400) && defined(__cplusplus) 00239 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1 00240 # endif 00241 #elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 00242 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1 00243 # define LZO_BROKEN_SIZEOF 1 00244 #endif 00245 #endif 00246 #if defined(__WATCOMC__) && (__WATCOMC__ < 900) 00247 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1 00248 #endif 00249 #if defined(_CRAY) && defined(_CRAY1) 00250 # define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 00251 #endif 00252 #define LZO_PP_STRINGIZE(x) #x 00253 #define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) 00254 #define LZO_PP_CONCAT2(a,b) a ## b 00255 #define LZO_PP_CONCAT3(a,b,c) a ## b ## c 00256 #define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d 00257 #define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 00258 #define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) 00259 #define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) 00260 #define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) 00261 #define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) 00262 #if 1 00263 #define LZO_CPP_STRINGIZE(x) #x 00264 #define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) 00265 #define LZO_CPP_CONCAT2(a,b) a ## b 00266 #define LZO_CPP_CONCAT3(a,b,c) a ## b ## c 00267 #define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d 00268 #define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 00269 #define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) 00270 #define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) 00271 #define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) 00272 #define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) 00273 #endif 00274 #define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) 00275 #if 1 && defined(__cplusplus) 00276 # if !defined(__STDC_CONSTANT_MACROS) 00277 # define __STDC_CONSTANT_MACROS 1 00278 # endif 00279 # if !defined(__STDC_LIMIT_MACROS) 00280 # define __STDC_LIMIT_MACROS 1 00281 # endif 00282 #endif 00283 #if defined(__cplusplus) 00284 # define LZO_EXTERN_C extern "C" 00285 #else 00286 # define LZO_EXTERN_C extern 00287 #endif 00288 #if !defined(__LZO_OS_OVERRIDE) 00289 #if defined(LZO_OS_FREESTANDING) 00290 # define LZO_INFO_OS "freestanding" 00291 #elif defined(LZO_OS_EMBEDDED) 00292 # define LZO_INFO_OS "embedded" 00293 #elif 1 && defined(__IAR_SYSTEMS_ICC__) 00294 # define LZO_OS_EMBEDDED 1 00295 # define LZO_INFO_OS "embedded" 00296 #elif defined(__CYGWIN__) && defined(__GNUC__) 00297 # define LZO_OS_CYGWIN 1 00298 # define LZO_INFO_OS "cygwin" 00299 #elif defined(__EMX__) && defined(__GNUC__) 00300 # define LZO_OS_EMX 1 00301 # define LZO_INFO_OS "emx" 00302 #elif defined(__BEOS__) 00303 # define LZO_OS_BEOS 1 00304 # define LZO_INFO_OS "beos" 00305 #elif defined(__Lynx__) 00306 # define LZO_OS_LYNXOS 1 00307 # define LZO_INFO_OS "lynxos" 00308 #elif defined(__OS400__) 00309 # define LZO_OS_OS400 1 00310 # define LZO_INFO_OS "os400" 00311 #elif defined(__QNX__) 00312 # define LZO_OS_QNX 1 00313 # define LZO_INFO_OS "qnx" 00314 #elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) 00315 # define LZO_OS_DOS32 1 00316 # define LZO_INFO_OS "dos32" 00317 #elif defined(__BORLANDC__) && defined(__DPMI16__) 00318 # define LZO_OS_DOS16 1 00319 # define LZO_INFO_OS "dos16" 00320 #elif defined(__ZTC__) && defined(DOS386) 00321 # define LZO_OS_DOS32 1 00322 # define LZO_INFO_OS "dos32" 00323 #elif defined(__OS2__) || defined(__OS2V2__) 00324 # if (UINT_MAX == LZO_0xffffL) 00325 # define LZO_OS_OS216 1 00326 # define LZO_INFO_OS "os216" 00327 # elif (UINT_MAX == LZO_0xffffffffL) 00328 # define LZO_OS_OS2 1 00329 # define LZO_INFO_OS "os2" 00330 # else 00331 # error "check your limits.h header" 00332 # endif 00333 #elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) 00334 # define LZO_OS_WIN64 1 00335 # define LZO_INFO_OS "win64" 00336 #elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) 00337 # define LZO_OS_WIN32 1 00338 # define LZO_INFO_OS "win32" 00339 #elif defined(__MWERKS__) && defined(__INTEL__) 00340 # define LZO_OS_WIN32 1 00341 # define LZO_INFO_OS "win32" 00342 #elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) 00343 # if (UINT_MAX == LZO_0xffffL) 00344 # define LZO_OS_WIN16 1 00345 # define LZO_INFO_OS "win16" 00346 # elif (UINT_MAX == LZO_0xffffffffL) 00347 # define LZO_OS_WIN32 1 00348 # define LZO_INFO_OS "win32" 00349 # else 00350 # error "check your limits.h header" 00351 # endif 00352 #elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) 00353 # if (UINT_MAX == LZO_0xffffL) 00354 # define LZO_OS_DOS16 1 00355 # define LZO_INFO_OS "dos16" 00356 # elif (UINT_MAX == LZO_0xffffffffL) 00357 # define LZO_OS_DOS32 1 00358 # define LZO_INFO_OS "dos32" 00359 # else 00360 # error "check your limits.h header" 00361 # endif 00362 #elif defined(__WATCOMC__) 00363 # if defined(__NT__) && (UINT_MAX == LZO_0xffffL) 00364 # define LZO_OS_DOS16 1 00365 # define LZO_INFO_OS "dos16" 00366 # elif defined(__NT__) && (__WATCOMC__ < 1100) 00367 # define LZO_OS_WIN32 1 00368 # define LZO_INFO_OS "win32" 00369 # elif defined(__linux__) || defined(__LINUX__) 00370 # define LZO_OS_POSIX 1 00371 # define LZO_INFO_OS "posix" 00372 # else 00373 # error "please specify a target using the -bt compiler option" 00374 # endif 00375 #elif defined(__palmos__) 00376 # define LZO_OS_PALMOS 1 00377 # define LZO_INFO_OS "palmos" 00378 #elif defined(__TOS__) || defined(__atarist__) 00379 # define LZO_OS_TOS 1 00380 # define LZO_INFO_OS "tos" 00381 #elif defined(macintosh) && !defined(__ppc__) 00382 # define LZO_OS_MACCLASSIC 1 00383 # define LZO_INFO_OS "macclassic" 00384 #elif defined(__VMS) 00385 # define LZO_OS_VMS 1 00386 # define LZO_INFO_OS "vms" 00387 #elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 00388 # define LZO_OS_CONSOLE 1 00389 # define LZO_OS_CONSOLE_PS2 1 00390 # define LZO_INFO_OS "console" 00391 # define LZO_INFO_OS_CONSOLE "ps2" 00392 #elif (defined(__mips__) && defined(__psp__)) 00393 # define LZO_OS_CONSOLE 1 00394 # define LZO_OS_CONSOLE_PSP 1 00395 # define LZO_INFO_OS "console" 00396 # define LZO_INFO_OS_CONSOLE "psp" 00397 #else 00398 # define LZO_OS_POSIX 1 00399 # define LZO_INFO_OS "posix" 00400 #endif 00401 #if (LZO_OS_POSIX) 00402 # if defined(_AIX) || defined(__AIX__) || defined(__aix__) 00403 # define LZO_OS_POSIX_AIX 1 00404 # define LZO_INFO_OS_POSIX "aix" 00405 # elif defined(__FreeBSD__) 00406 # define LZO_OS_POSIX_FREEBSD 1 00407 # define LZO_INFO_OS_POSIX "freebsd" 00408 # elif defined(__hpux__) || defined(__hpux) 00409 # define LZO_OS_POSIX_HPUX 1 00410 # define LZO_INFO_OS_POSIX "hpux" 00411 # elif defined(__INTERIX) 00412 # define LZO_OS_POSIX_INTERIX 1 00413 # define LZO_INFO_OS_POSIX "interix" 00414 # elif defined(__IRIX__) || defined(__irix__) 00415 # define LZO_OS_POSIX_IRIX 1 00416 # define LZO_INFO_OS_POSIX "irix" 00417 # elif defined(__linux__) || defined(__linux) || defined(__LINUX__) 00418 # define LZO_OS_POSIX_LINUX 1 00419 # define LZO_INFO_OS_POSIX "linux" 00420 # elif defined(__APPLE__) || defined(__MACOS__) 00421 # define LZO_OS_POSIX_MACOSX 1 00422 # define LZO_INFO_OS_POSIX "macosx" 00423 # elif defined(__minix__) || defined(__minix) 00424 # define LZO_OS_POSIX_MINIX 1 00425 # define LZO_INFO_OS_POSIX "minix" 00426 # elif defined(__NetBSD__) 00427 # define LZO_OS_POSIX_NETBSD 1 00428 # define LZO_INFO_OS_POSIX "netbsd" 00429 # elif defined(__OpenBSD__) 00430 # define LZO_OS_POSIX_OPENBSD 1 00431 # define LZO_INFO_OS_POSIX "openbsd" 00432 # elif defined(__osf__) 00433 # define LZO_OS_POSIX_OSF 1 00434 # define LZO_INFO_OS_POSIX "osf" 00435 # elif defined(__solaris__) || defined(__sun) 00436 # if defined(__SVR4) || defined(__svr4__) 00437 # define LZO_OS_POSIX_SOLARIS 1 00438 # define LZO_INFO_OS_POSIX "solaris" 00439 # else 00440 # define LZO_OS_POSIX_SUNOS 1 00441 # define LZO_INFO_OS_POSIX "sunos" 00442 # endif 00443 # elif defined(__ultrix__) || defined(__ultrix) 00444 # define LZO_OS_POSIX_ULTRIX 1 00445 # define LZO_INFO_OS_POSIX "ultrix" 00446 # elif defined(_UNICOS) 00447 # define LZO_OS_POSIX_UNICOS 1 00448 # define LZO_INFO_OS_POSIX "unicos" 00449 # else 00450 # define LZO_OS_POSIX_UNKNOWN 1 00451 # define LZO_INFO_OS_POSIX "unknown" 00452 # endif 00453 #endif 00454 #endif 00455 #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 00456 # if (UINT_MAX != LZO_0xffffL) 00457 # error "this should not happen" 00458 # endif 00459 # if (ULONG_MAX != LZO_0xffffffffL) 00460 # error "this should not happen" 00461 # endif 00462 #endif 00463 #if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) 00464 # if (UINT_MAX != LZO_0xffffffffL) 00465 # error "this should not happen" 00466 # endif 00467 # if (ULONG_MAX != LZO_0xffffffffL) 00468 # error "this should not happen" 00469 # endif 00470 #endif 00471 #if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) 00472 # define LZO_CC_CILLY 1 00473 # define LZO_INFO_CC "Cilly" 00474 # if defined(__CILLY__) 00475 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) 00476 # else 00477 # define LZO_INFO_CCVER "unknown" 00478 # endif 00479 #elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) 00480 # define LZO_CC_SDCC 1 00481 # define LZO_INFO_CC "sdcc" 00482 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) 00483 #elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) 00484 # define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) 00485 # define LZO_INFO_CC "Pathscale C" 00486 # define LZO_INFO_CCVER __PATHSCALE__ 00487 #elif defined(__INTEL_COMPILER) 00488 # define LZO_CC_INTELC 1 00489 # define LZO_INFO_CC "Intel C" 00490 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) 00491 # if defined(_WIN32) || defined(_WIN64) 00492 # define LZO_CC_SYNTAX_MSC 1 00493 # else 00494 # define LZO_CC_SYNTAX_GNUC 1 00495 # endif 00496 #elif defined(__POCC__) && defined(_WIN32) 00497 # define LZO_CC_PELLESC 1 00498 # define LZO_INFO_CC "Pelles C" 00499 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) 00500 #elif defined(__llvm__) && defined(__GNUC__) && defined(__VERSION__) 00501 # if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) 00502 # define LZO_CC_LLVM (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 00503 # else 00504 # define LZO_CC_LLVM (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 00505 # endif 00506 # define LZO_INFO_CC "llvm-gcc" 00507 # define LZO_INFO_CCVER __VERSION__ 00508 #elif defined(__GNUC__) && defined(__VERSION__) 00509 # if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) 00510 # define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 00511 # elif defined(__GNUC_MINOR__) 00512 # define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 00513 # else 00514 # define LZO_CC_GNUC (__GNUC__ * 0x10000L) 00515 # endif 00516 # define LZO_INFO_CC "gcc" 00517 # define LZO_INFO_CCVER __VERSION__ 00518 #elif defined(__ACK__) && defined(_ACK) 00519 # define LZO_CC_ACK 1 00520 # define LZO_INFO_CC "Amsterdam Compiler Kit C" 00521 # define LZO_INFO_CCVER "unknown" 00522 #elif defined(__AZTEC_C__) 00523 # define LZO_CC_AZTECC 1 00524 # define LZO_INFO_CC "Aztec C" 00525 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) 00526 #elif defined(__BORLANDC__) 00527 # define LZO_CC_BORLANDC 1 00528 # define LZO_INFO_CC "Borland C" 00529 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) 00530 #elif defined(_CRAYC) && defined(_RELEASE) 00531 # define LZO_CC_CRAYC 1 00532 # define LZO_INFO_CC "Cray C" 00533 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) 00534 #elif defined(__DMC__) && defined(__SC__) 00535 # define LZO_CC_DMC 1 00536 # define LZO_INFO_CC "Digital Mars C" 00537 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) 00538 #elif defined(__DECC) 00539 # define LZO_CC_DECC 1 00540 # define LZO_INFO_CC "DEC C" 00541 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) 00542 #elif defined(__HIGHC__) 00543 # define LZO_CC_HIGHC 1 00544 # define LZO_INFO_CC "MetaWare High C" 00545 # define LZO_INFO_CCVER "unknown" 00546 #elif defined(__IAR_SYSTEMS_ICC__) 00547 # define LZO_CC_IARC 1 00548 # define LZO_INFO_CC "IAR C" 00549 # if defined(__VER__) 00550 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) 00551 # else 00552 # define LZO_INFO_CCVER "unknown" 00553 # endif 00554 #elif defined(__IBMC__) 00555 # define LZO_CC_IBMC 1 00556 # define LZO_INFO_CC "IBM C" 00557 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) 00558 #elif defined(__KEIL__) && defined(__C166__) 00559 # define LZO_CC_KEILC 1 00560 # define LZO_INFO_CC "Keil C" 00561 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) 00562 #elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) 00563 # define LZO_CC_LCCWIN32 1 00564 # define LZO_INFO_CC "lcc-win32" 00565 # define LZO_INFO_CCVER "unknown" 00566 #elif defined(__LCC__) 00567 # define LZO_CC_LCC 1 00568 # define LZO_INFO_CC "lcc" 00569 # if defined(__LCC_VERSION__) 00570 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) 00571 # else 00572 # define LZO_INFO_CCVER "unknown" 00573 # endif 00574 #elif defined(_MSC_VER) 00575 # define LZO_CC_MSC 1 00576 # define LZO_INFO_CC "Microsoft C" 00577 # if defined(_MSC_FULL_VER) 00578 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) 00579 # else 00580 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) 00581 # endif 00582 #elif defined(__MWERKS__) 00583 # define LZO_CC_MWERKS 1 00584 # define LZO_INFO_CC "Metrowerks C" 00585 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) 00586 #elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) 00587 # define LZO_CC_NDPC 1 00588 # define LZO_INFO_CC "Microway NDP C" 00589 # define LZO_INFO_CCVER "unknown" 00590 #elif defined(__PACIFIC__) 00591 # define LZO_CC_PACIFICC 1 00592 # define LZO_INFO_CC "Pacific C" 00593 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) 00594 #elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) 00595 # define LZO_CC_PGI 1 00596 # define LZO_INFO_CC "Portland Group PGI C" 00597 # define LZO_INFO_CCVER "unknown" 00598 #elif defined(__PUREC__) && defined(__TOS__) 00599 # define LZO_CC_PUREC 1 00600 # define LZO_INFO_CC "Pure C" 00601 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) 00602 #elif defined(__SC__) && defined(__ZTC__) 00603 # define LZO_CC_SYMANTECC 1 00604 # define LZO_INFO_CC "Symantec C" 00605 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) 00606 #elif defined(__SUNPRO_C) 00607 # define LZO_INFO_CC "SunPro C" 00608 # if ((__SUNPRO_C)+0 > 0) 00609 # define LZO_CC_SUNPROC __SUNPRO_C 00610 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) 00611 # else 00612 # define LZO_CC_SUNPROC 1 00613 # define LZO_INFO_CCVER "unknown" 00614 # endif 00615 #elif defined(__SUNPRO_CC) 00616 # define LZO_INFO_CC "SunPro C" 00617 # if ((__SUNPRO_CC)+0 > 0) 00618 # define LZO_CC_SUNPROC __SUNPRO_CC 00619 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) 00620 # else 00621 # define LZO_CC_SUNPROC 1 00622 # define LZO_INFO_CCVER "unknown" 00623 # endif 00624 #elif defined(__TINYC__) 00625 # define LZO_CC_TINYC 1 00626 # define LZO_INFO_CC "Tiny C" 00627 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) 00628 #elif defined(__TSC__) 00629 # define LZO_CC_TOPSPEEDC 1 00630 # define LZO_INFO_CC "TopSpeed C" 00631 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) 00632 #elif defined(__WATCOMC__) 00633 # define LZO_CC_WATCOMC 1 00634 # define LZO_INFO_CC "Watcom C" 00635 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) 00636 #elif defined(__TURBOC__) 00637 # define LZO_CC_TURBOC 1 00638 # define LZO_INFO_CC "Turbo C" 00639 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) 00640 #elif defined(__ZTC__) 00641 # define LZO_CC_ZORTECHC 1 00642 # define LZO_INFO_CC "Zortech C" 00643 # if (__ZTC__ == 0x310) 00644 # define LZO_INFO_CCVER "0x310" 00645 # else 00646 # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) 00647 # endif 00648 #else 00649 # define LZO_CC_UNKNOWN 1 00650 # define LZO_INFO_CC "unknown" 00651 # define LZO_INFO_CCVER "unknown" 00652 #endif 00653 #if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) 00654 # error "LZO_CC_MSC: _MSC_FULL_VER is not defined" 00655 #endif 00656 #if !defined(__LZO_ARCH_OVERRIDE) && !defined(LZO_ARCH_GENERIC) && defined(_CRAY) 00657 # if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) 00658 # if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) 00659 # define LZO_ARCH_CRAY_MPP 1 00660 # elif defined(_CRAY1) 00661 # define LZO_ARCH_CRAY_PVP 1 00662 # endif 00663 # endif 00664 #endif 00665 #if !defined(__LZO_ARCH_OVERRIDE) 00666 #if defined(LZO_ARCH_GENERIC) 00667 # define LZO_INFO_ARCH "generic" 00668 #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 00669 # define LZO_ARCH_I086 1 00670 # define LZO_ARCH_IA16 1 00671 # define LZO_INFO_ARCH "i086" 00672 #elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) 00673 # define LZO_ARCH_ALPHA 1 00674 # define LZO_INFO_ARCH "alpha" 00675 #elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) 00676 # define LZO_ARCH_ALPHA 1 00677 # define LZO_INFO_ARCH "alpha" 00678 #elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) 00679 # define LZO_ARCH_AMD64 1 00680 # define LZO_INFO_ARCH "amd64" 00681 #elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) 00682 # define LZO_ARCH_ARM 1 00683 # define LZO_ARCH_ARM_THUMB 1 00684 # define LZO_INFO_ARCH "arm_thumb" 00685 #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) 00686 # define LZO_ARCH_ARM 1 00687 # if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) 00688 # define LZO_ARCH_ARM_THUMB 1 00689 # define LZO_INFO_ARCH "arm_thumb" 00690 # elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) 00691 # define LZO_INFO_ARCH "arm" 00692 # else 00693 # define LZO_INFO_ARCH "arm" 00694 # endif 00695 #elif defined(__arm__) || defined(_M_ARM) 00696 # define LZO_ARCH_ARM 1 00697 # define LZO_INFO_ARCH "arm" 00698 #elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) 00699 # define LZO_ARCH_AVR 1 00700 # define LZO_INFO_ARCH "avr" 00701 #elif defined(__bfin__) 00702 # define LZO_ARCH_BLACKFIN 1 00703 # define LZO_INFO_ARCH "blackfin" 00704 #elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) 00705 # define LZO_ARCH_C166 1 00706 # define LZO_INFO_ARCH "c166" 00707 #elif defined(__cris__) 00708 # define LZO_ARCH_CRIS 1 00709 # define LZO_INFO_ARCH "cris" 00710 #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) 00711 # define LZO_ARCH_EZ80 1 00712 # define LZO_INFO_ARCH "ez80" 00713 #elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 00714 # define LZO_ARCH_H8300 1 00715 # define LZO_INFO_ARCH "h8300" 00716 #elif defined(__hppa__) || defined(__hppa) 00717 # define LZO_ARCH_HPPA 1 00718 # define LZO_INFO_ARCH "hppa" 00719 #elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) 00720 # define LZO_ARCH_I386 1 00721 # define LZO_ARCH_IA32 1 00722 # define LZO_INFO_ARCH "i386" 00723 #elif (LZO_CC_ZORTECHC && defined(__I86__)) 00724 # define LZO_ARCH_I386 1 00725 # define LZO_ARCH_IA32 1 00726 # define LZO_INFO_ARCH "i386" 00727 #elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) 00728 # define LZO_ARCH_I386 1 00729 # define LZO_ARCH_IA32 1 00730 # define LZO_INFO_ARCH "i386" 00731 #elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) 00732 # define LZO_ARCH_IA64 1 00733 # define LZO_INFO_ARCH "ia64" 00734 #elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) 00735 # define LZO_ARCH_M16C 1 00736 # define LZO_INFO_ARCH "m16c" 00737 #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) 00738 # define LZO_ARCH_M16C 1 00739 # define LZO_INFO_ARCH "m16c" 00740 #elif defined(__m32r__) 00741 # define LZO_ARCH_M32R 1 00742 # define LZO_INFO_ARCH "m32r" 00743 #elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) 00744 # define LZO_ARCH_M68K 1 00745 # define LZO_INFO_ARCH "m68k" 00746 #elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) 00747 # define LZO_ARCH_MCS251 1 00748 # define LZO_INFO_ARCH "mcs251" 00749 #elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) 00750 # define LZO_ARCH_MCS51 1 00751 # define LZO_INFO_ARCH "mcs51" 00752 #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) 00753 # define LZO_ARCH_MCS51 1 00754 # define LZO_INFO_ARCH "mcs51" 00755 #elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) 00756 # define LZO_ARCH_MIPS 1 00757 # define LZO_INFO_ARCH "mips" 00758 #elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) 00759 # define LZO_ARCH_MSP430 1 00760 # define LZO_INFO_ARCH "msp430" 00761 #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) 00762 # define LZO_ARCH_MSP430 1 00763 # define LZO_INFO_ARCH "msp430" 00764 #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) 00765 # define LZO_ARCH_POWERPC 1 00766 # define LZO_INFO_ARCH "powerpc" 00767 #elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) 00768 # define LZO_ARCH_S390 1 00769 # define LZO_INFO_ARCH "s390" 00770 #elif defined(__sh__) || defined(_M_SH) 00771 # define LZO_ARCH_SH 1 00772 # define LZO_INFO_ARCH "sh" 00773 #elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) 00774 # define LZO_ARCH_SPARC 1 00775 # define LZO_INFO_ARCH "sparc" 00776 #elif defined(__SPU__) 00777 # define LZO_ARCH_SPU 1 00778 # define LZO_INFO_ARCH "spu" 00779 #elif (UINT_MAX == LZO_0xffffL) && defined(__z80) 00780 # define LZO_ARCH_Z80 1 00781 # define LZO_INFO_ARCH "z80" 00782 #elif (LZO_ARCH_CRAY_PVP) 00783 # if defined(_CRAYSV1) 00784 # define LZO_ARCH_CRAY_SV1 1 00785 # define LZO_INFO_ARCH "cray_sv1" 00786 # elif (_ADDR64) 00787 # define LZO_ARCH_CRAY_T90 1 00788 # define LZO_INFO_ARCH "cray_t90" 00789 # elif (_ADDR32) 00790 # define LZO_ARCH_CRAY_YMP 1 00791 # define LZO_INFO_ARCH "cray_ymp" 00792 # else 00793 # define LZO_ARCH_CRAY_XMP 1 00794 # define LZO_INFO_ARCH "cray_xmp" 00795 # endif 00796 #else 00797 # define LZO_ARCH_UNKNOWN 1 00798 # define LZO_INFO_ARCH "unknown" 00799 #endif 00800 #endif 00801 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) 00802 # error "FIXME - missing define for CPU architecture" 00803 #endif 00804 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) 00805 # error "FIXME - missing WIN32 define for CPU architecture" 00806 #endif 00807 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) 00808 # error "FIXME - missing WIN64 define for CPU architecture" 00809 #endif 00810 #if (LZO_OS_OS216 || LZO_OS_WIN16) 00811 # define LZO_ARCH_I086PM 1 00812 # define LZO_ARCH_IA16PM 1 00813 #elif 1 && (LZO_OS_DOS16 && defined(BLX286)) 00814 # define LZO_ARCH_I086PM 1 00815 # define LZO_ARCH_IA16PM 1 00816 #elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) 00817 # define LZO_ARCH_I086PM 1 00818 # define LZO_ARCH_IA16PM 1 00819 #elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) 00820 # define LZO_ARCH_I086PM 1 00821 # define LZO_ARCH_IA16PM 1 00822 #endif 00823 #if defined(LZO_ARCH_ARM_THUMB) && !defined(LZO_ARCH_ARM) 00824 # error "this should not happen" 00825 #endif 00826 #if defined(LZO_ARCH_I086PM) && !defined(LZO_ARCH_I086) 00827 # error "this should not happen" 00828 #endif 00829 #if (LZO_ARCH_I086) 00830 # if (UINT_MAX != LZO_0xffffL) 00831 # error "this should not happen" 00832 # endif 00833 # if (ULONG_MAX != LZO_0xffffffffL) 00834 # error "this should not happen" 00835 # endif 00836 #endif 00837 #if (LZO_ARCH_I386) 00838 # if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) 00839 # error "this should not happen" 00840 # endif 00841 # if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) 00842 # error "this should not happen" 00843 # endif 00844 # if (ULONG_MAX != LZO_0xffffffffL) 00845 # error "this should not happen" 00846 # endif 00847 #endif 00848 #if !defined(__LZO_MM_OVERRIDE) 00849 #if (LZO_ARCH_I086) 00850 #if (UINT_MAX != LZO_0xffffL) 00851 # error "this should not happen" 00852 #endif 00853 #if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) 00854 # define LZO_MM_TINY 1 00855 #elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) 00856 # define LZO_MM_HUGE 1 00857 #elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) 00858 # define LZO_MM_SMALL 1 00859 #elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) 00860 # define LZO_MM_MEDIUM 1 00861 #elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) 00862 # define LZO_MM_COMPACT 1 00863 #elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) 00864 # define LZO_MM_LARGE 1 00865 #elif (LZO_CC_AZTECC) 00866 # if defined(_LARGE_CODE) && defined(_LARGE_DATA) 00867 # define LZO_MM_LARGE 1 00868 # elif defined(_LARGE_CODE) 00869 # define LZO_MM_MEDIUM 1 00870 # elif defined(_LARGE_DATA) 00871 # define LZO_MM_COMPACT 1 00872 # else 00873 # define LZO_MM_SMALL 1 00874 # endif 00875 #elif (LZO_CC_ZORTECHC && defined(__VCM__)) 00876 # define LZO_MM_LARGE 1 00877 #else 00878 # error "unknown memory model" 00879 #endif 00880 #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 00881 #define LZO_HAVE_MM_HUGE_PTR 1 00882 #define LZO_HAVE_MM_HUGE_ARRAY 1 00883 #if (LZO_MM_TINY) 00884 # undef LZO_HAVE_MM_HUGE_ARRAY 00885 #endif 00886 #if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) 00887 # undef LZO_HAVE_MM_HUGE_PTR 00888 # undef LZO_HAVE_MM_HUGE_ARRAY 00889 #elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 00890 # undef LZO_HAVE_MM_HUGE_ARRAY 00891 #elif (LZO_CC_MSC && defined(_QC)) 00892 # undef LZO_HAVE_MM_HUGE_ARRAY 00893 # if (_MSC_VER < 600) 00894 # undef LZO_HAVE_MM_HUGE_PTR 00895 # endif 00896 #elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) 00897 # undef LZO_HAVE_MM_HUGE_ARRAY 00898 #endif 00899 #if (LZO_ARCH_I086PM) && !defined(LZO_HAVE_MM_HUGE_PTR) 00900 # if (LZO_OS_DOS16) 00901 # error "this should not happen" 00902 # elif (LZO_CC_ZORTECHC) 00903 # else 00904 # error "this should not happen" 00905 # endif 00906 #endif 00907 #ifdef __cplusplus 00908 extern "C" { 00909 #endif 00910 #if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) 00911 extern void __near __cdecl _AHSHIFT(void); 00912 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 00913 #elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 00914 extern void __near __cdecl _AHSHIFT(void); 00915 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 00916 #elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) 00917 extern void __near __cdecl _AHSHIFT(void); 00918 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 00919 #elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) 00920 extern void __near __cdecl _AHSHIFT(void); 00921 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 00922 #elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) 00923 # define LZO_MM_AHSHIFT 12 00924 #elif (LZO_CC_WATCOMC) 00925 extern unsigned char _HShift; 00926 # define LZO_MM_AHSHIFT ((unsigned) _HShift) 00927 #else 00928 # error "FIXME - implement LZO_MM_AHSHIFT" 00929 #endif 00930 #ifdef __cplusplus 00931 } 00932 #endif 00933 #endif 00934 #elif (LZO_ARCH_C166) 00935 #if !defined(__MODEL__) 00936 # error "FIXME - C166 __MODEL__" 00937 #elif ((__MODEL__) == 0) 00938 # define LZO_MM_SMALL 1 00939 #elif ((__MODEL__) == 1) 00940 # define LZO_MM_SMALL 1 00941 #elif ((__MODEL__) == 2) 00942 # define LZO_MM_LARGE 1 00943 #elif ((__MODEL__) == 3) 00944 # define LZO_MM_TINY 1 00945 #elif ((__MODEL__) == 4) 00946 # define LZO_MM_XTINY 1 00947 #elif ((__MODEL__) == 5) 00948 # define LZO_MM_XSMALL 1 00949 #else 00950 # error "FIXME - C166 __MODEL__" 00951 #endif 00952 #elif (LZO_ARCH_MCS251) 00953 #if !defined(__MODEL__) 00954 # error "FIXME - MCS251 __MODEL__" 00955 #elif ((__MODEL__) == 0) 00956 # define LZO_MM_SMALL 1 00957 #elif ((__MODEL__) == 2) 00958 # define LZO_MM_LARGE 1 00959 #elif ((__MODEL__) == 3) 00960 # define LZO_MM_TINY 1 00961 #elif ((__MODEL__) == 4) 00962 # define LZO_MM_XTINY 1 00963 #elif ((__MODEL__) == 5) 00964 # define LZO_MM_XSMALL 1 00965 #else 00966 # error "FIXME - MCS251 __MODEL__" 00967 #endif 00968 #elif (LZO_ARCH_MCS51) 00969 #if !defined(__MODEL__) 00970 # error "FIXME - MCS51 __MODEL__" 00971 #elif ((__MODEL__) == 1) 00972 # define LZO_MM_SMALL 1 00973 #elif ((__MODEL__) == 2) 00974 # define LZO_MM_LARGE 1 00975 #elif ((__MODEL__) == 3) 00976 # define LZO_MM_TINY 1 00977 #elif ((__MODEL__) == 4) 00978 # define LZO_MM_XTINY 1 00979 #elif ((__MODEL__) == 5) 00980 # define LZO_MM_XSMALL 1 00981 #else 00982 # error "FIXME - MCS51 __MODEL__" 00983 #endif 00984 #elif (LZO_ARCH_CRAY_PVP) 00985 # define LZO_MM_PVP 1 00986 #else 00987 # define LZO_MM_FLAT 1 00988 #endif 00989 #if (LZO_MM_COMPACT) 00990 # define LZO_INFO_MM "compact" 00991 #elif (LZO_MM_FLAT) 00992 # define LZO_INFO_MM "flat" 00993 #elif (LZO_MM_HUGE) 00994 # define LZO_INFO_MM "huge" 00995 #elif (LZO_MM_LARGE) 00996 # define LZO_INFO_MM "large" 00997 #elif (LZO_MM_MEDIUM) 00998 # define LZO_INFO_MM "medium" 00999 #elif (LZO_MM_PVP) 01000 # define LZO_INFO_MM "pvp" 01001 #elif (LZO_MM_SMALL) 01002 # define LZO_INFO_MM "small" 01003 #elif (LZO_MM_TINY) 01004 # define LZO_INFO_MM "tiny" 01005 #else 01006 # error "unknown memory model" 01007 #endif 01008 #endif 01009 #if defined(SIZEOF_SHORT) 01010 # define LZO_SIZEOF_SHORT (SIZEOF_SHORT) 01011 #endif 01012 #if defined(SIZEOF_INT) 01013 # define LZO_SIZEOF_INT (SIZEOF_INT) 01014 #endif 01015 #if defined(SIZEOF_LONG) 01016 # define LZO_SIZEOF_LONG (SIZEOF_LONG) 01017 #endif 01018 #if defined(SIZEOF_LONG_LONG) 01019 # define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) 01020 #endif 01021 #if defined(SIZEOF___INT16) 01022 # define LZO_SIZEOF___INT16 (SIZEOF___INT16) 01023 #endif 01024 #if defined(SIZEOF___INT32) 01025 # define LZO_SIZEOF___INT32 (SIZEOF___INT32) 01026 #endif 01027 #if defined(SIZEOF___INT64) 01028 # define LZO_SIZEOF___INT64 (SIZEOF___INT64) 01029 #endif 01030 #if defined(SIZEOF_VOID_P) 01031 # define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) 01032 #endif 01033 #if defined(SIZEOF_SIZE_T) 01034 # define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) 01035 #endif 01036 #if defined(SIZEOF_PTRDIFF_T) 01037 # define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) 01038 #endif 01039 #define __LZO_LSR(x,b) (((x)+0ul) >> (b)) 01040 #if !defined(LZO_SIZEOF_SHORT) 01041 # if (LZO_ARCH_CRAY_PVP) 01042 # define LZO_SIZEOF_SHORT 8 01043 # elif (USHRT_MAX == LZO_0xffffL) 01044 # define LZO_SIZEOF_SHORT 2 01045 # elif (__LZO_LSR(USHRT_MAX,7) == 1) 01046 # define LZO_SIZEOF_SHORT 1 01047 # elif (__LZO_LSR(USHRT_MAX,15) == 1) 01048 # define LZO_SIZEOF_SHORT 2 01049 # elif (__LZO_LSR(USHRT_MAX,31) == 1) 01050 # define LZO_SIZEOF_SHORT 4 01051 # elif (__LZO_LSR(USHRT_MAX,63) == 1) 01052 # define LZO_SIZEOF_SHORT 8 01053 # elif (__LZO_LSR(USHRT_MAX,127) == 1) 01054 # define LZO_SIZEOF_SHORT 16 01055 # else 01056 # error "LZO_SIZEOF_SHORT" 01057 # endif 01058 #endif 01059 #if !defined(LZO_SIZEOF_INT) 01060 # if (LZO_ARCH_CRAY_PVP) 01061 # define LZO_SIZEOF_INT 8 01062 # elif (UINT_MAX == LZO_0xffffL) 01063 # define LZO_SIZEOF_INT 2 01064 # elif (UINT_MAX == LZO_0xffffffffL) 01065 # define LZO_SIZEOF_INT 4 01066 # elif (__LZO_LSR(UINT_MAX,7) == 1) 01067 # define LZO_SIZEOF_INT 1 01068 # elif (__LZO_LSR(UINT_MAX,15) == 1) 01069 # define LZO_SIZEOF_INT 2 01070 # elif (__LZO_LSR(UINT_MAX,31) == 1) 01071 # define LZO_SIZEOF_INT 4 01072 # elif (__LZO_LSR(UINT_MAX,63) == 1) 01073 # define LZO_SIZEOF_INT 8 01074 # elif (__LZO_LSR(UINT_MAX,127) == 1) 01075 # define LZO_SIZEOF_INT 16 01076 # else 01077 # error "LZO_SIZEOF_INT" 01078 # endif 01079 #endif 01080 #if !defined(LZO_SIZEOF_LONG) 01081 # if (ULONG_MAX == LZO_0xffffffffL) 01082 # define LZO_SIZEOF_LONG 4 01083 # elif (__LZO_LSR(ULONG_MAX,7) == 1) 01084 # define LZO_SIZEOF_LONG 1 01085 # elif (__LZO_LSR(ULONG_MAX,15) == 1) 01086 # define LZO_SIZEOF_LONG 2 01087 # elif (__LZO_LSR(ULONG_MAX,31) == 1) 01088 # define LZO_SIZEOF_LONG 4 01089 # elif (__LZO_LSR(ULONG_MAX,63) == 1) 01090 # define LZO_SIZEOF_LONG 8 01091 # elif (__LZO_LSR(ULONG_MAX,127) == 1) 01092 # define LZO_SIZEOF_LONG 16 01093 # else 01094 # error "LZO_SIZEOF_LONG" 01095 # endif 01096 #endif 01097 #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 01098 #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 01099 # if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) 01100 # if (LZO_CC_GNUC >= 0x030300ul) 01101 # if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) 01102 # define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG 01103 # elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) 01104 # define LZO_SIZEOF_LONG_LONG 4 01105 # endif 01106 # endif 01107 # endif 01108 #endif 01109 #endif 01110 #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 01111 #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 01112 #if (LZO_ARCH_I086 && LZO_CC_DMC) 01113 #elif (LZO_CC_CILLY) && defined(__GNUC__) 01114 # define LZO_SIZEOF_LONG_LONG 8 01115 #elif (LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 01116 # define LZO_SIZEOF_LONG_LONG 8 01117 #elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) 01118 # define LZO_SIZEOF_LONG_LONG 8 01119 #elif (LZO_OS_WIN64 || defined(_WIN64)) 01120 # define LZO_SIZEOF___INT64 8 01121 #elif (LZO_ARCH_I386 && (LZO_CC_DMC)) 01122 # define LZO_SIZEOF_LONG_LONG 8 01123 #elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) 01124 # define LZO_SIZEOF_LONG_LONG 8 01125 #elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) 01126 # define LZO_SIZEOF_LONG_LONG 8 01127 #elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) 01128 # define LZO_SIZEOF_LONG_LONG 8 01129 #elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) 01130 # define LZO_SIZEOF___INT64 8 01131 #elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) 01132 # define LZO_SIZEOF___INT64 8 01133 #elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) 01134 # define LZO_SIZEOF___INT64 8 01135 #elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) 01136 # define LZO_SIZEOF___INT64 8 01137 #elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) 01138 # define LZO_SIZEOF___INT64 8 01139 #elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 01140 # define LZO_SIZEOF_LONG_LONG 8 01141 #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 01142 # define LZO_SIZEOF_LONG_LONG 8 01143 #elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) 01144 #elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 01145 # define LZO_SIZEOF_LONG_LONG 8 01146 #endif 01147 #endif 01148 #endif 01149 #if defined(__cplusplus) && defined(LZO_CC_GNUC) 01150 # if (LZO_CC_GNUC < 0x020800ul) 01151 # undef LZO_SIZEOF_LONG_LONG 01152 # endif 01153 #endif 01154 #if defined(LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) 01155 # undef LZO_SIZEOF_LONG_LONG 01156 #endif 01157 #if !defined(LZO_SIZEOF_VOID_P) 01158 #if (LZO_ARCH_I086) 01159 # define __LZO_WORDSIZE 2 01160 # if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) 01161 # define LZO_SIZEOF_VOID_P 2 01162 # elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) 01163 # define LZO_SIZEOF_VOID_P 4 01164 # else 01165 # error "LZO_MM" 01166 # endif 01167 #elif (LZO_ARCH_AVR || LZO_ARCH_Z80) 01168 # define __LZO_WORDSIZE 1 01169 # define LZO_SIZEOF_VOID_P 2 01170 #elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) 01171 # define LZO_SIZEOF_VOID_P 2 01172 #elif (LZO_ARCH_H8300) 01173 # if defined(__NORMAL_MODE__) 01174 # define __LZO_WORDSIZE 4 01175 # define LZO_SIZEOF_VOID_P 2 01176 # elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 01177 # define __LZO_WORDSIZE 4 01178 # define LZO_SIZEOF_VOID_P 4 01179 # else 01180 # define __LZO_WORDSIZE 2 01181 # define LZO_SIZEOF_VOID_P 2 01182 # endif 01183 # if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) 01184 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT 01185 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT 01186 # endif 01187 #elif (LZO_ARCH_M16C) 01188 # define __LZO_WORDSIZE 2 01189 # if defined(__m32c_cpu__) || defined(__m32cm_cpu__) 01190 # define LZO_SIZEOF_VOID_P 4 01191 # else 01192 # define LZO_SIZEOF_VOID_P 2 01193 # endif 01194 #elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 01195 # define __LZO_WORDSIZE 8 01196 # define LZO_SIZEOF_VOID_P 4 01197 #elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) 01198 # define __LZO_WORDSIZE 8 01199 # define LZO_SIZEOF_VOID_P 8 01200 #elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 01201 # define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 01202 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 01203 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 01204 #elif (LZO_OS_OS400 || defined(__OS400__)) 01205 # define __LZO_WORDSIZE LZO_SIZEOF_LONG 01206 # define LZO_SIZEOF_VOID_P 16 01207 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 01208 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 01209 #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 01210 # define LZO_SIZEOF_VOID_P 8 01211 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 01212 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 01213 #elif (LZO_ARCH_SPU) 01214 # if 0 01215 # define __LZO_WORDSIZE 16 01216 # endif 01217 # define LZO_SIZEOF_VOID_P 4 01218 #else 01219 # define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 01220 #endif 01221 #endif 01222 #if !defined(LZO_WORDSIZE) 01223 # if defined(__LZO_WORDSIZE) 01224 # define LZO_WORDSIZE __LZO_WORDSIZE 01225 # else 01226 # define LZO_WORDSIZE LZO_SIZEOF_VOID_P 01227 # endif 01228 #endif 01229 #if !defined(LZO_SIZEOF_SIZE_T) 01230 #if (LZO_ARCH_I086 || LZO_ARCH_M16C) 01231 # define LZO_SIZEOF_SIZE_T 2 01232 #else 01233 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P 01234 #endif 01235 #endif 01236 #if !defined(LZO_SIZEOF_PTRDIFF_T) 01237 #if (LZO_ARCH_I086) 01238 # if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) 01239 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P 01240 # elif (LZO_MM_COMPACT || LZO_MM_LARGE) 01241 # if (LZO_CC_BORLANDC || LZO_CC_TURBOC) 01242 # define LZO_SIZEOF_PTRDIFF_T 4 01243 # else 01244 # define LZO_SIZEOF_PTRDIFF_T 2 01245 # endif 01246 # else 01247 # error "LZO_MM" 01248 # endif 01249 #else 01250 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T 01251 #endif 01252 #endif 01253 #if defined(LZO_ABI_NEUTRAL_ENDIAN) 01254 # undef LZO_ABI_BIG_ENDIAN 01255 # undef LZO_ABI_LITTLE_ENDIAN 01256 #elif !defined(LZO_ABI_BIG_ENDIAN) && !defined(LZO_ABI_LITTLE_ENDIAN) 01257 #if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) 01258 # define LZO_ABI_BIG_ENDIAN 1 01259 #elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) 01260 # define LZO_ABI_LITTLE_ENDIAN 1 01261 #elif (LZO_ARCH_M68K || LZO_ARCH_S390) 01262 # define LZO_ABI_BIG_ENDIAN 1 01263 #elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) 01264 # if (__LITTLE_ENDIAN__ == 1) 01265 # define LZO_ABI_LITTLE_ENDIAN 1 01266 # else 01267 # define LZO_ABI_BIG_ENDIAN 1 01268 # endif 01269 #elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) 01270 # define LZO_ABI_BIG_ENDIAN 1 01271 #elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) 01272 # define LZO_ABI_LITTLE_ENDIAN 1 01273 #elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) 01274 # define LZO_ABI_BIG_ENDIAN 1 01275 #elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) 01276 # define LZO_ABI_LITTLE_ENDIAN 1 01277 #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) 01278 # define LZO_ABI_BIG_ENDIAN 1 01279 #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) 01280 # define LZO_ABI_LITTLE_ENDIAN 1 01281 #endif 01282 #endif 01283 #if defined(LZO_ABI_BIG_ENDIAN) && defined(LZO_ABI_LITTLE_ENDIAN) 01284 # error "this should not happen" 01285 #endif 01286 #if defined(LZO_ABI_BIG_ENDIAN) 01287 # define LZO_INFO_ABI_ENDIAN "be" 01288 #elif defined(LZO_ABI_LITTLE_ENDIAN) 01289 # define LZO_INFO_ABI_ENDIAN "le" 01290 #elif defined(LZO_ABI_NEUTRAL_ENDIAN) 01291 # define LZO_INFO_ABI_ENDIAN "neutral" 01292 #endif 01293 #if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 01294 # define LZO_ABI_I8LP16 1 01295 # define LZO_INFO_ABI_PM "i8lp16" 01296 #elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 01297 # define LZO_ABI_ILP16 1 01298 # define LZO_INFO_ABI_PM "ilp16" 01299 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) 01300 # define LZO_ABI_ILP32 1 01301 # define LZO_INFO_ABI_PM "ilp32" 01302 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) 01303 # define LZO_ABI_LLP64 1 01304 # define LZO_INFO_ABI_PM "llp64" 01305 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 01306 # define LZO_ABI_LP64 1 01307 # define LZO_INFO_ABI_PM "lp64" 01308 #elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 01309 # define LZO_ABI_ILP64 1 01310 # define LZO_INFO_ABI_PM "ilp64" 01311 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) 01312 # define LZO_ABI_IP32L64 1 01313 # define LZO_INFO_ABI_PM "ip32l64" 01314 #endif 01315 #if !defined(__LZO_LIBC_OVERRIDE) 01316 #if defined(LZO_LIBC_NAKED) 01317 # define LZO_INFO_LIBC "naked" 01318 #elif defined(LZO_LIBC_FREESTANDING) 01319 # define LZO_INFO_LIBC "freestanding" 01320 #elif defined(LZO_LIBC_MOSTLY_FREESTANDING) 01321 # define LZO_INFO_LIBC "mfreestanding" 01322 #elif defined(LZO_LIBC_ISOC90) 01323 # define LZO_INFO_LIBC "isoc90" 01324 #elif defined(LZO_LIBC_ISOC99) 01325 # define LZO_INFO_LIBC "isoc99" 01326 #elif defined(__dietlibc__) 01327 # define LZO_LIBC_DIETLIBC 1 01328 # define LZO_INFO_LIBC "dietlibc" 01329 #elif defined(_NEWLIB_VERSION) 01330 # define LZO_LIBC_NEWLIB 1 01331 # define LZO_INFO_LIBC "newlib" 01332 #elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) 01333 # if defined(__UCLIBC_SUBLEVEL__) 01334 # define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) 01335 # else 01336 # define LZO_LIBC_UCLIBC 0x00090bL 01337 # endif 01338 # define LZO_INFO_LIBC "uclibc" 01339 #elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) 01340 # define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) 01341 # define LZO_INFO_LIBC "glibc" 01342 #elif (LZO_CC_MWERKS) && defined(__MSL__) 01343 # define LZO_LIBC_MSL __MSL__ 01344 # define LZO_INFO_LIBC "msl" 01345 #elif 1 && defined(__IAR_SYSTEMS_ICC__) 01346 # define LZO_LIBC_ISOC90 1 01347 # define LZO_INFO_LIBC "isoc90" 01348 #else 01349 # define LZO_LIBC_DEFAULT 1 01350 # define LZO_INFO_LIBC "default" 01351 #endif 01352 #endif 01353 #if !defined(__lzo_gnuc_extension__) 01354 #if (LZO_CC_GNUC >= 0x020800ul) 01355 # define __lzo_gnuc_extension__ __extension__ 01356 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01357 # define __lzo_gnuc_extension__ __extension__ 01358 #else 01359 # define __lzo_gnuc_extension__ 01360 #endif 01361 #endif 01362 #if !defined(__lzo_ua_volatile) 01363 # define __lzo_ua_volatile volatile 01364 #endif 01365 #if !defined(__lzo_alignof) 01366 #if (LZO_CC_CILLY || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 01367 # define __lzo_alignof(e) __alignof__(e) 01368 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) 01369 # define __lzo_alignof(e) __alignof__(e) 01370 #elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 01371 # define __lzo_alignof(e) __alignof(e) 01372 #endif 01373 #endif 01374 #if defined(__lzo_alignof) 01375 # define __lzo_HAVE_alignof 1 01376 #endif 01377 #if !defined(__lzo_constructor) 01378 #if (LZO_CC_GNUC >= 0x030400ul) 01379 # define __lzo_constructor __attribute__((__constructor__,__used__)) 01380 #elif (LZO_CC_GNUC >= 0x020700ul) 01381 # define __lzo_constructor __attribute__((__constructor__)) 01382 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01383 # define __lzo_constructor __attribute__((__constructor__)) 01384 #endif 01385 #endif 01386 #if defined(__lzo_constructor) 01387 # define __lzo_HAVE_constructor 1 01388 #endif 01389 #if !defined(__lzo_destructor) 01390 #if (LZO_CC_GNUC >= 0x030400ul) 01391 # define __lzo_destructor __attribute__((__destructor__,__used__)) 01392 #elif (LZO_CC_GNUC >= 0x020700ul) 01393 # define __lzo_destructor __attribute__((__destructor__)) 01394 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01395 # define __lzo_destructor __attribute__((__destructor__)) 01396 #endif 01397 #endif 01398 #if defined(__lzo_destructor) 01399 # define __lzo_HAVE_destructor 1 01400 #endif 01401 #if defined(__lzo_HAVE_destructor) && !defined(__lzo_HAVE_constructor) 01402 # error "this should not happen" 01403 #endif 01404 #if !defined(__lzo_inline) 01405 #if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) 01406 #elif defined(__cplusplus) 01407 # define __lzo_inline inline 01408 #elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) 01409 # define __lzo_inline __inline 01410 #elif (LZO_CC_CILLY || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 01411 # define __lzo_inline __inline__ 01412 #elif (LZO_CC_DMC) 01413 # define __lzo_inline __inline 01414 #elif (LZO_CC_INTELC) 01415 # define __lzo_inline __inline 01416 #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) 01417 # define __lzo_inline __inline 01418 #elif (LZO_CC_MSC && (_MSC_VER >= 900)) 01419 # define __lzo_inline __inline 01420 #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 01421 # define __lzo_inline inline 01422 #endif 01423 #endif 01424 #if defined(__lzo_inline) 01425 # define __lzo_HAVE_inline 1 01426 #else 01427 # define __lzo_inline 01428 #endif 01429 #if !defined(__lzo_forceinline) 01430 #if (LZO_CC_GNUC >= 0x030200ul) 01431 # define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 01432 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) 01433 # define __lzo_forceinline __forceinline 01434 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 01435 # define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 01436 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01437 # define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 01438 #elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 01439 # define __lzo_forceinline __forceinline 01440 #endif 01441 #endif 01442 #if defined(__lzo_forceinline) 01443 # define __lzo_HAVE_forceinline 1 01444 #else 01445 # define __lzo_forceinline 01446 #endif 01447 #if !defined(__lzo_noinline) 01448 #if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) 01449 # define __lzo_noinline __attribute__((__noinline__,__used__)) 01450 #elif (LZO_CC_GNUC >= 0x030200ul) 01451 # define __lzo_noinline __attribute__((__noinline__)) 01452 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) 01453 # define __lzo_noinline __declspec(noinline) 01454 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 01455 # define __lzo_noinline __attribute__((__noinline__)) 01456 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01457 # define __lzo_noinline __attribute__((__noinline__)) 01458 #elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 01459 # define __lzo_noinline __declspec(noinline) 01460 #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) 01461 # if defined(__cplusplus) 01462 # else 01463 # define __lzo_noinline __declspec(noinline) 01464 # endif 01465 #endif 01466 #endif 01467 #if defined(__lzo_noinline) 01468 # define __lzo_HAVE_noinline 1 01469 #else 01470 # define __lzo_noinline 01471 #endif 01472 #if (defined(__lzo_HAVE_forceinline) || defined(__lzo_HAVE_noinline)) && !defined(__lzo_HAVE_inline) 01473 # error "this should not happen" 01474 #endif 01475 #if !defined(__lzo_noreturn) 01476 #if (LZO_CC_GNUC >= 0x020700ul) 01477 # define __lzo_noreturn __attribute__((__noreturn__)) 01478 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) 01479 # define __lzo_noreturn __declspec(noreturn) 01480 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) 01481 # define __lzo_noreturn __attribute__((__noreturn__)) 01482 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01483 # define __lzo_noreturn __attribute__((__noreturn__)) 01484 #elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 01485 # define __lzo_noreturn __declspec(noreturn) 01486 #endif 01487 #endif 01488 #if defined(__lzo_noreturn) 01489 # define __lzo_HAVE_noreturn 1 01490 #else 01491 # define __lzo_noreturn 01492 #endif 01493 #if !defined(__lzo_nothrow) 01494 #if (LZO_CC_GNUC >= 0x030300ul) 01495 # define __lzo_nothrow __attribute__((__nothrow__)) 01496 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) 01497 # define __lzo_nothrow __declspec(nothrow) 01498 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 01499 # define __lzo_nothrow __attribute__((__nothrow__)) 01500 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01501 # define __lzo_nothrow __attribute__((__nothrow__)) 01502 #elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) 01503 # define __lzo_nothrow __declspec(nothrow) 01504 #endif 01505 #endif 01506 #if defined(__lzo_nothrow) 01507 # define __lzo_HAVE_nothrow 1 01508 #else 01509 # define __lzo_nothrow 01510 #endif 01511 #if !defined(__lzo_restrict) 01512 #if (LZO_CC_GNUC >= 0x030400ul) 01513 # define __lzo_restrict __restrict__ 01514 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) 01515 # define __lzo_restrict __restrict__ 01516 #elif (LZO_CC_LLVM) 01517 # define __lzo_restrict __restrict__ 01518 #elif (LZO_CC_MSC && (_MSC_VER >= 1400)) 01519 # define __lzo_restrict __restrict 01520 #endif 01521 #endif 01522 #if defined(__lzo_restrict) 01523 # define __lzo_HAVE_restrict 1 01524 #else 01525 # define __lzo_restrict 01526 #endif 01527 #if !defined(__lzo_likely) && !defined(__lzo_unlikely) 01528 #if (LZO_CC_GNUC >= 0x030200ul) 01529 # define __lzo_likely(e) (__builtin_expect(!!(e),1)) 01530 # define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 01531 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) 01532 # define __lzo_likely(e) (__builtin_expect(!!(e),1)) 01533 # define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 01534 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE) 01535 # define __lzo_likely(e) (__builtin_expect(!!(e),1)) 01536 # define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 01537 #endif 01538 #endif 01539 #if defined(__lzo_likely) 01540 # define __lzo_HAVE_likely 1 01541 #else 01542 # define __lzo_likely(e) (e) 01543 #endif 01544 #if defined(__lzo_unlikely) 01545 # define __lzo_HAVE_unlikely 1 01546 #else 01547 # define __lzo_unlikely(e) (e) 01548 #endif 01549 #if !defined(LZO_UNUSED) 01550 # if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 01551 # define LZO_UNUSED(var) ((void) &var) 01552 # elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) 01553 # define LZO_UNUSED(var) if (&var) ; else 01554 # elif (LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 01555 # define LZO_UNUSED(var) ((void) var) 01556 # elif (LZO_CC_MSC && (_MSC_VER < 900)) 01557 # define LZO_UNUSED(var) if (&var) ; else 01558 # elif (LZO_CC_KEILC) 01559 # define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} 01560 # elif (LZO_CC_PACIFICC) 01561 # define LZO_UNUSED(var) ((void) sizeof(var)) 01562 # elif (LZO_CC_WATCOMC) && defined(__cplusplus) 01563 # define LZO_UNUSED(var) ((void) var) 01564 # else 01565 # define LZO_UNUSED(var) ((void) &var) 01566 # endif 01567 #endif 01568 #if !defined(LZO_UNUSED_FUNC) 01569 # if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 01570 # define LZO_UNUSED_FUNC(func) ((void) func) 01571 # elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) 01572 # define LZO_UNUSED_FUNC(func) if (func) ; else 01573 # elif (LZO_CC_LLVM) 01574 # define LZO_UNUSED_FUNC(func) ((void) &func) 01575 # elif (LZO_CC_MSC && (_MSC_VER < 900)) 01576 # define LZO_UNUSED_FUNC(func) if (func) ; else 01577 # elif (LZO_CC_MSC) 01578 # define LZO_UNUSED_FUNC(func) ((void) &func) 01579 # elif (LZO_CC_KEILC || LZO_CC_PELLESC) 01580 # define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} 01581 # else 01582 # define LZO_UNUSED_FUNC(func) ((void) func) 01583 # endif 01584 #endif 01585 #if !defined(LZO_UNUSED_LABEL) 01586 # if (LZO_CC_WATCOMC) && defined(__cplusplus) 01587 # define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l 01588 # elif (LZO_CC_INTELC || LZO_CC_WATCOMC) 01589 # define LZO_UNUSED_LABEL(l) if (0) goto l 01590 # else 01591 # define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l 01592 # endif 01593 #endif 01594 #if !defined(LZO_DEFINE_UNINITIALIZED_VAR) 01595 # if 0 01596 # define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var 01597 # elif 0 && (LZO_CC_GNUC) 01598 # define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var 01599 # else 01600 # define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init 01601 # endif 01602 #endif 01603 #if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) 01604 # if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) 01605 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; 01606 # elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 01607 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; 01608 # elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 01609 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; 01610 # else 01611 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; 01612 # endif 01613 #endif 01614 #if !defined(LZO_COMPILE_TIME_ASSERT) 01615 # if (LZO_CC_AZTECC) 01616 # define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} 01617 # elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 01618 # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 01619 # elif (LZO_CC_MSC && (_MSC_VER < 900)) 01620 # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 01621 # elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 01622 # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 01623 # else 01624 # define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} 01625 # endif 01626 #endif 01627 #if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) 01628 # if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) 01629 # elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 01630 # define __lzo_cdecl __cdecl 01631 # define __lzo_cdecl_atexit 01632 # define __lzo_cdecl_main __cdecl 01633 # if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 01634 # define __lzo_cdecl_qsort __pascal 01635 # elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 01636 # define __lzo_cdecl_qsort _stdcall 01637 # else 01638 # define __lzo_cdecl_qsort __cdecl 01639 # endif 01640 # elif (LZO_CC_WATCOMC) 01641 # define __lzo_cdecl __cdecl 01642 # else 01643 # define __lzo_cdecl __cdecl 01644 # define __lzo_cdecl_atexit __cdecl 01645 # define __lzo_cdecl_main __cdecl 01646 # define __lzo_cdecl_qsort __cdecl 01647 # endif 01648 # if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) 01649 # elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 01650 # define __lzo_cdecl_sighandler __pascal 01651 # elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 01652 # define __lzo_cdecl_sighandler _stdcall 01653 # elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) 01654 # define __lzo_cdecl_sighandler __clrcall 01655 # elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) 01656 # if defined(_DLL) 01657 # define __lzo_cdecl_sighandler _far _cdecl _loadds 01658 # elif defined(_MT) 01659 # define __lzo_cdecl_sighandler _far _cdecl 01660 # else 01661 # define __lzo_cdecl_sighandler _cdecl 01662 # endif 01663 # else 01664 # define __lzo_cdecl_sighandler __cdecl 01665 # endif 01666 #elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) 01667 # define __lzo_cdecl __cdecl 01668 #elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) 01669 # define __lzo_cdecl cdecl 01670 #endif 01671 #if !defined(__lzo_cdecl) 01672 # define __lzo_cdecl 01673 #endif 01674 #if !defined(__lzo_cdecl_atexit) 01675 # define __lzo_cdecl_atexit 01676 #endif 01677 #if !defined(__lzo_cdecl_main) 01678 # define __lzo_cdecl_main 01679 #endif 01680 #if !defined(__lzo_cdecl_qsort) 01681 # define __lzo_cdecl_qsort 01682 #endif 01683 #if !defined(__lzo_cdecl_sighandler) 01684 # define __lzo_cdecl_sighandler 01685 #endif 01686 #if !defined(__lzo_cdecl_va) 01687 # define __lzo_cdecl_va __lzo_cdecl 01688 #endif 01689 #if !defined(LZO_CFG_NO_WINDOWS_H) 01690 #if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) 01691 # if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) 01692 # elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) 01693 # elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) 01694 # else 01695 # define LZO_HAVE_WINDOWS_H 1 01696 # endif 01697 #endif 01698 #endif 01699 #if (LZO_ARCH_ALPHA) 01700 # define LZO_OPT_AVOID_UINT_INDEX 1 01701 # define LZO_OPT_AVOID_SHORT 1 01702 # define LZO_OPT_AVOID_USHORT 1 01703 #elif (LZO_ARCH_AMD64) 01704 # define LZO_OPT_AVOID_INT_INDEX 1 01705 # define LZO_OPT_AVOID_UINT_INDEX 1 01706 # define LZO_OPT_UNALIGNED16 1 01707 # define LZO_OPT_UNALIGNED32 1 01708 # define LZO_OPT_UNALIGNED64 1 01709 #elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) 01710 #elif (LZO_ARCH_ARM) 01711 # define LZO_OPT_AVOID_SHORT 1 01712 # define LZO_OPT_AVOID_USHORT 1 01713 #elif (LZO_ARCH_CRIS) 01714 # define LZO_OPT_UNALIGNED16 1 01715 # define LZO_OPT_UNALIGNED32 1 01716 #elif (LZO_ARCH_I386) 01717 # define LZO_OPT_UNALIGNED16 1 01718 # define LZO_OPT_UNALIGNED32 1 01719 #elif (LZO_ARCH_IA64) 01720 # define LZO_OPT_AVOID_INT_INDEX 1 01721 # define LZO_OPT_AVOID_UINT_INDEX 1 01722 # define LZO_OPT_PREFER_POSTINC 1 01723 #elif (LZO_ARCH_M68K) 01724 # define LZO_OPT_PREFER_POSTINC 1 01725 # define LZO_OPT_PREFER_PREDEC 1 01726 # if defined(__mc68020__) && !defined(__mcoldfire__) 01727 # define LZO_OPT_UNALIGNED16 1 01728 # define LZO_OPT_UNALIGNED32 1 01729 # endif 01730 #elif (LZO_ARCH_MIPS) 01731 # define LZO_OPT_AVOID_UINT_INDEX 1 01732 #elif (LZO_ARCH_POWERPC) 01733 # define LZO_OPT_PREFER_PREINC 1 01734 # define LZO_OPT_PREFER_PREDEC 1 01735 # if defined(LZO_ABI_BIG_ENDIAN) 01736 # define LZO_OPT_UNALIGNED16 1 01737 # define LZO_OPT_UNALIGNED32 1 01738 # endif 01739 #elif (LZO_ARCH_S390) 01740 # define LZO_OPT_UNALIGNED16 1 01741 # define LZO_OPT_UNALIGNED32 1 01742 # if (LZO_SIZEOF_SIZE_T == 8) 01743 # define LZO_OPT_UNALIGNED64 1 01744 # endif 01745 #elif (LZO_ARCH_SH) 01746 # define LZO_OPT_PREFER_POSTINC 1 01747 # define LZO_OPT_PREFER_PREDEC 1 01748 #endif 01749 #if !defined(LZO_CFG_NO_INLINE_ASM) 01750 #if defined(LZO_CC_LLVM) 01751 # define LZO_CFG_NO_INLINE_ASM 1 01752 #endif 01753 #endif 01754 #if !defined(LZO_CFG_NO_UNALIGNED) 01755 #if defined(LZO_ABI_NEUTRAL_ENDIAN) || defined(LZO_ARCH_GENERIC) 01756 # define LZO_CFG_NO_UNALIGNED 1 01757 #endif 01758 #endif 01759 #if defined(LZO_CFG_NO_UNALIGNED) 01760 # undef LZO_OPT_UNALIGNED16 01761 # undef LZO_OPT_UNALIGNED32 01762 # undef LZO_OPT_UNALIGNED64 01763 #endif 01764 #if defined(LZO_CFG_NO_INLINE_ASM) 01765 #elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 01766 # define LZO_ASM_SYNTAX_MSC 1 01767 #elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 01768 #elif (LZO_ARCH_I386 && (LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 01769 # define LZO_ASM_SYNTAX_GNUC 1 01770 #elif (LZO_ARCH_AMD64 && (LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 01771 # define LZO_ASM_SYNTAX_GNUC 1 01772 #endif 01773 #if (LZO_ASM_SYNTAX_GNUC) 01774 #if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) 01775 # define __LZO_ASM_CLOBBER "ax" 01776 #elif (LZO_CC_INTELC) 01777 # define __LZO_ASM_CLOBBER "memory" 01778 #else 01779 # define __LZO_ASM_CLOBBER "cc", "memory" 01780 #endif 01781 #endif 01782 #if defined(__LZO_INFOSTR_MM) 01783 #elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) 01784 # define __LZO_INFOSTR_MM "" 01785 #elif defined(LZO_INFO_MM) 01786 # define __LZO_INFOSTR_MM "." LZO_INFO_MM 01787 #else 01788 # define __LZO_INFOSTR_MM "" 01789 #endif 01790 #if defined(__LZO_INFOSTR_PM) 01791 #elif defined(LZO_INFO_ABI_PM) 01792 # define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM 01793 #else 01794 # define __LZO_INFOSTR_PM "" 01795 #endif 01796 #if defined(__LZO_INFOSTR_ENDIAN) 01797 #elif defined(LZO_INFO_ABI_ENDIAN) 01798 # define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN 01799 #else 01800 # define __LZO_INFOSTR_ENDIAN "" 01801 #endif 01802 #if defined(__LZO_INFOSTR_OSNAME) 01803 #elif defined(LZO_INFO_OS_CONSOLE) 01804 # define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE 01805 #elif defined(LZO_INFO_OS_POSIX) 01806 # define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX 01807 #else 01808 # define __LZO_INFOSTR_OSNAME LZO_INFO_OS 01809 #endif 01810 #if defined(__LZO_INFOSTR_LIBC) 01811 #elif defined(LZO_INFO_LIBC) 01812 # define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC 01813 #else 01814 # define __LZO_INFOSTR_LIBC "" 01815 #endif 01816 #if defined(__LZO_INFOSTR_CCVER) 01817 #elif defined(LZO_INFO_CCVER) 01818 # define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER 01819 #else 01820 # define __LZO_INFOSTR_CCVER "" 01821 #endif 01822 #define LZO_INFO_STRING \ 01823 LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ 01824 " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER 01825 01826 #endif 01827 01828 #endif 01829 01830 #undef LZO_HAVE_CONFIG_H 01831 #include "minilzo.h" 01832 01833 #if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2030) 01834 # error "version mismatch in miniLZO source files" 01835 #endif 01836 01837 #ifdef MINILZO_HAVE_CONFIG_H 01838 # define LZO_HAVE_CONFIG_H 01839 #endif 01840 01841 #ifndef __LZO_CONF_H 01842 #define __LZO_CONF_H 01843 01844 #if !defined(__LZO_IN_MINILZO) 01845 #if defined(LZO_CFG_FREESTANDING) 01846 # define LZO_LIBC_FREESTANDING 1 01847 # define LZO_OS_FREESTANDING 1 01848 # define ACC_LIBC_FREESTANDING 1 01849 # define ACC_OS_FREESTANDING 1 01850 #endif 01851 #if defined(LZO_CFG_NO_UNALIGNED) 01852 # define ACC_CFG_NO_UNALIGNED 1 01853 #endif 01854 #if defined(LZO_ARCH_GENERIC) 01855 # define ACC_ARCH_GENERIC 1 01856 #endif 01857 #if defined(LZO_ABI_NEUTRAL_ENDIAN) 01858 # define ACC_ABI_NEUTRAL_ENDIAN 1 01859 #endif 01860 #if defined(LZO_HAVE_CONFIG_H) 01861 # define ACC_CONFIG_NO_HEADER 1 01862 #endif 01863 #if defined(LZO_CFG_EXTRA_CONFIG_HEADER) 01864 # include LZO_CFG_EXTRA_CONFIG_HEADER 01865 #endif 01866 #if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) 01867 # error "include this file first" 01868 #endif 01869 #include "lzo/lzoconf.h" 01870 #endif 01871 01872 #if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED) 01873 # error "version mismatch" 01874 #endif 01875 01876 #if (LZO_CC_BORLANDC && LZO_ARCH_I086) 01877 # pragma option -h 01878 #endif 01879 01880 #if (LZO_CC_MSC && (_MSC_VER >= 1000)) 01881 # pragma warning(disable: 4127 4701) 01882 #endif 01883 #if (LZO_CC_MSC && (_MSC_VER >= 1300)) 01884 # pragma warning(disable: 4820) 01885 # pragma warning(disable: 4514 4710 4711) 01886 #endif 01887 01888 #if (LZO_CC_SUNPROC) 01889 # pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) 01890 # pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) 01891 #endif 01892 01893 #if defined(__LZO_MMODEL_HUGE) && (!LZO_HAVE_MM_HUGE_PTR) 01894 # error "this should not happen - check defines for __huge" 01895 #endif 01896 01897 #if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING) 01898 #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 01899 # define ACC_WANT_ACC_INCD_H 1 01900 # define ACC_WANT_ACC_INCE_H 1 01901 # define ACC_WANT_ACC_INCI_H 1 01902 #elif 1 01903 # include <string.h> 01904 #else 01905 # define ACC_WANT_ACC_INCD_H 1 01906 #endif 01907 01908 #if (LZO_ARCH_I086) 01909 # define ACC_MM_AHSHIFT LZO_MM_AHSHIFT 01910 # define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) 01911 # define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) 01912 # define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) 01913 #endif 01914 01915 #if !defined(lzo_uintptr_t) 01916 # if defined(__LZO_MMODEL_HUGE) 01917 # define lzo_uintptr_t unsigned long 01918 # elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16) 01919 # define __LZO_UINTPTR_T_IS_POINTER 1 01920 typedef char* lzo_uintptr_t; 01921 # define lzo_uintptr_t lzo_uintptr_t 01922 # elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P) 01923 # define lzo_uintptr_t size_t 01924 # elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P) 01925 # define lzo_uintptr_t unsigned long 01926 # elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P) 01927 # define lzo_uintptr_t unsigned int 01928 # elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P) 01929 # define lzo_uintptr_t unsigned long long 01930 # else 01931 # define lzo_uintptr_t size_t 01932 # endif 01933 #endif 01934 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 01935 01936 #if 1 && !defined(LZO_CFG_FREESTANDING) 01937 #if 1 && !defined(HAVE_STRING_H) 01938 #define HAVE_STRING_H 1 01939 #endif 01940 #if 1 && !defined(HAVE_MEMCMP) 01941 #define HAVE_MEMCMP 1 01942 #endif 01943 #if 1 && !defined(HAVE_MEMCPY) 01944 #define HAVE_MEMCPY 1 01945 #endif 01946 #if 1 && !defined(HAVE_MEMMOVE) 01947 #define HAVE_MEMMOVE 1 01948 #endif 01949 #if 1 && !defined(HAVE_MEMSET) 01950 #define HAVE_MEMSET 1 01951 #endif 01952 #endif 01953 01954 #if 1 && defined(HAVE_STRING_H) 01955 #include <string.h> 01956 #endif 01957 01958 #if defined(LZO_CFG_FREESTANDING) 01959 # undef HAVE_MEMCMP 01960 # undef HAVE_MEMCPY 01961 # undef HAVE_MEMMOVE 01962 # undef HAVE_MEMSET 01963 #endif 01964 01965 #if !defined(HAVE_MEMCMP) 01966 # undef memcmp 01967 # define memcmp(a,b,c) lzo_memcmp(a,b,c) 01968 #elif !defined(__LZO_MMODEL_HUGE) 01969 # define lzo_memcmp(a,b,c) memcmp(a,b,c) 01970 #endif 01971 #if !defined(HAVE_MEMCPY) 01972 # undef memcpy 01973 # define memcpy(a,b,c) lzo_memcpy(a,b,c) 01974 #elif !defined(__LZO_MMODEL_HUGE) 01975 # define lzo_memcpy(a,b,c) memcpy(a,b,c) 01976 #endif 01977 #if !defined(HAVE_MEMMOVE) 01978 # undef memmove 01979 # define memmove(a,b,c) lzo_memmove(a,b,c) 01980 #elif !defined(__LZO_MMODEL_HUGE) 01981 # define lzo_memmove(a,b,c) memmove(a,b,c) 01982 #endif 01983 #if !defined(HAVE_MEMSET) 01984 # undef memset 01985 # define memset(a,b,c) lzo_memset(a,b,c) 01986 #elif !defined(__LZO_MMODEL_HUGE) 01987 # define lzo_memset(a,b,c) memset(a,b,c) 01988 #endif 01989 01990 #undef NDEBUG 01991 #if defined(LZO_CFG_FREESTANDING) 01992 # undef LZO_DEBUG 01993 # define NDEBUG 1 01994 # undef assert 01995 # define assert(e) ((void)0) 01996 #else 01997 # if !defined(LZO_DEBUG) 01998 # define NDEBUG 1 01999 # endif 02000 # include <assert.h> 02001 #endif 02002 02003 #if 0 && defined(__BOUNDS_CHECKING_ON) 02004 # include <unchecked.h> 02005 #else 02006 # define BOUNDS_CHECKING_OFF_DURING(stmt) stmt 02007 # define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) 02008 #endif 02009 02010 #if !defined(__lzo_inline) 02011 # define __lzo_inline 02012 #endif 02013 #if !defined(__lzo_forceinline) 02014 # define __lzo_forceinline 02015 #endif 02016 #if !defined(__lzo_noinline) 02017 # define __lzo_noinline 02018 #endif 02019 02020 #if 1 02021 # define LZO_BYTE(x) ((unsigned char) (x)) 02022 #else 02023 # define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) 02024 #endif 02025 02026 #define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) 02027 #define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) 02028 #define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) 02029 #define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) 02030 02031 #define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) 02032 02033 #define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) 02034 02035 #define LZO_SIZE(bits) (1u << (bits)) 02036 #define LZO_MASK(bits) (LZO_SIZE(bits) - 1) 02037 02038 #define LZO_LSIZE(bits) (1ul << (bits)) 02039 #define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1) 02040 02041 #define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) 02042 #define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) 02043 02044 #if !defined(DMUL) 02045 #if 0 02046 02047 # define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b))) 02048 #else 02049 # define DMUL(a,b) ((lzo_xint) ((a) * (b))) 02050 #endif 02051 #endif 02052 02053 #if 1 && !defined(LZO_CFG_NO_UNALIGNED) 02054 #if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386) 02055 # if (LZO_SIZEOF_SHORT == 2) 02056 # define LZO_UNALIGNED_OK_2 02057 # endif 02058 # if (LZO_SIZEOF_INT == 4) 02059 # define LZO_UNALIGNED_OK_4 02060 # endif 02061 #endif 02062 #endif 02063 02064 #if defined(LZO_UNALIGNED_OK_2) 02065 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(short) == 2) 02066 #endif 02067 #if defined(LZO_UNALIGNED_OK_4) 02068 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) 02069 #elif defined(LZO_ALIGNED_OK_4) 02070 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) 02071 #endif 02072 02073 #define MEMCPY8_DS(dest,src,len) \ 02074 lzo_memcpy(dest,src,len); dest += len; src += len 02075 02076 #define BZERO8_PTR(s,l,n) \ 02077 lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) 02078 02079 #define MEMCPY_DS(dest,src,len) \ 02080 do *dest++ = *src++; while (--len > 0) 02081 02082 __LZO_EXTERN_C int __lzo_init_done; 02083 __LZO_EXTERN_C const char __lzo_copyright[]; 02084 LZO_EXTERN(const lzo_bytep) lzo_copyright(void); 02085 02086 #ifndef __LZO_PTR_H 02087 #define __LZO_PTR_H 02088 02089 #ifdef __cplusplus 02090 extern "C" { 02091 #endif 02092 02093 #if !defined(lzo_uintptr_t) 02094 # if defined(__LZO_MMODEL_HUGE) 02095 # define lzo_uintptr_t unsigned long 02096 # else 02097 # define lzo_uintptr_t acc_uintptr_t 02098 # ifdef __ACC_INTPTR_T_IS_POINTER 02099 # define __LZO_UINTPTR_T_IS_POINTER 1 02100 # endif 02101 # endif 02102 #endif 02103 02104 #if (LZO_ARCH_I086) 02105 #define PTR(a) ((lzo_bytep) (a)) 02106 #define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0) 02107 #define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0) 02108 #elif (LZO_MM_PVP) 02109 #define PTR(a) ((lzo_bytep) (a)) 02110 #define PTR_ALIGNED_8(a) ((((lzo_uintptr_t)(a)) >> 61) == 0) 02111 #define PTR_ALIGNED2_8(a,b) ((((lzo_uintptr_t)(a)|(lzo_uintptr_t)(b)) >> 61) == 0) 02112 #else 02113 #define PTR(a) ((lzo_uintptr_t) (a)) 02114 #define PTR_LINEAR(a) PTR(a) 02115 #define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) 02116 #define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) 02117 #define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) 02118 #define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) 02119 #endif 02120 02121 #define PTR_LT(a,b) (PTR(a) < PTR(b)) 02122 #define PTR_GE(a,b) (PTR(a) >= PTR(b)) 02123 #define PTR_DIFF(a,b) (PTR(a) - PTR(b)) 02124 #define pd(a,b) ((lzo_uint) ((a)-(b))) 02125 02126 LZO_EXTERN(lzo_uintptr_t) 02127 __lzo_ptr_linear(const lzo_voidp ptr); 02128 02129 typedef union 02130 { 02131 char a_char; 02132 unsigned char a_uchar; 02133 short a_short; 02134 unsigned short a_ushort; 02135 int a_int; 02136 unsigned int a_uint; 02137 long a_long; 02138 unsigned long a_ulong; 02139 lzo_int a_lzo_int; 02140 lzo_uint a_lzo_uint; 02141 lzo_int32 a_lzo_int32; 02142 lzo_uint32 a_lzo_uint32; 02143 ptrdiff_t a_ptrdiff_t; 02144 lzo_uintptr_t a_lzo_uintptr_t; 02145 lzo_voidp a_lzo_voidp; 02146 void * a_void_p; 02147 lzo_bytep a_lzo_bytep; 02148 lzo_bytepp a_lzo_bytepp; 02149 lzo_uintp a_lzo_uintp; 02150 lzo_uint * a_lzo_uint_p; 02151 lzo_uint32p a_lzo_uint32p; 02152 lzo_uint32 * a_lzo_uint32_p; 02153 unsigned char * a_uchar_p; 02154 char * a_char_p; 02155 } 02156 lzo_full_align_t; 02157 02158 #ifdef __cplusplus 02159 } 02160 #endif 02161 02162 #endif 02163 02164 #define LZO_DETERMINISTIC 02165 02166 #define LZO_DICT_USE_PTR 02167 #if 0 && (LZO_ARCH_I086) 02168 # undef LZO_DICT_USE_PTR 02169 #endif 02170 02171 #if defined(LZO_DICT_USE_PTR) 02172 # define lzo_dict_t const lzo_bytep 02173 # define lzo_dict_p lzo_dict_t __LZO_MMODEL * 02174 #else 02175 # define lzo_dict_t lzo_uint 02176 # define lzo_dict_p lzo_dict_t __LZO_MMODEL * 02177 #endif 02178 02179 #endif 02180 02181 #if !defined(MINILZO_CFG_SKIP_LZO_PTR) 02182 02183 LZO_PUBLIC(lzo_uintptr_t) 02184 __lzo_ptr_linear(const lzo_voidp ptr) 02185 { 02186 lzo_uintptr_t p; 02187 02188 #if (LZO_ARCH_I086) 02189 p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr)); 02190 #elif (LZO_MM_PVP) 02191 p = (lzo_uintptr_t) (ptr); 02192 p = (p << 3) | (p >> 61); 02193 #else 02194 p = (lzo_uintptr_t) PTR_LINEAR(ptr); 02195 #endif 02196 02197 return p; 02198 } 02199 02200 LZO_PUBLIC(unsigned) 02201 __lzo_align_gap(const lzo_voidp ptr, lzo_uint size) 02202 { 02203 #if defined(__LZO_UINTPTR_T_IS_POINTER) 02204 size_t n = (size_t) ptr; 02205 n = (((n + size - 1) / size) * size) - n; 02206 #else 02207 lzo_uintptr_t p, n; 02208 p = __lzo_ptr_linear(ptr); 02209 n = (((p + size - 1) / size) * size) - p; 02210 #endif 02211 02212 assert(size > 0); 02213 assert((long)n >= 0); 02214 assert(n <= size); 02215 return (unsigned)n; 02216 } 02217 02218 #endif 02219 02220 /* If you use the LZO library in a product, I would appreciate that you 02221 * keep this copyright string in the executable of your product. 02222 */ 02223 02224 const char __lzo_copyright[] = 02225 #if !defined(__LZO_IN_MINLZO) 02226 LZO_VERSION_STRING; 02227 #else 02228 "\r\n\n" 02229 "LZO data compression library.\n" 02230 "$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Markus Franz Xaver Johannes Oberhumer\n" 02231 "<markus@oberhumer.com>\n" 02232 "http://www.oberhumer.com $\n\n" 02233 "$Id$\n" 02234 "$Built: " __DATE__ " " __TIME__ " $\n" 02235 "$Info: " LZO_INFO_STRING " $\n"; 02236 #endif 02237 02238 LZO_PUBLIC(const lzo_bytep) 02239 lzo_copyright(void) 02240 { 02241 #if (LZO_OS_DOS16 && LZO_CC_TURBOC) 02242 return (lzo_voidp) __lzo_copyright; 02243 #else 02244 return (const lzo_bytep) __lzo_copyright; 02245 #endif 02246 } 02247 02248 LZO_PUBLIC(unsigned) 02249 lzo_version(void) 02250 { 02251 return LZO_VERSION; 02252 } 02253 02254 LZO_PUBLIC(const char *) 02255 lzo_version_string(void) 02256 { 02257 return LZO_VERSION_STRING; 02258 } 02259 02260 LZO_PUBLIC(const char *) 02261 lzo_version_date(void) 02262 { 02263 return LZO_VERSION_DATE; 02264 } 02265 02266 LZO_PUBLIC(const lzo_charp) 02267 _lzo_version_string(void) 02268 { 02269 return LZO_VERSION_STRING; 02270 } 02271 02272 LZO_PUBLIC(const lzo_charp) 02273 _lzo_version_date(void) 02274 { 02275 return LZO_VERSION_DATE; 02276 } 02277 02278 #define LZO_BASE 65521u 02279 #define LZO_NMAX 5552 02280 02281 #define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1 02282 #define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); 02283 #define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); 02284 #define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); 02285 #define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); 02286 02287 LZO_PUBLIC(lzo_uint32) 02288 lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len) 02289 { 02290 lzo_uint32 s1 = adler & 0xffff; 02291 lzo_uint32 s2 = (adler >> 16) & 0xffff; 02292 unsigned k; 02293 02294 if (buf == NULL) 02295 return 1; 02296 02297 while (len > 0) 02298 { 02299 k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX; 02300 len -= k; 02301 if (k >= 16) do 02302 { 02303 LZO_DO16(buf,0); 02304 buf += 16; 02305 k -= 16; 02306 } while (k >= 16); 02307 if (k != 0) do 02308 { 02309 s1 += *buf++; 02310 s2 += s1; 02311 } while (--k > 0); 02312 s1 %= LZO_BASE; 02313 s2 %= LZO_BASE; 02314 } 02315 return (s2 << 16) | s1; 02316 } 02317 02318 #undef LZO_DO1 02319 #undef LZO_DO2 02320 #undef LZO_DO4 02321 #undef LZO_DO8 02322 #undef LZO_DO16 02323 02324 #if !defined(MINILZO_CFG_SKIP_LZO_STRING) 02325 #undef lzo_memcmp 02326 #undef lzo_memcpy 02327 #undef lzo_memmove 02328 #undef lzo_memset 02329 #if !defined(__LZO_MMODEL_HUGE) 02330 # undef LZO_HAVE_MM_HUGE_PTR 02331 #endif 02332 #define lzo_hsize_t lzo_uint 02333 #define lzo_hvoid_p lzo_voidp 02334 #define lzo_hbyte_p lzo_bytep 02335 #define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f 02336 #define lzo_hmemcmp lzo_memcmp 02337 #define lzo_hmemcpy lzo_memcpy 02338 #define lzo_hmemmove lzo_memmove 02339 #define lzo_hmemset lzo_memset 02340 #define __LZOLIB_HMEMCPY_CH_INCLUDED 1 02341 #if !defined(LZOLIB_PUBLIC) 02342 # define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) 02343 #endif 02344 LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) 02345 { 02346 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCMP) 02347 const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1; 02348 const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2; 02349 if __lzo_likely(len > 0) do 02350 { 02351 int d = *p1 - *p2; 02352 if (d != 0) 02353 return d; 02354 p1++; p2++; 02355 } while __lzo_likely(--len > 0); 02356 return 0; 02357 #else 02358 return memcmp(s1, s2, len); 02359 #endif 02360 } 02361 LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 02362 { 02363 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCPY) 02364 lzo_hbyte_p p1 = (lzo_hbyte_p) dest; 02365 const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; 02366 if (!(len > 0) || p1 == p2) 02367 return dest; 02368 do 02369 *p1++ = *p2++; 02370 while __lzo_likely(--len > 0); 02371 return dest; 02372 #else 02373 return memcpy(dest, src, len); 02374 #endif 02375 } 02376 LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 02377 { 02378 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMMOVE) 02379 lzo_hbyte_p p1 = (lzo_hbyte_p) dest; 02380 const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; 02381 if (!(len > 0) || p1 == p2) 02382 return dest; 02383 if (p1 < p2) 02384 { 02385 do 02386 *p1++ = *p2++; 02387 while __lzo_likely(--len > 0); 02388 } 02389 else 02390 { 02391 p1 += len; 02392 p2 += len; 02393 do 02394 *--p1 = *--p2; 02395 while __lzo_likely(--len > 0); 02396 } 02397 return dest; 02398 #else 02399 return memmove(dest, src, len); 02400 #endif 02401 } 02402 LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len) 02403 { 02404 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMSET) 02405 lzo_hbyte_p p = (lzo_hbyte_p) s; 02406 if __lzo_likely(len > 0) do 02407 *p++ = (unsigned char) c; 02408 while __lzo_likely(--len > 0); 02409 return s; 02410 #else 02411 return memset(s, c, len); 02412 #endif 02413 } 02414 #undef LZOLIB_PUBLIC 02415 #endif 02416 02417 #if !defined(__LZO_IN_MINILZO) 02418 02419 #define ACC_WANT_ACC_CHK_CH 1 02420 #undef ACCCHK_ASSERT 02421 02422 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int) 02423 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint) 02424 02425 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32) 02426 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32) 02427 ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0) 02428 ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4) 02429 02430 #if !defined(__LZO_UINTPTR_T_IS_POINTER) 02431 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) 02432 #endif 02433 ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 02434 02435 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint) 02436 ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32)) 02437 ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint)) 02438 ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint)) 02439 02440 #endif 02441 #undef ACCCHK_ASSERT 02442 02443 LZO_PUBLIC(int) 02444 _lzo_config_check(void) 02445 { 02446 lzo_bool r = 1; 02447 union { unsigned char c[2*sizeof(lzo_xint)]; lzo_xint l[2]; } u; 02448 lzo_uintptr_t p; 02449 02450 #if !defined(LZO_CFG_NO_CONFIG_CHECK) 02451 #if defined(LZO_ABI_BIG_ENDIAN) 02452 u.l[0] = u.l[1] = 0; u.c[sizeof(lzo_xint) - 1] = 128; 02453 r &= (u.l[0] == 128); 02454 #endif 02455 #if defined(LZO_ABI_LITTLE_ENDIAN) 02456 u.l[0] = u.l[1] = 0; u.c[0] = 128; 02457 r &= (u.l[0] == 128); 02458 #endif 02459 #if defined(LZO_UNALIGNED_OK_2) 02460 p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; 02461 u.l[0] = u.l[1] = 0; 02462 r &= ((* (const lzo_ushortp) (p+1)) == 0); 02463 #endif 02464 #if defined(LZO_UNALIGNED_OK_4) 02465 p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; 02466 u.l[0] = u.l[1] = 0; 02467 r &= ((* (const lzo_uint32p) (p+1)) == 0); 02468 #endif 02469 #endif 02470 02471 LZO_UNUSED(u); LZO_UNUSED(p); 02472 return r == 1 ? LZO_E_OK : LZO_E_ERROR; 02473 } 02474 02475 int __lzo_init_done = 0; 02476 02477 LZO_PUBLIC(int) 02478 __lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5, 02479 int s6, int s7, int s8, int s9) 02480 { 02481 int r; 02482 02483 #if defined(__LZO_IN_MINILZO) 02484 #elif (LZO_CC_MSC && ((_MSC_VER) < 700)) 02485 #else 02486 #define ACC_WANT_ACC_CHK_CH 1 02487 #undef ACCCHK_ASSERT 02488 #define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) 02489 #endif 02490 #undef ACCCHK_ASSERT 02491 02492 __lzo_init_done = 1; 02493 02494 if (v == 0) 02495 return LZO_E_ERROR; 02496 02497 r = (s1 == -1 || s1 == (int) sizeof(short)) && 02498 (s2 == -1 || s2 == (int) sizeof(int)) && 02499 (s3 == -1 || s3 == (int) sizeof(long)) && 02500 (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) && 02501 (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && 02502 (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && 02503 (s7 == -1 || s7 == (int) sizeof(char *)) && 02504 (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && 02505 (s9 == -1 || s9 == (int) sizeof(lzo_callback_t)); 02506 if (!r) 02507 return LZO_E_ERROR; 02508 02509 r = _lzo_config_check(); 02510 if (r != LZO_E_OK) 02511 return r; 02512 02513 return r; 02514 } 02515 02516 #if !defined(__LZO_IN_MINILZO) 02517 02518 #if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD) 02519 02520 #if 0 02521 BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment, 02522 WORD wHeapSize, LPSTR lpszCmdLine ) 02523 #else 02524 int __far __pascal LibMain ( int a, short b, short c, long d ) 02525 #endif 02526 { 02527 LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d); 02528 return 1; 02529 } 02530 02531 #endif 02532 02533 #endif 02534 02535 #define do_compress _lzo1x_1_do_compress 02536 02537 #if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS) 02538 02539 #define LZO_NEED_DICT_H 02540 #define D_BITS 14 02541 #define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) 02542 #define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) 02543 02544 #ifndef __LZO_CONFIG1X_H 02545 #define __LZO_CONFIG1X_H 02546 02547 #if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) 02548 # define LZO1X 02549 #endif 02550 02551 #if !defined(__LZO_IN_MINILZO) 02552 #include "lzo/lzo1x.h" 02553 #endif 02554 02555 #define LZO_EOF_CODE 02556 #undef LZO_DETERMINISTIC 02557 02558 #define M1_MAX_OFFSET 0x0400 02559 #ifndef M2_MAX_OFFSET 02560 #define M2_MAX_OFFSET 0x0800 02561 #endif 02562 #define M3_MAX_OFFSET 0x4000 02563 #define M4_MAX_OFFSET 0xbfff 02564 02565 #define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) 02566 02567 #define M1_MIN_LEN 2 02568 #define M1_MAX_LEN 2 02569 #define M2_MIN_LEN 3 02570 #ifndef M2_MAX_LEN 02571 #define M2_MAX_LEN 8 02572 #endif 02573 #define M3_MIN_LEN 3 02574 #define M3_MAX_LEN 33 02575 #define M4_MIN_LEN 3 02576 #define M4_MAX_LEN 9 02577 02578 #define M1_MARKER 0 02579 #define M2_MARKER 64 02580 #define M3_MARKER 32 02581 #define M4_MARKER 16 02582 02583 #ifndef MIN_LOOKAHEAD 02584 #define MIN_LOOKAHEAD (M2_MAX_LEN + 1) 02585 #endif 02586 02587 #if defined(LZO_NEED_DICT_H) 02588 02589 #ifndef LZO_HASH 02590 #define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B 02591 #endif 02592 #define DL_MIN_LEN M2_MIN_LEN 02593 02594 #ifndef __LZO_DICT_H 02595 #define __LZO_DICT_H 02596 02597 #ifdef __cplusplus 02598 extern "C" { 02599 #endif 02600 02601 #if !defined(D_BITS) && defined(DBITS) 02602 # define D_BITS DBITS 02603 #endif 02604 #if !defined(D_BITS) 02605 # error "D_BITS is not defined" 02606 #endif 02607 #if (D_BITS < 16) 02608 # define D_SIZE LZO_SIZE(D_BITS) 02609 # define D_MASK LZO_MASK(D_BITS) 02610 #else 02611 # define D_SIZE LZO_USIZE(D_BITS) 02612 # define D_MASK LZO_UMASK(D_BITS) 02613 #endif 02614 #define D_HIGH ((D_MASK >> 1) + 1) 02615 02616 #if !defined(DD_BITS) 02617 # define DD_BITS 0 02618 #endif 02619 #define DD_SIZE LZO_SIZE(DD_BITS) 02620 #define DD_MASK LZO_MASK(DD_BITS) 02621 02622 #if !defined(DL_BITS) 02623 # define DL_BITS (D_BITS - DD_BITS) 02624 #endif 02625 #if (DL_BITS < 16) 02626 # define DL_SIZE LZO_SIZE(DL_BITS) 02627 # define DL_MASK LZO_MASK(DL_BITS) 02628 #else 02629 # define DL_SIZE LZO_USIZE(DL_BITS) 02630 # define DL_MASK LZO_UMASK(DL_BITS) 02631 #endif 02632 02633 #if (D_BITS != DL_BITS + DD_BITS) 02634 # error "D_BITS does not match" 02635 #endif 02636 #if (D_BITS < 8 || D_BITS > 18) 02637 # error "invalid D_BITS" 02638 #endif 02639 #if (DL_BITS < 8 || DL_BITS > 20) 02640 # error "invalid DL_BITS" 02641 #endif 02642 #if (DD_BITS < 0 || DD_BITS > 6) 02643 # error "invalid DD_BITS" 02644 #endif 02645 02646 #if !defined(DL_MIN_LEN) 02647 # define DL_MIN_LEN 3 02648 #endif 02649 #if !defined(DL_SHIFT) 02650 # define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) 02651 #endif 02652 02653 #define LZO_HASH_GZIP 1 02654 #define LZO_HASH_GZIP_INCREMENTAL 2 02655 #define LZO_HASH_LZO_INCREMENTAL_A 3 02656 #define LZO_HASH_LZO_INCREMENTAL_B 4 02657 02658 #if !defined(LZO_HASH) 02659 # error "choose a hashing strategy" 02660 #endif 02661 02662 #undef DM 02663 #undef DX 02664 02665 #if (DL_MIN_LEN == 3) 02666 # define _DV2_A(p,shift1,shift2) \ 02667 (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) 02668 # define _DV2_B(p,shift1,shift2) \ 02669 (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) 02670 # define _DV3_B(p,shift1,shift2,shift3) \ 02671 ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) 02672 #elif (DL_MIN_LEN == 2) 02673 # define _DV2_A(p,shift1,shift2) \ 02674 (( (lzo_xint)(p[0]) << shift1) ^ p[1]) 02675 # define _DV2_B(p,shift1,shift2) \ 02676 (( (lzo_xint)(p[1]) << shift1) ^ p[2]) 02677 #else 02678 # error "invalid DL_MIN_LEN" 02679 #endif 02680 #define _DV_A(p,shift) _DV2_A(p,shift,shift) 02681 #define _DV_B(p,shift) _DV2_B(p,shift,shift) 02682 #define DA2(p,s1,s2) \ 02683 (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) 02684 #define DS2(p,s1,s2) \ 02685 (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) 02686 #define DX2(p,s1,s2) \ 02687 (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) 02688 #define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) 02689 #define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) 02690 #define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) 02691 #define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) 02692 #define DM(v) DMS(v,0) 02693 02694 #if (LZO_HASH == LZO_HASH_GZIP) 02695 # define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) 02696 02697 #elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) 02698 # define __LZO_HASH_INCREMENTAL 02699 # define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) 02700 # define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) 02701 # define _DINDEX(dv,p) (dv) 02702 # define DVAL_LOOKAHEAD DL_MIN_LEN 02703 02704 #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) 02705 # define __LZO_HASH_INCREMENTAL 02706 # define DVAL_FIRST(dv,p) dv = _DV_A((p),5) 02707 # define DVAL_NEXT(dv,p) \ 02708 dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) 02709 # define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 02710 # define DVAL_LOOKAHEAD DL_MIN_LEN 02711 02712 #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) 02713 # define __LZO_HASH_INCREMENTAL 02714 # define DVAL_FIRST(dv,p) dv = _DV_B((p),5) 02715 # define DVAL_NEXT(dv,p) \ 02716 dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) 02717 # define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 02718 # define DVAL_LOOKAHEAD DL_MIN_LEN 02719 02720 #else 02721 # error "choose a hashing strategy" 02722 #endif 02723 02724 #ifndef DINDEX 02725 #define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) 02726 #endif 02727 #if !defined(DINDEX1) && defined(D_INDEX1) 02728 #define DINDEX1 D_INDEX1 02729 #endif 02730 #if !defined(DINDEX2) && defined(D_INDEX2) 02731 #define DINDEX2 D_INDEX2 02732 #endif 02733 02734 #if !defined(__LZO_HASH_INCREMENTAL) 02735 # define DVAL_FIRST(dv,p) ((void) 0) 02736 # define DVAL_NEXT(dv,p) ((void) 0) 02737 # define DVAL_LOOKAHEAD 0 02738 #endif 02739 02740 #if !defined(DVAL_ASSERT) 02741 #if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) 02742 static void DVAL_ASSERT(lzo_xint dv, const lzo_bytep p) 02743 { 02744 lzo_xint df; 02745 DVAL_FIRST(df,(p)); 02746 assert(DINDEX(dv,p) == DINDEX(df,p)); 02747 } 02748 #else 02749 # define DVAL_ASSERT(dv,p) ((void) 0) 02750 #endif 02751 #endif 02752 02753 #if defined(LZO_DICT_USE_PTR) 02754 # define DENTRY(p,in) (p) 02755 # define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] 02756 #else 02757 # define DENTRY(p,in) ((lzo_uint) ((p)-(in))) 02758 # define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] 02759 #endif 02760 02761 #if (DD_BITS == 0) 02762 02763 # define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) 02764 # define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) 02765 # define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) 02766 02767 #else 02768 02769 # define UPDATE_D(dict,drun,dv,p,in) \ 02770 dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 02771 # define UPDATE_I(dict,drun,index,p,in) \ 02772 dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 02773 # define UPDATE_P(ptr,drun,p,in) \ 02774 (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK 02775 02776 #endif 02777 02778 #if defined(LZO_DICT_USE_PTR) 02779 02780 #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 02781 (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) 02782 02783 #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 02784 (BOUNDS_CHECKING_OFF_IN_EXPR(( \ 02785 m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ 02786 PTR_LT(m_pos,in) || \ 02787 (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) <= 0 || \ 02788 m_off > max_offset ))) 02789 02790 #else 02791 02792 #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 02793 (m_off == 0 || \ 02794 ((m_off = pd(ip, in) - m_off) > max_offset) || \ 02795 (m_pos = (ip) - (m_off), 0) ) 02796 02797 #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 02798 (pd(ip, in) <= m_off || \ 02799 ((m_off = pd(ip, in) - m_off) > max_offset) || \ 02800 (m_pos = (ip) - (m_off), 0) ) 02801 02802 #endif 02803 02804 #if defined(LZO_DETERMINISTIC) 02805 # define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET 02806 #else 02807 # define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET 02808 #endif 02809 02810 #ifdef __cplusplus 02811 } 02812 #endif 02813 02814 #endif 02815 02816 #endif 02817 02818 #endif 02819 02820 #define DO_COMPRESS lzo1x_1_compress 02821 02822 static __lzo_noinline lzo_uint 02823 do_compress ( const lzo_bytep in , lzo_uint in_len, 02824 lzo_bytep out, lzo_uintp out_len, 02825 lzo_voidp wrkmem ) 02826 { 02827 register const lzo_bytep ip; 02828 lzo_bytep op; 02829 const lzo_bytep const in_end = in + in_len; 02830 const lzo_bytep const ip_end = in + in_len - M2_MAX_LEN - 5; 02831 const lzo_bytep ii; 02832 lzo_dict_p const dict = (lzo_dict_p) wrkmem; 02833 02834 op = out; 02835 ip = in; 02836 ii = ip; 02837 02838 ip += 4; 02839 for (;;) 02840 { 02841 register const lzo_bytep m_pos; 02842 lzo_uint m_off; 02843 lzo_uint m_len; 02844 lzo_uint dindex; 02845 02846 DINDEX1(dindex,ip); 02847 GINDEX(m_pos,m_off,dict,dindex,in); 02848 if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 02849 goto literal; 02850 #if 1 02851 if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 02852 goto try_match; 02853 DINDEX2(dindex,ip); 02854 #endif 02855 GINDEX(m_pos,m_off,dict,dindex,in); 02856 if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 02857 goto literal; 02858 if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 02859 goto try_match; 02860 goto literal; 02861 02862 try_match: 02863 #if 1 && defined(LZO_UNALIGNED_OK_2) 02864 if (* (const lzo_ushortp) m_pos != * (const lzo_ushortp) ip) 02865 #else 02866 if (m_pos[0] != ip[0] || m_pos[1] != ip[1]) 02867 #endif 02868 { 02869 } 02870 else 02871 { 02872 if __lzo_likely(m_pos[2] == ip[2]) 02873 { 02874 #if 0 02875 if (m_off <= M2_MAX_OFFSET) 02876 goto match; 02877 if (lit <= 3) 02878 goto match; 02879 if (lit == 3) 02880 { 02881 assert(op - 2 > out); op[-2] |= LZO_BYTE(3); 02882 *op++ = *ii++; *op++ = *ii++; *op++ = *ii++; 02883 goto code_match; 02884 } 02885 if (m_pos[3] == ip[3]) 02886 #endif 02887 goto match; 02888 } 02889 else 02890 { 02891 #if 0 02892 #if 0 02893 if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3) 02894 #else 02895 if (m_off <= M1_MAX_OFFSET && lit == 3) 02896 #endif 02897 { 02898 register lzo_uint t; 02899 02900 t = lit; 02901 assert(op - 2 > out); op[-2] |= LZO_BYTE(t); 02902 do *op++ = *ii++; while (--t > 0); 02903 assert(ii == ip); 02904 m_off -= 1; 02905 *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2)); 02906 *op++ = LZO_BYTE(m_off >> 2); 02907 ip += 2; 02908 goto match_done; 02909 } 02910 #endif 02911 } 02912 } 02913 02914 literal: 02915 UPDATE_I(dict,0,dindex,ip,in); 02916 ++ip; 02917 if __lzo_unlikely(ip >= ip_end) 02918 break; 02919 continue; 02920 02921 match: 02922 UPDATE_I(dict,0,dindex,ip,in); 02923 if (pd(ip,ii) > 0) 02924 { 02925 register lzo_uint t = pd(ip,ii); 02926 02927 if (t <= 3) 02928 { 02929 assert(op - 2 > out); 02930 op[-2] |= LZO_BYTE(t); 02931 } 02932 else if (t <= 18) 02933 *op++ = LZO_BYTE(t - 3); 02934 else 02935 { 02936 register lzo_uint tt = t - 18; 02937 02938 *op++ = 0; 02939 while (tt > 255) 02940 { 02941 tt -= 255; 02942 *op++ = 0; 02943 } 02944 assert(tt > 0); 02945 *op++ = LZO_BYTE(tt); 02946 } 02947 do *op++ = *ii++; while (--t > 0); 02948 } 02949 02950 assert(ii == ip); 02951 ip += 3; 02952 if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ || 02953 m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++ 02954 #ifdef LZO1Y 02955 || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++ 02956 || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++ 02957 #endif 02958 ) 02959 { 02960 --ip; 02961 m_len = pd(ip, ii); 02962 assert(m_len >= 3); assert(m_len <= M2_MAX_LEN); 02963 02964 if (m_off <= M2_MAX_OFFSET) 02965 { 02966 m_off -= 1; 02967 #if defined(LZO1X) 02968 *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); 02969 *op++ = LZO_BYTE(m_off >> 3); 02970 #elif defined(LZO1Y) 02971 *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); 02972 *op++ = LZO_BYTE(m_off >> 2); 02973 #endif 02974 } 02975 else if (m_off <= M3_MAX_OFFSET) 02976 { 02977 m_off -= 1; 02978 *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); 02979 goto m3_m4_offset; 02980 } 02981 else 02982 #if defined(LZO1X) 02983 { 02984 m_off -= 0x4000; 02985 assert(m_off > 0); assert(m_off <= 0x7fff); 02986 *op++ = LZO_BYTE(M4_MARKER | 02987 ((m_off & 0x4000) >> 11) | (m_len - 2)); 02988 goto m3_m4_offset; 02989 } 02990 #elif defined(LZO1Y) 02991 goto m4_match; 02992 #endif 02993 } 02994 else 02995 { 02996 { 02997 const lzo_bytep end = in_end; 02998 const lzo_bytep m = m_pos + M2_MAX_LEN + 1; 02999 while (ip < end && *m == *ip) 03000 m++, ip++; 03001 m_len = pd(ip, ii); 03002 } 03003 assert(m_len > M2_MAX_LEN); 03004 03005 if (m_off <= M3_MAX_OFFSET) 03006 { 03007 m_off -= 1; 03008 if (m_len <= 33) 03009 *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); 03010 else 03011 { 03012 m_len -= 33; 03013 *op++ = M3_MARKER | 0; 03014 goto m3_m4_len; 03015 } 03016 } 03017 else 03018 { 03019 #if defined(LZO1Y) 03020 m4_match: 03021 #endif 03022 m_off -= 0x4000; 03023 assert(m_off > 0); assert(m_off <= 0x7fff); 03024 if (m_len <= M4_MAX_LEN) 03025 *op++ = LZO_BYTE(M4_MARKER | 03026 ((m_off & 0x4000) >> 11) | (m_len - 2)); 03027 else 03028 { 03029 m_len -= M4_MAX_LEN; 03030 *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11)); 03031 m3_m4_len: 03032 while (m_len > 255) 03033 { 03034 m_len -= 255; 03035 *op++ = 0; 03036 } 03037 assert(m_len > 0); 03038 *op++ = LZO_BYTE(m_len); 03039 } 03040 } 03041 03042 m3_m4_offset: 03043 *op++ = LZO_BYTE((m_off & 63) << 2); 03044 *op++ = LZO_BYTE(m_off >> 6); 03045 } 03046 03047 #if 0 03048 match_done: 03049 #endif 03050 ii = ip; 03051 if __lzo_unlikely(ip >= ip_end) 03052 break; 03053 } 03054 03055 *out_len = pd(op, out); 03056 return pd(in_end,ii); 03057 } 03058 03059 LZO_PUBLIC(int) 03060 DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, 03061 lzo_bytep out, lzo_uintp out_len, 03062 lzo_voidp wrkmem ) 03063 { 03064 lzo_bytep op = out; 03065 lzo_uint t; 03066 03067 if __lzo_unlikely(in_len <= M2_MAX_LEN + 5) 03068 t = in_len; 03069 else 03070 { 03071 t = do_compress(in,in_len,op,out_len,wrkmem); 03072 op += *out_len; 03073 } 03074 03075 if (t > 0) 03076 { 03077 const lzo_bytep ii = in + in_len - t; 03078 03079 if (op == out && t <= 238) 03080 *op++ = LZO_BYTE(17 + t); 03081 else if (t <= 3) 03082 op[-2] |= LZO_BYTE(t); 03083 else if (t <= 18) 03084 *op++ = LZO_BYTE(t - 3); 03085 else 03086 { 03087 lzo_uint tt = t - 18; 03088 03089 *op++ = 0; 03090 while (tt > 255) 03091 { 03092 tt -= 255; 03093 *op++ = 0; 03094 } 03095 assert(tt > 0); 03096 *op++ = LZO_BYTE(tt); 03097 } 03098 do *op++ = *ii++; while (--t > 0); 03099 } 03100 03101 *op++ = M4_MARKER | 1; 03102 *op++ = 0; 03103 *op++ = 0; 03104 03105 *out_len = pd(op, out); 03106 return LZO_E_OK; 03107 } 03108 03109 #endif 03110 03111 #undef do_compress 03112 #undef DO_COMPRESS 03113 #undef LZO_HASH 03114 03115 #undef LZO_TEST_OVERRUN 03116 #undef DO_DECOMPRESS 03117 #define DO_DECOMPRESS lzo1x_decompress 03118 03119 #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS) 03120 03121 #if defined(LZO_TEST_OVERRUN) 03122 # if !defined(LZO_TEST_OVERRUN_INPUT) 03123 # define LZO_TEST_OVERRUN_INPUT 2 03124 # endif 03125 # if !defined(LZO_TEST_OVERRUN_OUTPUT) 03126 # define LZO_TEST_OVERRUN_OUTPUT 2 03127 # endif 03128 # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 03129 # define LZO_TEST_OVERRUN_LOOKBEHIND 03130 # endif 03131 #endif 03132 03133 #undef TEST_IP 03134 #undef TEST_OP 03135 #undef TEST_LB 03136 #undef TEST_LBO 03137 #undef NEED_IP 03138 #undef NEED_OP 03139 #undef HAVE_TEST_IP 03140 #undef HAVE_TEST_OP 03141 #undef HAVE_NEED_IP 03142 #undef HAVE_NEED_OP 03143 #undef HAVE_ANY_IP 03144 #undef HAVE_ANY_OP 03145 03146 #if defined(LZO_TEST_OVERRUN_INPUT) 03147 # if (LZO_TEST_OVERRUN_INPUT >= 1) 03148 # define TEST_IP (ip < ip_end) 03149 # endif 03150 # if (LZO_TEST_OVERRUN_INPUT >= 2) 03151 # define NEED_IP(x) \ 03152 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 03153 # endif 03154 #endif 03155 03156 #if defined(LZO_TEST_OVERRUN_OUTPUT) 03157 # if (LZO_TEST_OVERRUN_OUTPUT >= 1) 03158 # define TEST_OP (op <= op_end) 03159 # endif 03160 # if (LZO_TEST_OVERRUN_OUTPUT >= 2) 03161 # undef TEST_OP 03162 # define NEED_OP(x) \ 03163 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 03164 # endif 03165 #endif 03166 03167 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 03168 # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun 03169 # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun 03170 #else 03171 # define TEST_LB(m_pos) ((void) 0) 03172 # define TEST_LBO(m_pos,o) ((void) 0) 03173 #endif 03174 03175 #if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 03176 # define TEST_IP (ip < ip_end) 03177 #endif 03178 03179 #if defined(TEST_IP) 03180 # define HAVE_TEST_IP 03181 #else 03182 # define TEST_IP 1 03183 #endif 03184 #if defined(TEST_OP) 03185 # define HAVE_TEST_OP 03186 #else 03187 # define TEST_OP 1 03188 #endif 03189 03190 #if defined(NEED_IP) 03191 # define HAVE_NEED_IP 03192 #else 03193 # define NEED_IP(x) ((void) 0) 03194 #endif 03195 #if defined(NEED_OP) 03196 # define HAVE_NEED_OP 03197 #else 03198 # define NEED_OP(x) ((void) 0) 03199 #endif 03200 03201 #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 03202 # define HAVE_ANY_IP 03203 #endif 03204 #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 03205 # define HAVE_ANY_OP 03206 #endif 03207 03208 #undef __COPY4 03209 #define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src) 03210 03211 #undef COPY4 03212 #if defined(LZO_UNALIGNED_OK_4) 03213 # define COPY4(dst,src) __COPY4(dst,src) 03214 #elif defined(LZO_ALIGNED_OK_4) 03215 # define COPY4(dst,src) __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src)) 03216 #endif 03217 03218 #if defined(DO_DECOMPRESS) 03219 LZO_PUBLIC(int) 03220 DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 03221 lzo_bytep out, lzo_uintp out_len, 03222 lzo_voidp wrkmem ) 03223 #endif 03224 { 03225 register lzo_bytep op; 03226 register const lzo_bytep ip; 03227 register lzo_uint t; 03228 #if defined(COPY_DICT) 03229 lzo_uint m_off; 03230 const lzo_bytep dict_end; 03231 #else 03232 register const lzo_bytep m_pos; 03233 #endif 03234 03235 const lzo_bytep const ip_end = in + in_len; 03236 #if defined(HAVE_ANY_OP) 03237 lzo_bytep const op_end = out + *out_len; 03238 #endif 03239 #if defined(LZO1Z) 03240 lzo_uint last_m_off = 0; 03241 #endif 03242 03243 LZO_UNUSED(wrkmem); 03244 03245 #if defined(COPY_DICT) 03246 if (dict) 03247 { 03248 if (dict_len > M4_MAX_OFFSET) 03249 { 03250 dict += dict_len - M4_MAX_OFFSET; 03251 dict_len = M4_MAX_OFFSET; 03252 } 03253 dict_end = dict + dict_len; 03254 } 03255 else 03256 { 03257 dict_len = 0; 03258 dict_end = NULL; 03259 } 03260 #endif 03261 03262 *out_len = 0; 03263 03264 op = out; 03265 ip = in; 03266 03267 if (*ip > 17) 03268 { 03269 t = *ip++ - 17; 03270 if (t < 4) 03271 goto match_next; 03272 assert(t > 0); NEED_OP(t); NEED_IP(t+1); 03273 do *op++ = *ip++; while (--t > 0); 03274 goto first_literal_run; 03275 } 03276 03277 while (TEST_IP && TEST_OP) 03278 { 03279 t = *ip++; 03280 if (t >= 16) 03281 goto match; 03282 if (t == 0) 03283 { 03284 NEED_IP(1); 03285 while (*ip == 0) 03286 { 03287 t += 255; 03288 ip++; 03289 NEED_IP(1); 03290 } 03291 t += 15 + *ip++; 03292 } 03293 assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); 03294 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 03295 #if !defined(LZO_UNALIGNED_OK_4) 03296 if (PTR_ALIGNED2_4(op,ip)) 03297 { 03298 #endif 03299 COPY4(op,ip); 03300 op += 4; ip += 4; 03301 if (--t > 0) 03302 { 03303 if (t >= 4) 03304 { 03305 do { 03306 COPY4(op,ip); 03307 op += 4; ip += 4; t -= 4; 03308 } while (t >= 4); 03309 if (t > 0) do *op++ = *ip++; while (--t > 0); 03310 } 03311 else 03312 do *op++ = *ip++; while (--t > 0); 03313 } 03314 #if !defined(LZO_UNALIGNED_OK_4) 03315 } 03316 else 03317 #endif 03318 #endif 03319 #if !defined(LZO_UNALIGNED_OK_4) 03320 { 03321 *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 03322 do *op++ = *ip++; while (--t > 0); 03323 } 03324 #endif 03325 03326 first_literal_run: 03327 03328 t = *ip++; 03329 if (t >= 16) 03330 goto match; 03331 #if defined(COPY_DICT) 03332 #if defined(LZO1Z) 03333 m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 03334 last_m_off = m_off; 03335 #else 03336 m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 03337 #endif 03338 NEED_OP(3); 03339 t = 3; COPY_DICT(t,m_off) 03340 #else 03341 #if defined(LZO1Z) 03342 t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 03343 m_pos = op - t; 03344 last_m_off = t; 03345 #else 03346 m_pos = op - (1 + M2_MAX_OFFSET); 03347 m_pos -= t >> 2; 03348 m_pos -= *ip++ << 2; 03349 #endif 03350 TEST_LB(m_pos); NEED_OP(3); 03351 *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 03352 #endif 03353 goto match_done; 03354 03355 do { 03356 match: 03357 if (t >= 64) 03358 { 03359 #if defined(COPY_DICT) 03360 #if defined(LZO1X) 03361 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 03362 t = (t >> 5) - 1; 03363 #elif defined(LZO1Y) 03364 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 03365 t = (t >> 4) - 3; 03366 #elif defined(LZO1Z) 03367 m_off = t & 0x1f; 03368 if (m_off >= 0x1c) 03369 m_off = last_m_off; 03370 else 03371 { 03372 m_off = 1 + (m_off << 6) + (*ip++ >> 2); 03373 last_m_off = m_off; 03374 } 03375 t = (t >> 5) - 1; 03376 #endif 03377 #else 03378 #if defined(LZO1X) 03379 m_pos = op - 1; 03380 m_pos -= (t >> 2) & 7; 03381 m_pos -= *ip++ << 3; 03382 t = (t >> 5) - 1; 03383 #elif defined(LZO1Y) 03384 m_pos = op - 1; 03385 m_pos -= (t >> 2) & 3; 03386 m_pos -= *ip++ << 2; 03387 t = (t >> 4) - 3; 03388 #elif defined(LZO1Z) 03389 { 03390 lzo_uint off = t & 0x1f; 03391 m_pos = op; 03392 if (off >= 0x1c) 03393 { 03394 assert(last_m_off > 0); 03395 m_pos -= last_m_off; 03396 } 03397 else 03398 { 03399 off = 1 + (off << 6) + (*ip++ >> 2); 03400 m_pos -= off; 03401 last_m_off = off; 03402 } 03403 } 03404 t = (t >> 5) - 1; 03405 #endif 03406 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 03407 goto copy_match; 03408 #endif 03409 } 03410 else if (t >= 32) 03411 { 03412 t &= 31; 03413 if (t == 0) 03414 { 03415 NEED_IP(1); 03416 while (*ip == 0) 03417 { 03418 t += 255; 03419 ip++; 03420 NEED_IP(1); 03421 } 03422 t += 31 + *ip++; 03423 } 03424 #if defined(COPY_DICT) 03425 #if defined(LZO1Z) 03426 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 03427 last_m_off = m_off; 03428 #else 03429 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 03430 #endif 03431 #else 03432 #if defined(LZO1Z) 03433 { 03434 lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 03435 m_pos = op - off; 03436 last_m_off = off; 03437 } 03438 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 03439 m_pos = op - 1; 03440 m_pos -= (* (const lzo_ushortp) ip) >> 2; 03441 #else 03442 m_pos = op - 1; 03443 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 03444 #endif 03445 #endif 03446 ip += 2; 03447 } 03448 else if (t >= 16) 03449 { 03450 #if defined(COPY_DICT) 03451 m_off = (t & 8) << 11; 03452 #else 03453 m_pos = op; 03454 m_pos -= (t & 8) << 11; 03455 #endif 03456 t &= 7; 03457 if (t == 0) 03458 { 03459 NEED_IP(1); 03460 while (*ip == 0) 03461 { 03462 t += 255; 03463 ip++; 03464 NEED_IP(1); 03465 } 03466 t += 7 + *ip++; 03467 } 03468 #if defined(COPY_DICT) 03469 #if defined(LZO1Z) 03470 m_off += (ip[0] << 6) + (ip[1] >> 2); 03471 #else 03472 m_off += (ip[0] >> 2) + (ip[1] << 6); 03473 #endif 03474 ip += 2; 03475 if (m_off == 0) 03476 goto eof_found; 03477 m_off += 0x4000; 03478 #if defined(LZO1Z) 03479 last_m_off = m_off; 03480 #endif 03481 #else 03482 #if defined(LZO1Z) 03483 m_pos -= (ip[0] << 6) + (ip[1] >> 2); 03484 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 03485 m_pos -= (* (const lzo_ushortp) ip) >> 2; 03486 #else 03487 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 03488 #endif 03489 ip += 2; 03490 if (m_pos == op) 03491 goto eof_found; 03492 m_pos -= 0x4000; 03493 #if defined(LZO1Z) 03494 last_m_off = pd((const lzo_bytep)op, m_pos); 03495 #endif 03496 #endif 03497 } 03498 else 03499 { 03500 #if defined(COPY_DICT) 03501 #if defined(LZO1Z) 03502 m_off = 1 + (t << 6) + (*ip++ >> 2); 03503 last_m_off = m_off; 03504 #else 03505 m_off = 1 + (t >> 2) + (*ip++ << 2); 03506 #endif 03507 NEED_OP(2); 03508 t = 2; COPY_DICT(t,m_off) 03509 #else 03510 #if defined(LZO1Z) 03511 t = 1 + (t << 6) + (*ip++ >> 2); 03512 m_pos = op - t; 03513 last_m_off = t; 03514 #else 03515 m_pos = op - 1; 03516 m_pos -= t >> 2; 03517 m_pos -= *ip++ << 2; 03518 #endif 03519 TEST_LB(m_pos); NEED_OP(2); 03520 *op++ = *m_pos++; *op++ = *m_pos; 03521 #endif 03522 goto match_done; 03523 } 03524 03525 #if defined(COPY_DICT) 03526 03527 NEED_OP(t+3-1); 03528 t += 3-1; COPY_DICT(t,m_off) 03529 03530 #else 03531 03532 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 03533 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 03534 #if !defined(LZO_UNALIGNED_OK_4) 03535 if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 03536 { 03537 assert((op - m_pos) >= 4); 03538 #else 03539 if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 03540 { 03541 #endif 03542 COPY4(op,m_pos); 03543 op += 4; m_pos += 4; t -= 4 - (3 - 1); 03544 do { 03545 COPY4(op,m_pos); 03546 op += 4; m_pos += 4; t -= 4; 03547 } while (t >= 4); 03548 if (t > 0) do *op++ = *m_pos++; while (--t > 0); 03549 } 03550 else 03551 #endif 03552 { 03553 copy_match: 03554 *op++ = *m_pos++; *op++ = *m_pos++; 03555 do *op++ = *m_pos++; while (--t > 0); 03556 } 03557 03558 #endif 03559 03560 match_done: 03561 #if defined(LZO1Z) 03562 t = ip[-1] & 3; 03563 #else 03564 t = ip[-2] & 3; 03565 #endif 03566 if (t == 0) 03567 break; 03568 03569 match_next: 03570 assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); 03571 #if 0 03572 do *op++ = *ip++; while (--t > 0); 03573 #else 03574 *op++ = *ip++; 03575 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 03576 #endif 03577 t = *ip++; 03578 } while (TEST_IP && TEST_OP); 03579 } 03580 03581 #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) 03582 *out_len = pd(op, out); 03583 return LZO_E_EOF_NOT_FOUND; 03584 #endif 03585 03586 eof_found: 03587 assert(t == 1); 03588 *out_len = pd(op, out); 03589 return (ip == ip_end ? LZO_E_OK : 03590 (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 03591 03592 #if defined(HAVE_NEED_IP) 03593 input_overrun: 03594 *out_len = pd(op, out); 03595 return LZO_E_INPUT_OVERRUN; 03596 #endif 03597 03598 #if defined(HAVE_NEED_OP) 03599 output_overrun: 03600 *out_len = pd(op, out); 03601 return LZO_E_OUTPUT_OVERRUN; 03602 #endif 03603 03604 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 03605 lookbehind_overrun: 03606 *out_len = pd(op, out); 03607 return LZO_E_LOOKBEHIND_OVERRUN; 03608 #endif 03609 } 03610 03611 #endif 03612 03613 #define LZO_TEST_OVERRUN 03614 #undef DO_DECOMPRESS 03615 #define DO_DECOMPRESS lzo1x_decompress_safe 03616 03617 #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE) 03618 03619 #if defined(LZO_TEST_OVERRUN) 03620 # if !defined(LZO_TEST_OVERRUN_INPUT) 03621 # define LZO_TEST_OVERRUN_INPUT 2 03622 # endif 03623 # if !defined(LZO_TEST_OVERRUN_OUTPUT) 03624 # define LZO_TEST_OVERRUN_OUTPUT 2 03625 # endif 03626 # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 03627 # define LZO_TEST_OVERRUN_LOOKBEHIND 03628 # endif 03629 #endif 03630 03631 #undef TEST_IP 03632 #undef TEST_OP 03633 #undef TEST_LB 03634 #undef TEST_LBO 03635 #undef NEED_IP 03636 #undef NEED_OP 03637 #undef HAVE_TEST_IP 03638 #undef HAVE_TEST_OP 03639 #undef HAVE_NEED_IP 03640 #undef HAVE_NEED_OP 03641 #undef HAVE_ANY_IP 03642 #undef HAVE_ANY_OP 03643 03644 #if defined(LZO_TEST_OVERRUN_INPUT) 03645 # if (LZO_TEST_OVERRUN_INPUT >= 1) 03646 # define TEST_IP (ip < ip_end) 03647 # endif 03648 # if (LZO_TEST_OVERRUN_INPUT >= 2) 03649 # define NEED_IP(x) \ 03650 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 03651 # endif 03652 #endif 03653 03654 #if defined(LZO_TEST_OVERRUN_OUTPUT) 03655 # if (LZO_TEST_OVERRUN_OUTPUT >= 1) 03656 # define TEST_OP (op <= op_end) 03657 # endif 03658 # if (LZO_TEST_OVERRUN_OUTPUT >= 2) 03659 # undef TEST_OP 03660 # define NEED_OP(x) \ 03661 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 03662 # endif 03663 #endif 03664 03665 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 03666 # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun 03667 # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun 03668 #else 03669 # define TEST_LB(m_pos) ((void) 0) 03670 # define TEST_LBO(m_pos,o) ((void) 0) 03671 #endif 03672 03673 #if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 03674 # define TEST_IP (ip < ip_end) 03675 #endif 03676 03677 #if defined(TEST_IP) 03678 # define HAVE_TEST_IP 03679 #else 03680 # define TEST_IP 1 03681 #endif 03682 #if defined(TEST_OP) 03683 # define HAVE_TEST_OP 03684 #else 03685 # define TEST_OP 1 03686 #endif 03687 03688 #if defined(NEED_IP) 03689 # define HAVE_NEED_IP 03690 #else 03691 # define NEED_IP(x) ((void) 0) 03692 #endif 03693 #if defined(NEED_OP) 03694 # define HAVE_NEED_OP 03695 #else 03696 # define NEED_OP(x) ((void) 0) 03697 #endif 03698 03699 #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 03700 # define HAVE_ANY_IP 03701 #endif 03702 #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 03703 # define HAVE_ANY_OP 03704 #endif 03705 03706 #undef __COPY4 03707 #define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src) 03708 03709 #undef COPY4 03710 #if defined(LZO_UNALIGNED_OK_4) 03711 # define COPY4(dst,src) __COPY4(dst,src) 03712 #elif defined(LZO_ALIGNED_OK_4) 03713 # define COPY4(dst,src) __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src)) 03714 #endif 03715 03716 #if defined(DO_DECOMPRESS) 03717 LZO_PUBLIC(int) 03718 DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 03719 lzo_bytep out, lzo_uintp out_len, 03720 lzo_voidp wrkmem ) 03721 #endif 03722 { 03723 register lzo_bytep op; 03724 register const lzo_bytep ip; 03725 register lzo_uint t; 03726 #if defined(COPY_DICT) 03727 lzo_uint m_off; 03728 const lzo_bytep dict_end; 03729 #else 03730 register const lzo_bytep m_pos; 03731 #endif 03732 03733 const lzo_bytep const ip_end = in + in_len; 03734 #if defined(HAVE_ANY_OP) 03735 lzo_bytep const op_end = out + *out_len; 03736 #endif 03737 #if defined(LZO1Z) 03738 lzo_uint last_m_off = 0; 03739 #endif 03740 03741 LZO_UNUSED(wrkmem); 03742 03743 #if defined(COPY_DICT) 03744 if (dict) 03745 { 03746 if (dict_len > M4_MAX_OFFSET) 03747 { 03748 dict += dict_len - M4_MAX_OFFSET; 03749 dict_len = M4_MAX_OFFSET; 03750 } 03751 dict_end = dict + dict_len; 03752 } 03753 else 03754 { 03755 dict_len = 0; 03756 dict_end = NULL; 03757 } 03758 #endif 03759 03760 *out_len = 0; 03761 03762 op = out; 03763 ip = in; 03764 03765 if (*ip > 17) 03766 { 03767 t = *ip++ - 17; 03768 if (t < 4) 03769 goto match_next; 03770 assert(t > 0); NEED_OP(t); NEED_IP(t+1); 03771 do *op++ = *ip++; while (--t > 0); 03772 goto first_literal_run; 03773 } 03774 03775 while (TEST_IP && TEST_OP) 03776 { 03777 t = *ip++; 03778 if (t >= 16) 03779 goto match; 03780 if (t == 0) 03781 { 03782 NEED_IP(1); 03783 while (*ip == 0) 03784 { 03785 t += 255; 03786 ip++; 03787 NEED_IP(1); 03788 } 03789 t += 15 + *ip++; 03790 } 03791 assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); 03792 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 03793 #if !defined(LZO_UNALIGNED_OK_4) 03794 if (PTR_ALIGNED2_4(op,ip)) 03795 { 03796 #endif 03797 COPY4(op,ip); 03798 op += 4; ip += 4; 03799 if (--t > 0) 03800 { 03801 if (t >= 4) 03802 { 03803 do { 03804 COPY4(op,ip); 03805 op += 4; ip += 4; t -= 4; 03806 } while (t >= 4); 03807 if (t > 0) do *op++ = *ip++; while (--t > 0); 03808 } 03809 else 03810 do *op++ = *ip++; while (--t > 0); 03811 } 03812 #if !defined(LZO_UNALIGNED_OK_4) 03813 } 03814 else 03815 #endif 03816 #endif 03817 #if !defined(LZO_UNALIGNED_OK_4) 03818 { 03819 *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 03820 do *op++ = *ip++; while (--t > 0); 03821 } 03822 #endif 03823 03824 first_literal_run: 03825 03826 t = *ip++; 03827 if (t >= 16) 03828 goto match; 03829 #if defined(COPY_DICT) 03830 #if defined(LZO1Z) 03831 m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 03832 last_m_off = m_off; 03833 #else 03834 m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 03835 #endif 03836 NEED_OP(3); 03837 t = 3; COPY_DICT(t,m_off) 03838 #else 03839 #if defined(LZO1Z) 03840 t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 03841 m_pos = op - t; 03842 last_m_off = t; 03843 #else 03844 m_pos = op - (1 + M2_MAX_OFFSET); 03845 m_pos -= t >> 2; 03846 m_pos -= *ip++ << 2; 03847 #endif 03848 TEST_LB(m_pos); NEED_OP(3); 03849 *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 03850 #endif 03851 goto match_done; 03852 03853 do { 03854 match: 03855 if (t >= 64) 03856 { 03857 #if defined(COPY_DICT) 03858 #if defined(LZO1X) 03859 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 03860 t = (t >> 5) - 1; 03861 #elif defined(LZO1Y) 03862 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 03863 t = (t >> 4) - 3; 03864 #elif defined(LZO1Z) 03865 m_off = t & 0x1f; 03866 if (m_off >= 0x1c) 03867 m_off = last_m_off; 03868 else 03869 { 03870 m_off = 1 + (m_off << 6) + (*ip++ >> 2); 03871 last_m_off = m_off; 03872 } 03873 t = (t >> 5) - 1; 03874 #endif 03875 #else 03876 #if defined(LZO1X) 03877 m_pos = op - 1; 03878 m_pos -= (t >> 2) & 7; 03879 m_pos -= *ip++ << 3; 03880 t = (t >> 5) - 1; 03881 #elif defined(LZO1Y) 03882 m_pos = op - 1; 03883 m_pos -= (t >> 2) & 3; 03884 m_pos -= *ip++ << 2; 03885 t = (t >> 4) - 3; 03886 #elif defined(LZO1Z) 03887 { 03888 lzo_uint off = t & 0x1f; 03889 m_pos = op; 03890 if (off >= 0x1c) 03891 { 03892 assert(last_m_off > 0); 03893 m_pos -= last_m_off; 03894 } 03895 else 03896 { 03897 off = 1 + (off << 6) + (*ip++ >> 2); 03898 m_pos -= off; 03899 last_m_off = off; 03900 } 03901 } 03902 t = (t >> 5) - 1; 03903 #endif 03904 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 03905 goto copy_match; 03906 #endif 03907 } 03908 else if (t >= 32) 03909 { 03910 t &= 31; 03911 if (t == 0) 03912 { 03913 NEED_IP(1); 03914 while (*ip == 0) 03915 { 03916 t += 255; 03917 ip++; 03918 NEED_IP(1); 03919 } 03920 t += 31 + *ip++; 03921 } 03922 #if defined(COPY_DICT) 03923 #if defined(LZO1Z) 03924 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 03925 last_m_off = m_off; 03926 #else 03927 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 03928 #endif 03929 #else 03930 #if defined(LZO1Z) 03931 { 03932 lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 03933 m_pos = op - off; 03934 last_m_off = off; 03935 } 03936 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 03937 m_pos = op - 1; 03938 m_pos -= (* (const lzo_ushortp) ip) >> 2; 03939 #else 03940 m_pos = op - 1; 03941 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 03942 #endif 03943 #endif 03944 ip += 2; 03945 } 03946 else if (t >= 16) 03947 { 03948 #if defined(COPY_DICT) 03949 m_off = (t & 8) << 11; 03950 #else 03951 m_pos = op; 03952 m_pos -= (t & 8) << 11; 03953 #endif 03954 t &= 7; 03955 if (t == 0) 03956 { 03957 NEED_IP(1); 03958 while (*ip == 0) 03959 { 03960 t += 255; 03961 ip++; 03962 NEED_IP(1); 03963 } 03964 t += 7 + *ip++; 03965 } 03966 #if defined(COPY_DICT) 03967 #if defined(LZO1Z) 03968 m_off += (ip[0] << 6) + (ip[1] >> 2); 03969 #else 03970 m_off += (ip[0] >> 2) + (ip[1] << 6); 03971 #endif 03972 ip += 2; 03973 if (m_off == 0) 03974 goto eof_found; 03975 m_off += 0x4000; 03976 #if defined(LZO1Z) 03977 last_m_off = m_off; 03978 #endif 03979 #else 03980 #if defined(LZO1Z) 03981 m_pos -= (ip[0] << 6) + (ip[1] >> 2); 03982 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 03983 m_pos -= (* (const lzo_ushortp) ip) >> 2; 03984 #else 03985 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 03986 #endif 03987 ip += 2; 03988 if (m_pos == op) 03989 goto eof_found; 03990 m_pos -= 0x4000; 03991 #if defined(LZO1Z) 03992 last_m_off = pd((const lzo_bytep)op, m_pos); 03993 #endif 03994 #endif 03995 } 03996 else 03997 { 03998 #if defined(COPY_DICT) 03999 #if defined(LZO1Z) 04000 m_off = 1 + (t << 6) + (*ip++ >> 2); 04001 last_m_off = m_off; 04002 #else 04003 m_off = 1 + (t >> 2) + (*ip++ << 2); 04004 #endif 04005 NEED_OP(2); 04006 t = 2; COPY_DICT(t,m_off) 04007 #else 04008 #if defined(LZO1Z) 04009 t = 1 + (t << 6) + (*ip++ >> 2); 04010 m_pos = op - t; 04011 last_m_off = t; 04012 #else 04013 m_pos = op - 1; 04014 m_pos -= t >> 2; 04015 m_pos -= *ip++ << 2; 04016 #endif 04017 TEST_LB(m_pos); NEED_OP(2); 04018 *op++ = *m_pos++; *op++ = *m_pos; 04019 #endif 04020 goto match_done; 04021 } 04022 04023 #if defined(COPY_DICT) 04024 04025 NEED_OP(t+3-1); 04026 t += 3-1; COPY_DICT(t,m_off) 04027 04028 #else 04029 04030 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 04031 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 04032 #if !defined(LZO_UNALIGNED_OK_4) 04033 if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 04034 { 04035 assert((op - m_pos) >= 4); 04036 #else 04037 if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 04038 { 04039 #endif 04040 COPY4(op,m_pos); 04041 op += 4; m_pos += 4; t -= 4 - (3 - 1); 04042 do { 04043 COPY4(op,m_pos); 04044 op += 4; m_pos += 4; t -= 4; 04045 } while (t >= 4); 04046 if (t > 0) do *op++ = *m_pos++; while (--t > 0); 04047 } 04048 else 04049 #endif 04050 { 04051 copy_match: 04052 *op++ = *m_pos++; *op++ = *m_pos++; 04053 do *op++ = *m_pos++; while (--t > 0); 04054 } 04055 04056 #endif 04057 04058 match_done: 04059 #if defined(LZO1Z) 04060 t = ip[-1] & 3; 04061 #else 04062 t = ip[-2] & 3; 04063 #endif 04064 if (t == 0) 04065 break; 04066 04067 match_next: 04068 assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); 04069 #if 0 04070 do *op++ = *ip++; while (--t > 0); 04071 #else 04072 *op++ = *ip++; 04073 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 04074 #endif 04075 t = *ip++; 04076 } while (TEST_IP && TEST_OP); 04077 } 04078 04079 #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) 04080 *out_len = pd(op, out); 04081 return LZO_E_EOF_NOT_FOUND; 04082 #endif 04083 04084 eof_found: 04085 assert(t == 1); 04086 *out_len = pd(op, out); 04087 return (ip == ip_end ? LZO_E_OK : 04088 (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 04089 04090 #if defined(HAVE_NEED_IP) 04091 input_overrun: 04092 *out_len = pd(op, out); 04093 return LZO_E_INPUT_OVERRUN; 04094 #endif 04095 04096 #if defined(HAVE_NEED_OP) 04097 output_overrun: 04098 *out_len = pd(op, out); 04099 return LZO_E_OUTPUT_OVERRUN; 04100 #endif 04101 04102 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 04103 lookbehind_overrun: 04104 *out_len = pd(op, out); 04105 return LZO_E_LOOKBEHIND_OVERRUN; 04106 #endif 04107 } 04108 04109 #endif 04110 04111 /***** End of minilzo.c *****/ 04112
1.7.6.1