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