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