minilzo.c revision a430b2b5ca4f0967836f5820e8f03adc17fc0a24
1/* minilzo.c -- mini subset of the LZO real-time data compression library 2 3 This file is part of the LZO real-time data compression library. 4 5 Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer 6 Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer 7 Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer 8 Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer 9 Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer 10 Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer 11 Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer 12 Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer 13 Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer 14 Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer 15 Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer 16 Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer 17 Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer 18 Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer 19 Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer 20 All Rights Reserved. 21 22 The LZO library is free software; you can redistribute it and/or 23 modify it under the terms of the GNU General Public License as 24 published by the Free Software Foundation; either version 2 of 25 the License, or (at your option) any later version. 26 27 The LZO library is distributed in the hope that it will be useful, 28 but WITHOUT ANY WARRANTY; without even the implied warranty of 29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 30 GNU General Public License for more details. 31 32 You should have received a copy of the GNU General Public License 33 along with the LZO library; see the file COPYING. 34 If not, write to the Free Software Foundation, Inc., 35 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 36 37 Markus F.X.J. Oberhumer 38 <markus@oberhumer.com> 39 http://www.oberhumer.com/opensource/lzo/ 40 */ 41 42/* 43 * NOTE: 44 * the full LZO package can be found at 45 * http://www.oberhumer.com/opensource/lzo/ 46 */ 47 48#define __LZO_IN_MINILZO 1 49 50#if defined(LZO_CFG_FREESTANDING) 51# undef MINILZO_HAVE_CONFIG_H 52# define LZO_LIBC_FREESTANDING 1 53# define LZO_OS_FREESTANDING 1 54#endif 55 56#ifdef MINILZO_HAVE_CONFIG_H 57# include <config.h> 58#endif 59#include <limits.h> 60#include <stddef.h> 61#if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS) 62 63#ifndef __LZODEFS_H_INCLUDED 64#define __LZODEFS_H_INCLUDED 1 65 66#if defined(__CYGWIN32__) && !defined(__CYGWIN__) 67# define __CYGWIN__ __CYGWIN32__ 68#endif 69#if defined(__IBMCPP__) && !defined(__IBMC__) 70# define __IBMC__ __IBMCPP__ 71#endif 72#if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) 73# define __INTEL_COMPILER __ICL 74#endif 75#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) 76# define _ALL_SOURCE 1 77#endif 78#if defined(__mips__) && defined(__R5900__) 79# if !defined(__LONG_MAX__) 80# define __LONG_MAX__ 9223372036854775807L 81# endif 82#endif 83#if defined(__INTEL_COMPILER) && defined(__linux__) 84# pragma warning(disable: 193) 85#endif 86#if defined(__KEIL__) && defined(__C166__) 87# pragma warning disable = 322 88#elif 0 && defined(__C251__) 89# pragma warning disable = 322 90#endif 91#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) 92# if (_MSC_VER >= 1300) 93# pragma warning(disable: 4668) 94# endif 95#endif 96#if 0 && defined(__WATCOMC__) 97# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) 98# pragma warning 203 9 99# endif 100#endif 101#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) 102# pragma option -h 103#endif 104#if 0 105#define LZO_0xffffL 0xfffful 106#define LZO_0xffffffffL 0xfffffffful 107#else 108#define LZO_0xffffL 65535ul 109#define LZO_0xffffffffL 4294967295ul 110#endif 111#if (LZO_0xffffL == LZO_0xffffffffL) 112# error "your preprocessor is broken 1" 113#endif 114#if (16ul * 16384ul != 262144ul) 115# error "your preprocessor is broken 2" 116#endif 117#if 0 118#if (32767 >= 4294967295ul) 119# error "your preprocessor is broken 3" 120#endif 121#if (65535u >= 4294967295ul) 122# error "your preprocessor is broken 4" 123#endif 124#endif 125#if (UINT_MAX == LZO_0xffffL) 126#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) 127# if !defined(MSDOS) 128# define MSDOS 1 129# endif 130# if !defined(_MSDOS) 131# define _MSDOS 1 132# endif 133#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) 134# if (__VERSION == 520) && (MB_LEN_MAX == 1) 135# if !defined(__AZTEC_C__) 136# define __AZTEC_C__ __VERSION 137# endif 138# if !defined(__DOS__) 139# define __DOS__ 1 140# endif 141# endif 142#endif 143#endif 144#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) 145# define ptrdiff_t long 146# define _PTRDIFF_T_DEFINED 1 147#endif 148#if (UINT_MAX == LZO_0xffffL) 149# undef __LZO_RENAME_A 150# undef __LZO_RENAME_B 151# if defined(__AZTEC_C__) && defined(__DOS__) 152# define __LZO_RENAME_A 1 153# elif defined(_MSC_VER) && defined(MSDOS) 154# if (_MSC_VER < 600) 155# define __LZO_RENAME_A 1 156# elif (_MSC_VER < 700) 157# define __LZO_RENAME_B 1 158# endif 159# elif defined(__TSC__) && defined(__OS2__) 160# define __LZO_RENAME_A 1 161# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) 162# define __LZO_RENAME_A 1 163# elif defined(__PACIFIC__) && defined(DOS) 164# if !defined(__far) 165# define __far far 166# endif 167# if !defined(__near) 168# define __near near 169# endif 170# endif 171# if defined(__LZO_RENAME_A) 172# if !defined(__cdecl) 173# define __cdecl cdecl 174# endif 175# if !defined(__far) 176# define __far far 177# endif 178# if !defined(__huge) 179# define __huge huge 180# endif 181# if !defined(__near) 182# define __near near 183# endif 184# if !defined(__pascal) 185# define __pascal pascal 186# endif 187# if !defined(__huge) 188# define __huge huge 189# endif 190# elif defined(__LZO_RENAME_B) 191# if !defined(__cdecl) 192# define __cdecl _cdecl 193# endif 194# if !defined(__far) 195# define __far _far 196# endif 197# if !defined(__huge) 198# define __huge _huge 199# endif 200# if !defined(__near) 201# define __near _near 202# endif 203# if !defined(__pascal) 204# define __pascal _pascal 205# endif 206# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 207# if !defined(__cdecl) 208# define __cdecl cdecl 209# endif 210# if !defined(__pascal) 211# define __pascal pascal 212# endif 213# endif 214# undef __LZO_RENAME_A 215# undef __LZO_RENAME_B 216#endif 217#if (UINT_MAX == LZO_0xffffL) 218#if defined(__AZTEC_C__) && defined(__DOS__) 219# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 220#elif defined(_MSC_VER) && defined(MSDOS) 221# if (_MSC_VER < 600) 222# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 223# endif 224# if (_MSC_VER < 700) 225# define LZO_BROKEN_INTEGRAL_PROMOTION 1 226# define LZO_BROKEN_SIZEOF 1 227# endif 228#elif defined(__PACIFIC__) && defined(DOS) 229# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 230#elif defined(__TURBOC__) && defined(__MSDOS__) 231# if (__TURBOC__ < 0x0150) 232# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 233# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 234# define LZO_BROKEN_INTEGRAL_PROMOTION 1 235# endif 236# if (__TURBOC__ < 0x0200) 237# define LZO_BROKEN_SIZEOF 1 238# endif 239# if (__TURBOC__ < 0x0400) && defined(__cplusplus) 240# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 241# endif 242#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 243# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 244# define LZO_BROKEN_SIZEOF 1 245#endif 246#endif 247#if defined(__WATCOMC__) && (__WATCOMC__ < 900) 248# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 249#endif 250#if defined(_CRAY) && defined(_CRAY1) 251# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 252#endif 253#define LZO_PP_STRINGIZE(x) #x 254#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) 255#define LZO_PP_CONCAT2(a,b) a ## b 256#define LZO_PP_CONCAT3(a,b,c) a ## b ## c 257#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d 258#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 259#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) 260#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) 261#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) 262#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) 263#if 1 264#define LZO_CPP_STRINGIZE(x) #x 265#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) 266#define LZO_CPP_CONCAT2(a,b) a ## b 267#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c 268#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d 269#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 270#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) 271#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) 272#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) 273#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) 274#endif 275#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) 276#if 1 && defined(__cplusplus) 277# if !defined(__STDC_CONSTANT_MACROS) 278# define __STDC_CONSTANT_MACROS 1 279# endif 280# if !defined(__STDC_LIMIT_MACROS) 281# define __STDC_LIMIT_MACROS 1 282# endif 283#endif 284#if defined(__cplusplus) 285# define LZO_EXTERN_C extern "C" 286#else 287# define LZO_EXTERN_C extern 288#endif 289#if !defined(__LZO_OS_OVERRIDE) 290#if (LZO_OS_FREESTANDING) 291# define LZO_INFO_OS "freestanding" 292#elif (LZO_OS_EMBEDDED) 293# define LZO_INFO_OS "embedded" 294#elif 1 && defined(__IAR_SYSTEMS_ICC__) 295# define LZO_OS_EMBEDDED 1 296# define LZO_INFO_OS "embedded" 297#elif defined(__CYGWIN__) && defined(__GNUC__) 298# define LZO_OS_CYGWIN 1 299# define LZO_INFO_OS "cygwin" 300#elif defined(__EMX__) && defined(__GNUC__) 301# define LZO_OS_EMX 1 302# define LZO_INFO_OS "emx" 303#elif defined(__BEOS__) 304# define LZO_OS_BEOS 1 305# define LZO_INFO_OS "beos" 306#elif defined(__Lynx__) 307# define LZO_OS_LYNXOS 1 308# define LZO_INFO_OS "lynxos" 309#elif defined(__OS400__) 310# define LZO_OS_OS400 1 311# define LZO_INFO_OS "os400" 312#elif defined(__QNX__) 313# define LZO_OS_QNX 1 314# define LZO_INFO_OS "qnx" 315#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) 316# define LZO_OS_DOS32 1 317# define LZO_INFO_OS "dos32" 318#elif defined(__BORLANDC__) && defined(__DPMI16__) 319# define LZO_OS_DOS16 1 320# define LZO_INFO_OS "dos16" 321#elif defined(__ZTC__) && defined(DOS386) 322# define LZO_OS_DOS32 1 323# define LZO_INFO_OS "dos32" 324#elif defined(__OS2__) || defined(__OS2V2__) 325# if (UINT_MAX == LZO_0xffffL) 326# define LZO_OS_OS216 1 327# define LZO_INFO_OS "os216" 328# elif (UINT_MAX == LZO_0xffffffffL) 329# define LZO_OS_OS2 1 330# define LZO_INFO_OS "os2" 331# else 332# error "check your limits.h header" 333# endif 334#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) 335# define LZO_OS_WIN64 1 336# define LZO_INFO_OS "win64" 337#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) 338# define LZO_OS_WIN32 1 339# define LZO_INFO_OS "win32" 340#elif defined(__MWERKS__) && defined(__INTEL__) 341# define LZO_OS_WIN32 1 342# define LZO_INFO_OS "win32" 343#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) 344# if (UINT_MAX == LZO_0xffffL) 345# define LZO_OS_WIN16 1 346# define LZO_INFO_OS "win16" 347# elif (UINT_MAX == LZO_0xffffffffL) 348# define LZO_OS_WIN32 1 349# define LZO_INFO_OS "win32" 350# else 351# error "check your limits.h header" 352# endif 353#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) 354# if (UINT_MAX == LZO_0xffffL) 355# define LZO_OS_DOS16 1 356# define LZO_INFO_OS "dos16" 357# elif (UINT_MAX == LZO_0xffffffffL) 358# define LZO_OS_DOS32 1 359# define LZO_INFO_OS "dos32" 360# else 361# error "check your limits.h header" 362# endif 363#elif defined(__WATCOMC__) 364# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) 365# define LZO_OS_DOS16 1 366# define LZO_INFO_OS "dos16" 367# elif defined(__NT__) && (__WATCOMC__ < 1100) 368# define LZO_OS_WIN32 1 369# define LZO_INFO_OS "win32" 370# elif defined(__linux__) || defined(__LINUX__) 371# define LZO_OS_POSIX 1 372# define LZO_INFO_OS "posix" 373# else 374# error "please specify a target using the -bt compiler option" 375# endif 376#elif defined(__palmos__) 377# define LZO_OS_PALMOS 1 378# define LZO_INFO_OS "palmos" 379#elif defined(__TOS__) || defined(__atarist__) 380# define LZO_OS_TOS 1 381# define LZO_INFO_OS "tos" 382#elif defined(macintosh) && !defined(__ppc__) 383# define LZO_OS_MACCLASSIC 1 384# define LZO_INFO_OS "macclassic" 385#elif defined(__VMS) 386# define LZO_OS_VMS 1 387# define LZO_INFO_OS "vms" 388#elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 389# define LZO_OS_CONSOLE 1 390# define LZO_OS_CONSOLE_PS2 1 391# define LZO_INFO_OS "console" 392# define LZO_INFO_OS_CONSOLE "ps2" 393#elif (defined(__mips__) && defined(__psp__)) 394# define LZO_OS_CONSOLE 1 395# define LZO_OS_CONSOLE_PSP 1 396# define LZO_INFO_OS "console" 397# define LZO_INFO_OS_CONSOLE "psp" 398#else 399# define LZO_OS_POSIX 1 400# define LZO_INFO_OS "posix" 401#endif 402#if (LZO_OS_POSIX) 403# if defined(_AIX) || defined(__AIX__) || defined(__aix__) 404# define LZO_OS_POSIX_AIX 1 405# define LZO_INFO_OS_POSIX "aix" 406# elif defined(__FreeBSD__) 407# define LZO_OS_POSIX_FREEBSD 1 408# define LZO_INFO_OS_POSIX "freebsd" 409# elif defined(__hpux__) || defined(__hpux) 410# define LZO_OS_POSIX_HPUX 1 411# define LZO_INFO_OS_POSIX "hpux" 412# elif defined(__INTERIX) 413# define LZO_OS_POSIX_INTERIX 1 414# define LZO_INFO_OS_POSIX "interix" 415# elif defined(__IRIX__) || defined(__irix__) 416# define LZO_OS_POSIX_IRIX 1 417# define LZO_INFO_OS_POSIX "irix" 418# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) 419# define LZO_OS_POSIX_LINUX 1 420# define LZO_INFO_OS_POSIX "linux" 421# elif defined(__APPLE__) || defined(__MACOS__) 422# define LZO_OS_POSIX_MACOSX 1 423# define LZO_INFO_OS_POSIX "macosx" 424# elif defined(__minix__) || defined(__minix) 425# define LZO_OS_POSIX_MINIX 1 426# define LZO_INFO_OS_POSIX "minix" 427# elif defined(__NetBSD__) 428# define LZO_OS_POSIX_NETBSD 1 429# define LZO_INFO_OS_POSIX "netbsd" 430# elif defined(__OpenBSD__) 431# define LZO_OS_POSIX_OPENBSD 1 432# define LZO_INFO_OS_POSIX "openbsd" 433# elif defined(__osf__) 434# define LZO_OS_POSIX_OSF 1 435# define LZO_INFO_OS_POSIX "osf" 436# elif defined(__solaris__) || defined(__sun) 437# if defined(__SVR4) || defined(__svr4__) 438# define LZO_OS_POSIX_SOLARIS 1 439# define LZO_INFO_OS_POSIX "solaris" 440# else 441# define LZO_OS_POSIX_SUNOS 1 442# define LZO_INFO_OS_POSIX "sunos" 443# endif 444# elif defined(__ultrix__) || defined(__ultrix) 445# define LZO_OS_POSIX_ULTRIX 1 446# define LZO_INFO_OS_POSIX "ultrix" 447# elif defined(_UNICOS) 448# define LZO_OS_POSIX_UNICOS 1 449# define LZO_INFO_OS_POSIX "unicos" 450# else 451# define LZO_OS_POSIX_UNKNOWN 1 452# define LZO_INFO_OS_POSIX "unknown" 453# endif 454#endif 455#endif 456#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 457# if (UINT_MAX != LZO_0xffffL) 458# error "this should not happen" 459# endif 460# if (ULONG_MAX != LZO_0xffffffffL) 461# error "this should not happen" 462# endif 463#endif 464#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) 465# if (UINT_MAX != LZO_0xffffffffL) 466# error "this should not happen" 467# endif 468# if (ULONG_MAX != LZO_0xffffffffL) 469# error "this should not happen" 470# endif 471#endif 472#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) 473# define LZO_CC_CILLY 1 474# define LZO_INFO_CC "Cilly" 475# if defined(__CILLY__) 476# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) 477# else 478# define LZO_INFO_CCVER "unknown" 479# endif 480#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) 481# define LZO_CC_SDCC 1 482# define LZO_INFO_CC "sdcc" 483# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) 484#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) 485# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) 486# define LZO_INFO_CC "Pathscale C" 487# define LZO_INFO_CCVER __PATHSCALE__ 488#elif defined(__INTEL_COMPILER) 489# define LZO_CC_INTELC 1 490# define LZO_INFO_CC "Intel C" 491# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) 492# if defined(_WIN32) || defined(_WIN64) 493# define LZO_CC_SYNTAX_MSC 1 494# else 495# define LZO_CC_SYNTAX_GNUC 1 496# endif 497#elif defined(__POCC__) && defined(_WIN32) 498# define LZO_CC_PELLESC 1 499# define LZO_INFO_CC "Pelles C" 500# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) 501#elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 502# if defined(__GNUC_PATCHLEVEL__) 503# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 504# else 505# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 506# endif 507# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) 508# define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__) 509# else 510# define LZO_CC_CLANG_CLANG 0x020700L 511# endif 512# define LZO_CC_CLANG LZO_CC_CLANG_GNUC 513# define LZO_INFO_CC "clang" 514# define LZO_INFO_CCVER __VERSION__ 515#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 516# if defined(__GNUC_PATCHLEVEL__) 517# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 518# else 519# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 520# endif 521# define LZO_CC_LLVM LZO_CC_LLVM_GNUC 522# define LZO_INFO_CC "llvm-gcc" 523# define LZO_INFO_CCVER __VERSION__ 524#elif defined(__GNUC__) && defined(__VERSION__) 525# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) 526# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 527# elif defined(__GNUC_MINOR__) 528# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 529# else 530# define LZO_CC_GNUC (__GNUC__ * 0x10000L) 531# endif 532# define LZO_INFO_CC "gcc" 533# define LZO_INFO_CCVER __VERSION__ 534#elif defined(__ACK__) && defined(_ACK) 535# define LZO_CC_ACK 1 536# define LZO_INFO_CC "Amsterdam Compiler Kit C" 537# define LZO_INFO_CCVER "unknown" 538#elif defined(__AZTEC_C__) 539# define LZO_CC_AZTECC 1 540# define LZO_INFO_CC "Aztec C" 541# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) 542#elif defined(__CODEGEARC__) 543# define LZO_CC_CODEGEARC 1 544# define LZO_INFO_CC "CodeGear C" 545# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) 546#elif defined(__BORLANDC__) 547# define LZO_CC_BORLANDC 1 548# define LZO_INFO_CC "Borland C" 549# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) 550#elif defined(_CRAYC) && defined(_RELEASE) 551# define LZO_CC_CRAYC 1 552# define LZO_INFO_CC "Cray C" 553# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) 554#elif defined(__DMC__) && defined(__SC__) 555# define LZO_CC_DMC 1 556# define LZO_INFO_CC "Digital Mars C" 557# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) 558#elif defined(__DECC) 559# define LZO_CC_DECC 1 560# define LZO_INFO_CC "DEC C" 561# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) 562#elif defined(__HIGHC__) 563# define LZO_CC_HIGHC 1 564# define LZO_INFO_CC "MetaWare High C" 565# define LZO_INFO_CCVER "unknown" 566#elif defined(__IAR_SYSTEMS_ICC__) 567# define LZO_CC_IARC 1 568# define LZO_INFO_CC "IAR C" 569# if defined(__VER__) 570# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) 571# else 572# define LZO_INFO_CCVER "unknown" 573# endif 574#elif defined(__IBMC__) 575# define LZO_CC_IBMC 1 576# define LZO_INFO_CC "IBM C" 577# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) 578#elif defined(__KEIL__) && defined(__C166__) 579# define LZO_CC_KEILC 1 580# define LZO_INFO_CC "Keil C" 581# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) 582#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) 583# define LZO_CC_LCCWIN32 1 584# define LZO_INFO_CC "lcc-win32" 585# define LZO_INFO_CCVER "unknown" 586#elif defined(__LCC__) 587# define LZO_CC_LCC 1 588# define LZO_INFO_CC "lcc" 589# if defined(__LCC_VERSION__) 590# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) 591# else 592# define LZO_INFO_CCVER "unknown" 593# endif 594#elif defined(_MSC_VER) 595# define LZO_CC_MSC 1 596# define LZO_INFO_CC "Microsoft C" 597# if defined(_MSC_FULL_VER) 598# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) 599# else 600# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) 601# endif 602#elif defined(__MWERKS__) 603# define LZO_CC_MWERKS 1 604# define LZO_INFO_CC "Metrowerks C" 605# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) 606#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) 607# define LZO_CC_NDPC 1 608# define LZO_INFO_CC "Microway NDP C" 609# define LZO_INFO_CCVER "unknown" 610#elif defined(__PACIFIC__) 611# define LZO_CC_PACIFICC 1 612# define LZO_INFO_CC "Pacific C" 613# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) 614#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) 615# define LZO_CC_PGI 1 616# define LZO_INFO_CC "Portland Group PGI C" 617# define LZO_INFO_CCVER "unknown" 618#elif defined(__PUREC__) && defined(__TOS__) 619# define LZO_CC_PUREC 1 620# define LZO_INFO_CC "Pure C" 621# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) 622#elif defined(__SC__) && defined(__ZTC__) 623# define LZO_CC_SYMANTECC 1 624# define LZO_INFO_CC "Symantec C" 625# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) 626#elif defined(__SUNPRO_C) 627# define LZO_INFO_CC "SunPro C" 628# if ((__SUNPRO_C)+0 > 0) 629# define LZO_CC_SUNPROC __SUNPRO_C 630# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) 631# else 632# define LZO_CC_SUNPROC 1 633# define LZO_INFO_CCVER "unknown" 634# endif 635#elif defined(__SUNPRO_CC) 636# define LZO_INFO_CC "SunPro C" 637# if ((__SUNPRO_CC)+0 > 0) 638# define LZO_CC_SUNPROC __SUNPRO_CC 639# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) 640# else 641# define LZO_CC_SUNPROC 1 642# define LZO_INFO_CCVER "unknown" 643# endif 644#elif defined(__TINYC__) 645# define LZO_CC_TINYC 1 646# define LZO_INFO_CC "Tiny C" 647# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) 648#elif defined(__TSC__) 649# define LZO_CC_TOPSPEEDC 1 650# define LZO_INFO_CC "TopSpeed C" 651# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) 652#elif defined(__WATCOMC__) 653# define LZO_CC_WATCOMC 1 654# define LZO_INFO_CC "Watcom C" 655# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) 656#elif defined(__TURBOC__) 657# define LZO_CC_TURBOC 1 658# define LZO_INFO_CC "Turbo C" 659# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) 660#elif defined(__ZTC__) 661# define LZO_CC_ZORTECHC 1 662# define LZO_INFO_CC "Zortech C" 663# if (__ZTC__ == 0x310) 664# define LZO_INFO_CCVER "0x310" 665# else 666# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) 667# endif 668#else 669# define LZO_CC_UNKNOWN 1 670# define LZO_INFO_CC "unknown" 671# define LZO_INFO_CCVER "unknown" 672#endif 673#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) 674# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" 675#endif 676#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) 677# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) 678# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) 679# define LZO_ARCH_CRAY_MPP 1 680# elif defined(_CRAY1) 681# define LZO_ARCH_CRAY_PVP 1 682# endif 683# endif 684#endif 685#if !defined(__LZO_ARCH_OVERRIDE) 686#if (LZO_ARCH_GENERIC) 687# define LZO_INFO_ARCH "generic" 688#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 689# define LZO_ARCH_I086 1 690# define LZO_ARCH_IA16 1 691# define LZO_INFO_ARCH "i086" 692#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) 693# define LZO_ARCH_ALPHA 1 694# define LZO_INFO_ARCH "alpha" 695#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) 696# define LZO_ARCH_ALPHA 1 697# define LZO_INFO_ARCH "alpha" 698#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) 699# define LZO_ARCH_AMD64 1 700# define LZO_INFO_ARCH "amd64" 701#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) 702# define LZO_ARCH_ARM 1 703# define LZO_ARCH_ARM_THUMB 1 704# define LZO_INFO_ARCH "arm_thumb" 705#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) 706# define LZO_ARCH_ARM 1 707# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) 708# define LZO_ARCH_ARM_THUMB 1 709# define LZO_INFO_ARCH "arm_thumb" 710# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) 711# define LZO_INFO_ARCH "arm" 712# else 713# define LZO_INFO_ARCH "arm" 714# endif 715#elif defined(__arm__) || defined(_M_ARM) 716# define LZO_ARCH_ARM 1 717# define LZO_INFO_ARCH "arm" 718#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) 719# define LZO_ARCH_AVR 1 720# define LZO_INFO_ARCH "avr" 721#elif defined(__avr32__) || defined(__AVR32__) 722# define LZO_ARCH_AVR32 1 723# define LZO_INFO_ARCH "avr32" 724#elif defined(__bfin__) 725# define LZO_ARCH_BLACKFIN 1 726# define LZO_INFO_ARCH "blackfin" 727#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) 728# define LZO_ARCH_C166 1 729# define LZO_INFO_ARCH "c166" 730#elif defined(__cris__) 731# define LZO_ARCH_CRIS 1 732# define LZO_INFO_ARCH "cris" 733#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) 734# define LZO_ARCH_EZ80 1 735# define LZO_INFO_ARCH "ez80" 736#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 737# define LZO_ARCH_H8300 1 738# define LZO_INFO_ARCH "h8300" 739#elif defined(__hppa__) || defined(__hppa) 740# define LZO_ARCH_HPPA 1 741# define LZO_INFO_ARCH "hppa" 742#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) 743# define LZO_ARCH_I386 1 744# define LZO_ARCH_IA32 1 745# define LZO_INFO_ARCH "i386" 746#elif (LZO_CC_ZORTECHC && defined(__I86__)) 747# define LZO_ARCH_I386 1 748# define LZO_ARCH_IA32 1 749# define LZO_INFO_ARCH "i386" 750#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) 751# define LZO_ARCH_I386 1 752# define LZO_ARCH_IA32 1 753# define LZO_INFO_ARCH "i386" 754#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) 755# define LZO_ARCH_IA64 1 756# define LZO_INFO_ARCH "ia64" 757#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) 758# define LZO_ARCH_M16C 1 759# define LZO_INFO_ARCH "m16c" 760#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) 761# define LZO_ARCH_M16C 1 762# define LZO_INFO_ARCH "m16c" 763#elif defined(__m32r__) 764# define LZO_ARCH_M32R 1 765# define LZO_INFO_ARCH "m32r" 766#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) 767# define LZO_ARCH_M68K 1 768# define LZO_INFO_ARCH "m68k" 769#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) 770# define LZO_ARCH_MCS251 1 771# define LZO_INFO_ARCH "mcs251" 772#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) 773# define LZO_ARCH_MCS51 1 774# define LZO_INFO_ARCH "mcs51" 775#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) 776# define LZO_ARCH_MCS51 1 777# define LZO_INFO_ARCH "mcs51" 778#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) 779# define LZO_ARCH_MIPS 1 780# define LZO_INFO_ARCH "mips" 781#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) 782# define LZO_ARCH_MSP430 1 783# define LZO_INFO_ARCH "msp430" 784#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) 785# define LZO_ARCH_MSP430 1 786# define LZO_INFO_ARCH "msp430" 787#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) 788# define LZO_ARCH_POWERPC 1 789# define LZO_INFO_ARCH "powerpc" 790#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) 791# define LZO_ARCH_S390 1 792# define LZO_INFO_ARCH "s390" 793#elif defined(__sh__) || defined(_M_SH) 794# define LZO_ARCH_SH 1 795# define LZO_INFO_ARCH "sh" 796#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) 797# define LZO_ARCH_SPARC 1 798# define LZO_INFO_ARCH "sparc" 799#elif defined(__SPU__) 800# define LZO_ARCH_SPU 1 801# define LZO_INFO_ARCH "spu" 802#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) 803# define LZO_ARCH_Z80 1 804# define LZO_INFO_ARCH "z80" 805#elif (LZO_ARCH_CRAY_PVP) 806# if defined(_CRAYSV1) 807# define LZO_ARCH_CRAY_SV1 1 808# define LZO_INFO_ARCH "cray_sv1" 809# elif (_ADDR64) 810# define LZO_ARCH_CRAY_T90 1 811# define LZO_INFO_ARCH "cray_t90" 812# elif (_ADDR32) 813# define LZO_ARCH_CRAY_YMP 1 814# define LZO_INFO_ARCH "cray_ymp" 815# else 816# define LZO_ARCH_CRAY_XMP 1 817# define LZO_INFO_ARCH "cray_xmp" 818# endif 819#else 820# define LZO_ARCH_UNKNOWN 1 821# define LZO_INFO_ARCH "unknown" 822#endif 823#endif 824#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) 825# error "FIXME - missing define for CPU architecture" 826#endif 827#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) 828# error "FIXME - missing WIN32 define for CPU architecture" 829#endif 830#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) 831# error "FIXME - missing WIN64 define for CPU architecture" 832#endif 833#if (LZO_OS_OS216 || LZO_OS_WIN16) 834# define LZO_ARCH_I086PM 1 835# define LZO_ARCH_IA16PM 1 836#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) 837# define LZO_ARCH_I086PM 1 838# define LZO_ARCH_IA16PM 1 839#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) 840# define LZO_ARCH_I086PM 1 841# define LZO_ARCH_IA16PM 1 842#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) 843# define LZO_ARCH_I086PM 1 844# define LZO_ARCH_IA16PM 1 845#endif 846#if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM) 847# error "this should not happen" 848#endif 849#if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086) 850# error "this should not happen" 851#endif 852#if (LZO_ARCH_I086) 853# if (UINT_MAX != LZO_0xffffL) 854# error "this should not happen" 855# endif 856# if (ULONG_MAX != LZO_0xffffffffL) 857# error "this should not happen" 858# endif 859#endif 860#if (LZO_ARCH_I386) 861# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) 862# error "this should not happen" 863# endif 864# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) 865# error "this should not happen" 866# endif 867# if (ULONG_MAX != LZO_0xffffffffL) 868# error "this should not happen" 869# endif 870#endif 871#if !defined(__LZO_MM_OVERRIDE) 872#if (LZO_ARCH_I086) 873#if (UINT_MAX != LZO_0xffffL) 874# error "this should not happen" 875#endif 876#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) 877# define LZO_MM_TINY 1 878#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) 879# define LZO_MM_HUGE 1 880#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) 881# define LZO_MM_SMALL 1 882#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) 883# define LZO_MM_MEDIUM 1 884#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) 885# define LZO_MM_COMPACT 1 886#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) 887# define LZO_MM_LARGE 1 888#elif (LZO_CC_AZTECC) 889# if defined(_LARGE_CODE) && defined(_LARGE_DATA) 890# define LZO_MM_LARGE 1 891# elif defined(_LARGE_CODE) 892# define LZO_MM_MEDIUM 1 893# elif defined(_LARGE_DATA) 894# define LZO_MM_COMPACT 1 895# else 896# define LZO_MM_SMALL 1 897# endif 898#elif (LZO_CC_ZORTECHC && defined(__VCM__)) 899# define LZO_MM_LARGE 1 900#else 901# error "unknown memory model" 902#endif 903#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 904#define LZO_HAVE_MM_HUGE_PTR 1 905#define LZO_HAVE_MM_HUGE_ARRAY 1 906#if (LZO_MM_TINY) 907# undef LZO_HAVE_MM_HUGE_ARRAY 908#endif 909#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) 910# undef LZO_HAVE_MM_HUGE_PTR 911# undef LZO_HAVE_MM_HUGE_ARRAY 912#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 913# undef LZO_HAVE_MM_HUGE_ARRAY 914#elif (LZO_CC_MSC && defined(_QC)) 915# undef LZO_HAVE_MM_HUGE_ARRAY 916# if (_MSC_VER < 600) 917# undef LZO_HAVE_MM_HUGE_PTR 918# endif 919#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) 920# undef LZO_HAVE_MM_HUGE_ARRAY 921#endif 922#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) 923# if (LZO_OS_DOS16) 924# error "this should not happen" 925# elif (LZO_CC_ZORTECHC) 926# else 927# error "this should not happen" 928# endif 929#endif 930#ifdef __cplusplus 931extern "C" { 932#endif 933#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) 934 extern void __near __cdecl _AHSHIFT(void); 935# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 936#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 937 extern void __near __cdecl _AHSHIFT(void); 938# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 939#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) 940 extern void __near __cdecl _AHSHIFT(void); 941# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 942#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) 943 extern void __near __cdecl _AHSHIFT(void); 944# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 945#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) 946# define LZO_MM_AHSHIFT 12 947#elif (LZO_CC_WATCOMC) 948 extern unsigned char _HShift; 949# define LZO_MM_AHSHIFT ((unsigned) _HShift) 950#else 951# error "FIXME - implement LZO_MM_AHSHIFT" 952#endif 953#ifdef __cplusplus 954} 955#endif 956#endif 957#elif (LZO_ARCH_C166) 958#if !defined(__MODEL__) 959# error "FIXME - C166 __MODEL__" 960#elif ((__MODEL__) == 0) 961# define LZO_MM_SMALL 1 962#elif ((__MODEL__) == 1) 963# define LZO_MM_SMALL 1 964#elif ((__MODEL__) == 2) 965# define LZO_MM_LARGE 1 966#elif ((__MODEL__) == 3) 967# define LZO_MM_TINY 1 968#elif ((__MODEL__) == 4) 969# define LZO_MM_XTINY 1 970#elif ((__MODEL__) == 5) 971# define LZO_MM_XSMALL 1 972#else 973# error "FIXME - C166 __MODEL__" 974#endif 975#elif (LZO_ARCH_MCS251) 976#if !defined(__MODEL__) 977# error "FIXME - MCS251 __MODEL__" 978#elif ((__MODEL__) == 0) 979# define LZO_MM_SMALL 1 980#elif ((__MODEL__) == 2) 981# define LZO_MM_LARGE 1 982#elif ((__MODEL__) == 3) 983# define LZO_MM_TINY 1 984#elif ((__MODEL__) == 4) 985# define LZO_MM_XTINY 1 986#elif ((__MODEL__) == 5) 987# define LZO_MM_XSMALL 1 988#else 989# error "FIXME - MCS251 __MODEL__" 990#endif 991#elif (LZO_ARCH_MCS51) 992#if !defined(__MODEL__) 993# error "FIXME - MCS51 __MODEL__" 994#elif ((__MODEL__) == 1) 995# define LZO_MM_SMALL 1 996#elif ((__MODEL__) == 2) 997# define LZO_MM_LARGE 1 998#elif ((__MODEL__) == 3) 999# define LZO_MM_TINY 1 1000#elif ((__MODEL__) == 4) 1001# define LZO_MM_XTINY 1 1002#elif ((__MODEL__) == 5) 1003# define LZO_MM_XSMALL 1 1004#else 1005# error "FIXME - MCS51 __MODEL__" 1006#endif 1007#elif (LZO_ARCH_CRAY_PVP) 1008# define LZO_MM_PVP 1 1009#else 1010# define LZO_MM_FLAT 1 1011#endif 1012#if (LZO_MM_COMPACT) 1013# define LZO_INFO_MM "compact" 1014#elif (LZO_MM_FLAT) 1015# define LZO_INFO_MM "flat" 1016#elif (LZO_MM_HUGE) 1017# define LZO_INFO_MM "huge" 1018#elif (LZO_MM_LARGE) 1019# define LZO_INFO_MM "large" 1020#elif (LZO_MM_MEDIUM) 1021# define LZO_INFO_MM "medium" 1022#elif (LZO_MM_PVP) 1023# define LZO_INFO_MM "pvp" 1024#elif (LZO_MM_SMALL) 1025# define LZO_INFO_MM "small" 1026#elif (LZO_MM_TINY) 1027# define LZO_INFO_MM "tiny" 1028#else 1029# error "unknown memory model" 1030#endif 1031#endif 1032#if defined(SIZEOF_SHORT) 1033# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) 1034#endif 1035#if defined(SIZEOF_INT) 1036# define LZO_SIZEOF_INT (SIZEOF_INT) 1037#endif 1038#if defined(SIZEOF_LONG) 1039# define LZO_SIZEOF_LONG (SIZEOF_LONG) 1040#endif 1041#if defined(SIZEOF_LONG_LONG) 1042# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) 1043#endif 1044#if defined(SIZEOF___INT16) 1045# define LZO_SIZEOF___INT16 (SIZEOF___INT16) 1046#endif 1047#if defined(SIZEOF___INT32) 1048# define LZO_SIZEOF___INT32 (SIZEOF___INT32) 1049#endif 1050#if defined(SIZEOF___INT64) 1051# define LZO_SIZEOF___INT64 (SIZEOF___INT64) 1052#endif 1053#if defined(SIZEOF_VOID_P) 1054# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) 1055#endif 1056#if defined(SIZEOF_SIZE_T) 1057# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) 1058#endif 1059#if defined(SIZEOF_PTRDIFF_T) 1060# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) 1061#endif 1062#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) 1063#if !defined(LZO_SIZEOF_SHORT) 1064# if (LZO_ARCH_CRAY_PVP) 1065# define LZO_SIZEOF_SHORT 8 1066# elif (USHRT_MAX == LZO_0xffffL) 1067# define LZO_SIZEOF_SHORT 2 1068# elif (__LZO_LSR(USHRT_MAX,7) == 1) 1069# define LZO_SIZEOF_SHORT 1 1070# elif (__LZO_LSR(USHRT_MAX,15) == 1) 1071# define LZO_SIZEOF_SHORT 2 1072# elif (__LZO_LSR(USHRT_MAX,31) == 1) 1073# define LZO_SIZEOF_SHORT 4 1074# elif (__LZO_LSR(USHRT_MAX,63) == 1) 1075# define LZO_SIZEOF_SHORT 8 1076# elif (__LZO_LSR(USHRT_MAX,127) == 1) 1077# define LZO_SIZEOF_SHORT 16 1078# else 1079# error "LZO_SIZEOF_SHORT" 1080# endif 1081#endif 1082#if !defined(LZO_SIZEOF_INT) 1083# if (LZO_ARCH_CRAY_PVP) 1084# define LZO_SIZEOF_INT 8 1085# elif (UINT_MAX == LZO_0xffffL) 1086# define LZO_SIZEOF_INT 2 1087# elif (UINT_MAX == LZO_0xffffffffL) 1088# define LZO_SIZEOF_INT 4 1089# elif (__LZO_LSR(UINT_MAX,7) == 1) 1090# define LZO_SIZEOF_INT 1 1091# elif (__LZO_LSR(UINT_MAX,15) == 1) 1092# define LZO_SIZEOF_INT 2 1093# elif (__LZO_LSR(UINT_MAX,31) == 1) 1094# define LZO_SIZEOF_INT 4 1095# elif (__LZO_LSR(UINT_MAX,63) == 1) 1096# define LZO_SIZEOF_INT 8 1097# elif (__LZO_LSR(UINT_MAX,127) == 1) 1098# define LZO_SIZEOF_INT 16 1099# else 1100# error "LZO_SIZEOF_INT" 1101# endif 1102#endif 1103#if !defined(LZO_SIZEOF_LONG) 1104# if (ULONG_MAX == LZO_0xffffffffL) 1105# define LZO_SIZEOF_LONG 4 1106# elif (__LZO_LSR(ULONG_MAX,7) == 1) 1107# define LZO_SIZEOF_LONG 1 1108# elif (__LZO_LSR(ULONG_MAX,15) == 1) 1109# define LZO_SIZEOF_LONG 2 1110# elif (__LZO_LSR(ULONG_MAX,31) == 1) 1111# define LZO_SIZEOF_LONG 4 1112# elif (__LZO_LSR(ULONG_MAX,63) == 1) 1113# define LZO_SIZEOF_LONG 8 1114# elif (__LZO_LSR(ULONG_MAX,127) == 1) 1115# define LZO_SIZEOF_LONG 16 1116# else 1117# error "LZO_SIZEOF_LONG" 1118# endif 1119#endif 1120#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 1121#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 1122# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) 1123# if (LZO_CC_GNUC >= 0x030300ul) 1124# if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) 1125# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG 1126# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) 1127# define LZO_SIZEOF_LONG_LONG 4 1128# endif 1129# endif 1130# endif 1131#endif 1132#endif 1133#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 1134#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 1135#if (LZO_ARCH_I086 && LZO_CC_DMC) 1136#elif (LZO_CC_CILLY) && defined(__GNUC__) 1137# define LZO_SIZEOF_LONG_LONG 8 1138#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1139# define LZO_SIZEOF_LONG_LONG 8 1140#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) 1141# define LZO_SIZEOF_LONG_LONG 8 1142#elif (LZO_OS_WIN64 || defined(_WIN64)) 1143# define LZO_SIZEOF___INT64 8 1144#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) 1145# define LZO_SIZEOF_LONG_LONG 8 1146#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) 1147# define LZO_SIZEOF_LONG_LONG 8 1148#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) 1149# define LZO_SIZEOF_LONG_LONG 8 1150#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) 1151# define LZO_SIZEOF_LONG_LONG 8 1152#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) 1153# define LZO_SIZEOF___INT64 8 1154#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) 1155# define LZO_SIZEOF___INT64 8 1156#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) 1157# define LZO_SIZEOF___INT64 8 1158#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) 1159# define LZO_SIZEOF___INT64 8 1160#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) 1161# define LZO_SIZEOF___INT64 8 1162#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 1163# define LZO_SIZEOF_LONG_LONG 8 1164#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 1165# define LZO_SIZEOF_LONG_LONG 8 1166#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) 1167#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 1168# define LZO_SIZEOF_LONG_LONG 8 1169#endif 1170#endif 1171#endif 1172#if defined(__cplusplus) && (LZO_CC_GNUC) 1173# if (LZO_CC_GNUC < 0x020800ul) 1174# undef LZO_SIZEOF_LONG_LONG 1175# endif 1176#endif 1177#if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) 1178# undef LZO_SIZEOF_LONG_LONG 1179#endif 1180#if !defined(LZO_SIZEOF_VOID_P) 1181#if (LZO_ARCH_I086) 1182# define __LZO_WORDSIZE 2 1183# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) 1184# define LZO_SIZEOF_VOID_P 2 1185# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) 1186# define LZO_SIZEOF_VOID_P 4 1187# else 1188# error "LZO_MM" 1189# endif 1190#elif (LZO_ARCH_AVR || LZO_ARCH_Z80) 1191# define __LZO_WORDSIZE 1 1192# define LZO_SIZEOF_VOID_P 2 1193#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) 1194# define LZO_SIZEOF_VOID_P 2 1195#elif (LZO_ARCH_H8300) 1196# if defined(__NORMAL_MODE__) 1197# define __LZO_WORDSIZE 4 1198# define LZO_SIZEOF_VOID_P 2 1199# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 1200# define __LZO_WORDSIZE 4 1201# define LZO_SIZEOF_VOID_P 4 1202# else 1203# define __LZO_WORDSIZE 2 1204# define LZO_SIZEOF_VOID_P 2 1205# endif 1206# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) 1207# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT 1208# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT 1209# endif 1210#elif (LZO_ARCH_M16C) 1211# define __LZO_WORDSIZE 2 1212# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) 1213# define LZO_SIZEOF_VOID_P 4 1214# else 1215# define LZO_SIZEOF_VOID_P 2 1216# endif 1217#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 1218# define __LZO_WORDSIZE 8 1219# define LZO_SIZEOF_VOID_P 4 1220#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) 1221# define __LZO_WORDSIZE 8 1222# define LZO_SIZEOF_VOID_P 8 1223#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 1224# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 1225# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 1226# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 1227#elif (LZO_OS_OS400 || defined(__OS400__)) 1228# define __LZO_WORDSIZE LZO_SIZEOF_LONG 1229# define LZO_SIZEOF_VOID_P 16 1230# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 1231# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 1232#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 1233# define LZO_SIZEOF_VOID_P 8 1234# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 1235# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 1236#elif (LZO_ARCH_SPU) 1237# if 0 1238# define __LZO_WORDSIZE 16 1239# endif 1240# define LZO_SIZEOF_VOID_P 4 1241#else 1242# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 1243#endif 1244#endif 1245#if !defined(LZO_WORDSIZE) 1246# if defined(__LZO_WORDSIZE) 1247# define LZO_WORDSIZE __LZO_WORDSIZE 1248# else 1249# define LZO_WORDSIZE LZO_SIZEOF_VOID_P 1250# endif 1251#endif 1252#if !defined(LZO_SIZEOF_SIZE_T) 1253#if (LZO_ARCH_I086 || LZO_ARCH_M16C) 1254# define LZO_SIZEOF_SIZE_T 2 1255#else 1256# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P 1257#endif 1258#endif 1259#if !defined(LZO_SIZEOF_PTRDIFF_T) 1260#if (LZO_ARCH_I086) 1261# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) 1262# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P 1263# elif (LZO_MM_COMPACT || LZO_MM_LARGE) 1264# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) 1265# define LZO_SIZEOF_PTRDIFF_T 4 1266# else 1267# define LZO_SIZEOF_PTRDIFF_T 2 1268# endif 1269# else 1270# error "LZO_MM" 1271# endif 1272#else 1273# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T 1274#endif 1275#endif 1276#if (LZO_ABI_NEUTRAL_ENDIAN) 1277# undef LZO_ABI_BIG_ENDIAN 1278# undef LZO_ABI_LITTLE_ENDIAN 1279#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) 1280#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) 1281# define LZO_ABI_BIG_ENDIAN 1 1282#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) 1283# define LZO_ABI_LITTLE_ENDIAN 1 1284#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) 1285# define LZO_ABI_LITTLE_ENDIAN 1 1286#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390) 1287# define LZO_ABI_BIG_ENDIAN 1 1288#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) 1289# if (__LITTLE_ENDIAN__ == 1) 1290# define LZO_ABI_LITTLE_ENDIAN 1 1291# else 1292# define LZO_ABI_BIG_ENDIAN 1 1293# endif 1294#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) 1295# define LZO_ABI_BIG_ENDIAN 1 1296#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) 1297# define LZO_ABI_LITTLE_ENDIAN 1 1298#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) 1299# define LZO_ABI_BIG_ENDIAN 1 1300#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) 1301# define LZO_ABI_LITTLE_ENDIAN 1 1302#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) 1303# define LZO_ABI_BIG_ENDIAN 1 1304#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) 1305# define LZO_ABI_LITTLE_ENDIAN 1 1306#endif 1307#endif 1308#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) 1309# error "this should not happen" 1310#endif 1311#if (LZO_ABI_BIG_ENDIAN) 1312# define LZO_INFO_ABI_ENDIAN "be" 1313#elif (LZO_ABI_LITTLE_ENDIAN) 1314# define LZO_INFO_ABI_ENDIAN "le" 1315#elif (LZO_ABI_NEUTRAL_ENDIAN) 1316# define LZO_INFO_ABI_ENDIAN "neutral" 1317#endif 1318#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 1319# define LZO_ABI_I8LP16 1 1320# define LZO_INFO_ABI_PM "i8lp16" 1321#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 1322# define LZO_ABI_ILP16 1 1323# define LZO_INFO_ABI_PM "ilp16" 1324#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) 1325# define LZO_ABI_ILP32 1 1326# define LZO_INFO_ABI_PM "ilp32" 1327#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) 1328# define LZO_ABI_LLP64 1 1329# define LZO_INFO_ABI_PM "llp64" 1330#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 1331# define LZO_ABI_LP64 1 1332# define LZO_INFO_ABI_PM "lp64" 1333#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 1334# define LZO_ABI_ILP64 1 1335# define LZO_INFO_ABI_PM "ilp64" 1336#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) 1337# define LZO_ABI_IP32L64 1 1338# define LZO_INFO_ABI_PM "ip32l64" 1339#endif 1340#if !defined(__LZO_LIBC_OVERRIDE) 1341#if (LZO_LIBC_NAKED) 1342# define LZO_INFO_LIBC "naked" 1343#elif (LZO_LIBC_FREESTANDING) 1344# define LZO_INFO_LIBC "freestanding" 1345#elif (LZO_LIBC_MOSTLY_FREESTANDING) 1346# define LZO_INFO_LIBC "mfreestanding" 1347#elif (LZO_LIBC_ISOC90) 1348# define LZO_INFO_LIBC "isoc90" 1349#elif (LZO_LIBC_ISOC99) 1350# define LZO_INFO_LIBC "isoc99" 1351#elif defined(__dietlibc__) 1352# define LZO_LIBC_DIETLIBC 1 1353# define LZO_INFO_LIBC "dietlibc" 1354#elif defined(_NEWLIB_VERSION) 1355# define LZO_LIBC_NEWLIB 1 1356# define LZO_INFO_LIBC "newlib" 1357#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) 1358# if defined(__UCLIBC_SUBLEVEL__) 1359# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) 1360# else 1361# define LZO_LIBC_UCLIBC 0x00090bL 1362# endif 1363# define LZO_INFO_LIBC "uclibc" 1364#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) 1365# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) 1366# define LZO_INFO_LIBC "glibc" 1367#elif (LZO_CC_MWERKS) && defined(__MSL__) 1368# define LZO_LIBC_MSL __MSL__ 1369# define LZO_INFO_LIBC "msl" 1370#elif 1 && defined(__IAR_SYSTEMS_ICC__) 1371# define LZO_LIBC_ISOC90 1 1372# define LZO_INFO_LIBC "isoc90" 1373#else 1374# define LZO_LIBC_DEFAULT 1 1375# define LZO_INFO_LIBC "default" 1376#endif 1377#endif 1378#if !defined(__lzo_gnuc_extension__) 1379#if (LZO_CC_GNUC >= 0x020800ul) 1380# define __lzo_gnuc_extension__ __extension__ 1381#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1382# define __lzo_gnuc_extension__ __extension__ 1383#else 1384# define __lzo_gnuc_extension__ /*empty*/ 1385#endif 1386#endif 1387#if !defined(__lzo_ua_volatile) 1388# define __lzo_ua_volatile volatile 1389#endif 1390#if !defined(__lzo_alignof) 1391#if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 1392# define __lzo_alignof(e) __alignof__(e) 1393#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) 1394# define __lzo_alignof(e) __alignof__(e) 1395#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 1396# define __lzo_alignof(e) __alignof(e) 1397#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1398# define __lzo_alignof(e) __alignof__(e) 1399#endif 1400#endif 1401#if defined(__lzo_alignof) 1402# define __lzo_HAVE_alignof 1 1403#endif 1404#if !defined(__lzo_constructor) 1405#if (LZO_CC_GNUC >= 0x030400ul) 1406# define __lzo_constructor __attribute__((__constructor__,__used__)) 1407#elif (LZO_CC_GNUC >= 0x020700ul) 1408# define __lzo_constructor __attribute__((__constructor__)) 1409#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1410# define __lzo_constructor __attribute__((__constructor__)) 1411#endif 1412#endif 1413#if defined(__lzo_constructor) 1414# define __lzo_HAVE_constructor 1 1415#endif 1416#if !defined(__lzo_destructor) 1417#if (LZO_CC_GNUC >= 0x030400ul) 1418# define __lzo_destructor __attribute__((__destructor__,__used__)) 1419#elif (LZO_CC_GNUC >= 0x020700ul) 1420# define __lzo_destructor __attribute__((__destructor__)) 1421#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1422# define __lzo_destructor __attribute__((__destructor__)) 1423#endif 1424#endif 1425#if defined(__lzo_destructor) 1426# define __lzo_HAVE_destructor 1 1427#endif 1428#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) 1429# error "this should not happen" 1430#endif 1431#if !defined(__lzo_inline) 1432#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) 1433#elif defined(__cplusplus) 1434# define __lzo_inline inline 1435#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) 1436# define __lzo_inline __inline 1437#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 1438# define __lzo_inline __inline__ 1439#elif (LZO_CC_DMC) 1440# define __lzo_inline __inline 1441#elif (LZO_CC_INTELC) 1442# define __lzo_inline __inline 1443#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) 1444# define __lzo_inline __inline 1445#elif (LZO_CC_MSC && (_MSC_VER >= 900)) 1446# define __lzo_inline __inline 1447#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1448# define __lzo_inline __inline__ 1449#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 1450# define __lzo_inline inline 1451#endif 1452#endif 1453#if defined(__lzo_inline) 1454# define __lzo_HAVE_inline 1 1455#else 1456# define __lzo_inline /*empty*/ 1457#endif 1458#if !defined(__lzo_forceinline) 1459#if (LZO_CC_GNUC >= 0x030200ul) 1460# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1461#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) 1462# define __lzo_forceinline __forceinline 1463#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 1464# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1465#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1466# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1467#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 1468# define __lzo_forceinline __forceinline 1469#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1470# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1471#endif 1472#endif 1473#if defined(__lzo_forceinline) 1474# define __lzo_HAVE_forceinline 1 1475#else 1476# define __lzo_forceinline /*empty*/ 1477#endif 1478#if !defined(__lzo_noinline) 1479#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) 1480# define __lzo_noinline __attribute__((__noinline__,__used__)) 1481#elif (LZO_CC_GNUC >= 0x030200ul) 1482# define __lzo_noinline __attribute__((__noinline__)) 1483#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) 1484# define __lzo_noinline __declspec(noinline) 1485#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 1486# define __lzo_noinline __attribute__((__noinline__)) 1487#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1488# define __lzo_noinline __attribute__((__noinline__)) 1489#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 1490# define __lzo_noinline __declspec(noinline) 1491#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) 1492# if defined(__cplusplus) 1493# else 1494# define __lzo_noinline __declspec(noinline) 1495# endif 1496#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1497# define __lzo_noinline __attribute__((__noinline__)) 1498#endif 1499#endif 1500#if defined(__lzo_noinline) 1501# define __lzo_HAVE_noinline 1 1502#else 1503# define __lzo_noinline /*empty*/ 1504#endif 1505#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) 1506# error "this should not happen" 1507#endif 1508#if !defined(__lzo_noreturn) 1509#if (LZO_CC_GNUC >= 0x020700ul) 1510# define __lzo_noreturn __attribute__((__noreturn__)) 1511#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) 1512# define __lzo_noreturn __declspec(noreturn) 1513#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) 1514# define __lzo_noreturn __attribute__((__noreturn__)) 1515#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1516# define __lzo_noreturn __attribute__((__noreturn__)) 1517#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 1518# define __lzo_noreturn __declspec(noreturn) 1519#endif 1520#endif 1521#if defined(__lzo_noreturn) 1522# define __lzo_HAVE_noreturn 1 1523#else 1524# define __lzo_noreturn /*empty*/ 1525#endif 1526#if !defined(__lzo_nothrow) 1527#if (LZO_CC_GNUC >= 0x030300ul) 1528# define __lzo_nothrow __attribute__((__nothrow__)) 1529#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) 1530# define __lzo_nothrow __declspec(nothrow) 1531#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC) 1532# define __lzo_nothrow __attribute__((__nothrow__)) 1533#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1534# define __lzo_nothrow __attribute__((__nothrow__)) 1535#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) 1536# define __lzo_nothrow __declspec(nothrow) 1537#endif 1538#endif 1539#if defined(__lzo_nothrow) 1540# define __lzo_HAVE_nothrow 1 1541#else 1542# define __lzo_nothrow /*empty*/ 1543#endif 1544#if !defined(__lzo_restrict) 1545#if (LZO_CC_GNUC >= 0x030400ul) 1546# define __lzo_restrict __restrict__ 1547#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) 1548# define __lzo_restrict __restrict__ 1549#elif (LZO_CC_CLANG || LZO_CC_LLVM) 1550# define __lzo_restrict __restrict__ 1551#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) 1552# define __lzo_restrict __restrict 1553#endif 1554#endif 1555#if defined(__lzo_restrict) 1556# define __lzo_HAVE_restrict 1 1557#else 1558# define __lzo_restrict /*empty*/ 1559#endif 1560#if !defined(__lzo_likely) && !defined(__lzo_unlikely) 1561#if (LZO_CC_GNUC >= 0x030200ul) 1562# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1563# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1564#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) 1565# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1566# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1567#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1568# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1569# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1570#endif 1571#endif 1572#if defined(__lzo_likely) 1573# define __lzo_HAVE_likely 1 1574#else 1575# define __lzo_likely(e) (e) 1576#endif 1577#if defined(__lzo_unlikely) 1578# define __lzo_HAVE_unlikely 1 1579#else 1580# define __lzo_unlikely(e) (e) 1581#endif 1582#if !defined(LZO_UNUSED) 1583# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 1584# define LZO_UNUSED(var) ((void) &var) 1585# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) 1586# define LZO_UNUSED(var) if (&var) ; else 1587# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1588# define LZO_UNUSED(var) ((void) var) 1589# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1590# define LZO_UNUSED(var) if (&var) ; else 1591# elif (LZO_CC_KEILC) 1592# define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} 1593# elif (LZO_CC_PACIFICC) 1594# define LZO_UNUSED(var) ((void) sizeof(var)) 1595# elif (LZO_CC_WATCOMC) && defined(__cplusplus) 1596# define LZO_UNUSED(var) ((void) var) 1597# else 1598# define LZO_UNUSED(var) ((void) &var) 1599# endif 1600#endif 1601#if !defined(LZO_UNUSED_FUNC) 1602# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 1603# define LZO_UNUSED_FUNC(func) ((void) func) 1604# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) 1605# define LZO_UNUSED_FUNC(func) if (func) ; else 1606# elif (LZO_CC_CLANG || LZO_CC_LLVM) 1607# define LZO_UNUSED_FUNC(func) ((void) &func) 1608# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1609# define LZO_UNUSED_FUNC(func) if (func) ; else 1610# elif (LZO_CC_MSC) 1611# define LZO_UNUSED_FUNC(func) ((void) &func) 1612# elif (LZO_CC_KEILC || LZO_CC_PELLESC) 1613# define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} 1614# else 1615# define LZO_UNUSED_FUNC(func) ((void) func) 1616# endif 1617#endif 1618#if !defined(LZO_UNUSED_LABEL) 1619# if (LZO_CC_WATCOMC) && defined(__cplusplus) 1620# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l 1621# elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) 1622# define LZO_UNUSED_LABEL(l) if (0) goto l 1623# else 1624# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l 1625# endif 1626#endif 1627#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) 1628# if 0 1629# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var 1630# elif 0 && (LZO_CC_GNUC) 1631# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var 1632# else 1633# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init 1634# endif 1635#endif 1636#if !defined(LZO_UNCONST_CAST) 1637# if 0 && defined(__cplusplus) 1638# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e)) 1639# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1640# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e)))))) 1641# else 1642# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e))))) 1643# endif 1644#endif 1645#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) 1646# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) 1647# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; 1648# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 1649# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; 1650# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 1651# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; 1652# else 1653# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; 1654# endif 1655#endif 1656#if !defined(LZO_COMPILE_TIME_ASSERT) 1657# if (LZO_CC_AZTECC) 1658# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} 1659# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1660# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1661# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1662# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1663# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 1664# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1665# else 1666# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} 1667# endif 1668#endif 1669#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) 1670# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) 1671# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1672# define __lzo_cdecl __cdecl 1673# define __lzo_cdecl_atexit /*empty*/ 1674# define __lzo_cdecl_main __cdecl 1675# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 1676# define __lzo_cdecl_qsort __pascal 1677# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 1678# define __lzo_cdecl_qsort _stdcall 1679# else 1680# define __lzo_cdecl_qsort __cdecl 1681# endif 1682# elif (LZO_CC_WATCOMC) 1683# define __lzo_cdecl __cdecl 1684# else 1685# define __lzo_cdecl __cdecl 1686# define __lzo_cdecl_atexit __cdecl 1687# define __lzo_cdecl_main __cdecl 1688# define __lzo_cdecl_qsort __cdecl 1689# endif 1690# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) 1691# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 1692# define __lzo_cdecl_sighandler __pascal 1693# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 1694# define __lzo_cdecl_sighandler _stdcall 1695# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) 1696# define __lzo_cdecl_sighandler __clrcall 1697# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) 1698# if defined(_DLL) 1699# define __lzo_cdecl_sighandler _far _cdecl _loadds 1700# elif defined(_MT) 1701# define __lzo_cdecl_sighandler _far _cdecl 1702# else 1703# define __lzo_cdecl_sighandler _cdecl 1704# endif 1705# else 1706# define __lzo_cdecl_sighandler __cdecl 1707# endif 1708#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) 1709# define __lzo_cdecl __cdecl 1710#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) 1711# define __lzo_cdecl cdecl 1712#endif 1713#if !defined(__lzo_cdecl) 1714# define __lzo_cdecl /*empty*/ 1715#endif 1716#if !defined(__lzo_cdecl_atexit) 1717# define __lzo_cdecl_atexit /*empty*/ 1718#endif 1719#if !defined(__lzo_cdecl_main) 1720# define __lzo_cdecl_main /*empty*/ 1721#endif 1722#if !defined(__lzo_cdecl_qsort) 1723# define __lzo_cdecl_qsort /*empty*/ 1724#endif 1725#if !defined(__lzo_cdecl_sighandler) 1726# define __lzo_cdecl_sighandler /*empty*/ 1727#endif 1728#if !defined(__lzo_cdecl_va) 1729# define __lzo_cdecl_va __lzo_cdecl 1730#endif 1731#if !(LZO_CFG_NO_WINDOWS_H) 1732#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) 1733# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) 1734# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) 1735# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) 1736# else 1737# define LZO_HAVE_WINDOWS_H 1 1738# endif 1739#endif 1740#endif 1741#if (LZO_ARCH_ALPHA) 1742# define LZO_OPT_AVOID_UINT_INDEX 1 1743# define LZO_OPT_AVOID_SHORT 1 1744# define LZO_OPT_AVOID_USHORT 1 1745#elif (LZO_ARCH_AMD64) 1746# define LZO_OPT_AVOID_INT_INDEX 1 1747# define LZO_OPT_AVOID_UINT_INDEX 1 1748# define LZO_OPT_UNALIGNED16 1 1749# define LZO_OPT_UNALIGNED32 1 1750# define LZO_OPT_UNALIGNED64 1 1751#elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) 1752#elif (LZO_ARCH_ARM) 1753# define LZO_OPT_AVOID_SHORT 1 1754# define LZO_OPT_AVOID_USHORT 1 1755#elif (LZO_ARCH_CRIS) 1756# define LZO_OPT_UNALIGNED16 1 1757# define LZO_OPT_UNALIGNED32 1 1758#elif (LZO_ARCH_I386) 1759# define LZO_OPT_UNALIGNED16 1 1760# define LZO_OPT_UNALIGNED32 1 1761#elif (LZO_ARCH_IA64) 1762# define LZO_OPT_AVOID_INT_INDEX 1 1763# define LZO_OPT_AVOID_UINT_INDEX 1 1764# define LZO_OPT_PREFER_POSTINC 1 1765#elif (LZO_ARCH_M68K) 1766# define LZO_OPT_PREFER_POSTINC 1 1767# define LZO_OPT_PREFER_PREDEC 1 1768# if defined(__mc68020__) && !defined(__mcoldfire__) 1769# define LZO_OPT_UNALIGNED16 1 1770# define LZO_OPT_UNALIGNED32 1 1771# endif 1772#elif (LZO_ARCH_MIPS) 1773# define LZO_OPT_AVOID_UINT_INDEX 1 1774#elif (LZO_ARCH_POWERPC) 1775# define LZO_OPT_PREFER_PREINC 1 1776# define LZO_OPT_PREFER_PREDEC 1 1777# if (LZO_ABI_BIG_ENDIAN) 1778# define LZO_OPT_UNALIGNED16 1 1779# define LZO_OPT_UNALIGNED32 1 1780# endif 1781#elif (LZO_ARCH_S390) 1782# define LZO_OPT_UNALIGNED16 1 1783# define LZO_OPT_UNALIGNED32 1 1784# if (LZO_SIZEOF_SIZE_T == 8) 1785# define LZO_OPT_UNALIGNED64 1 1786# endif 1787#elif (LZO_ARCH_SH) 1788# define LZO_OPT_PREFER_POSTINC 1 1789# define LZO_OPT_PREFER_PREDEC 1 1790#endif 1791#ifndef LZO_CFG_NO_INLINE_ASM 1792#if (LZO_CC_LLVM) 1793# define LZO_CFG_NO_INLINE_ASM 1 1794#endif 1795#endif 1796#ifndef LZO_CFG_NO_UNALIGNED 1797#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) 1798# define LZO_CFG_NO_UNALIGNED 1 1799#endif 1800#endif 1801#if (LZO_CFG_NO_UNALIGNED) 1802# undef LZO_OPT_UNALIGNED16 1803# undef LZO_OPT_UNALIGNED32 1804# undef LZO_OPT_UNALIGNED64 1805#endif 1806#if (LZO_CFG_NO_INLINE_ASM) 1807#elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 1808# define LZO_ASM_SYNTAX_MSC 1 1809#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 1810#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) 1811#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 1812# define LZO_ASM_SYNTAX_GNUC 1 1813#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 1814# define LZO_ASM_SYNTAX_GNUC 1 1815#endif 1816#if (LZO_ASM_SYNTAX_GNUC) 1817#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) 1818# define __LZO_ASM_CLOBBER "ax" 1819#elif (LZO_CC_INTELC) 1820# define __LZO_ASM_CLOBBER "memory" 1821#else 1822# define __LZO_ASM_CLOBBER "cc", "memory" 1823#endif 1824#endif 1825#if defined(__LZO_INFOSTR_MM) 1826#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) 1827# define __LZO_INFOSTR_MM "" 1828#elif defined(LZO_INFO_MM) 1829# define __LZO_INFOSTR_MM "." LZO_INFO_MM 1830#else 1831# define __LZO_INFOSTR_MM "" 1832#endif 1833#if defined(__LZO_INFOSTR_PM) 1834#elif defined(LZO_INFO_ABI_PM) 1835# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM 1836#else 1837# define __LZO_INFOSTR_PM "" 1838#endif 1839#if defined(__LZO_INFOSTR_ENDIAN) 1840#elif defined(LZO_INFO_ABI_ENDIAN) 1841# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN 1842#else 1843# define __LZO_INFOSTR_ENDIAN "" 1844#endif 1845#if defined(__LZO_INFOSTR_OSNAME) 1846#elif defined(LZO_INFO_OS_CONSOLE) 1847# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE 1848#elif defined(LZO_INFO_OS_POSIX) 1849# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX 1850#else 1851# define __LZO_INFOSTR_OSNAME LZO_INFO_OS 1852#endif 1853#if defined(__LZO_INFOSTR_LIBC) 1854#elif defined(LZO_INFO_LIBC) 1855# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC 1856#else 1857# define __LZO_INFOSTR_LIBC "" 1858#endif 1859#if defined(__LZO_INFOSTR_CCVER) 1860#elif defined(LZO_INFO_CCVER) 1861# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER 1862#else 1863# define __LZO_INFOSTR_CCVER "" 1864#endif 1865#define LZO_INFO_STRING \ 1866 LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ 1867 " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER 1868 1869#endif 1870 1871#endif 1872 1873#undef LZO_HAVE_CONFIG_H 1874#include "minilzo.h" 1875 1876#if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2040) 1877# error "version mismatch in miniLZO source files" 1878#endif 1879 1880#ifdef MINILZO_HAVE_CONFIG_H 1881# define LZO_HAVE_CONFIG_H 1 1882#endif 1883 1884#ifndef __LZO_CONF_H 1885#define __LZO_CONF_H 1 1886 1887#if !defined(__LZO_IN_MINILZO) 1888#if (LZO_CFG_FREESTANDING) 1889# define LZO_LIBC_FREESTANDING 1 1890# define LZO_OS_FREESTANDING 1 1891# define ACC_LIBC_FREESTANDING 1 1892# define ACC_OS_FREESTANDING 1 1893#endif 1894#if (LZO_CFG_NO_UNALIGNED) 1895# define ACC_CFG_NO_UNALIGNED 1 1896#endif 1897#if (LZO_ARCH_GENERIC) 1898# define ACC_ARCH_GENERIC 1 1899#endif 1900#if (LZO_ABI_NEUTRAL_ENDIAN) 1901# define ACC_ABI_NEUTRAL_ENDIAN 1 1902#endif 1903#if (LZO_HAVE_CONFIG_H) 1904# define ACC_CONFIG_NO_HEADER 1 1905#endif 1906#if defined(LZO_CFG_EXTRA_CONFIG_HEADER) 1907# include LZO_CFG_EXTRA_CONFIG_HEADER 1908#endif 1909#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) 1910# error "include this file first" 1911#endif 1912#include "lzo/lzoconf.h" 1913#endif 1914 1915#if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED) 1916# error "version mismatch" 1917#endif 1918 1919#if (LZO_CC_BORLANDC && LZO_ARCH_I086) 1920# pragma option -h 1921#endif 1922 1923#if (LZO_CC_MSC && (_MSC_VER >= 1000)) 1924# pragma warning(disable: 4127 4701) 1925#endif 1926#if (LZO_CC_MSC && (_MSC_VER >= 1300)) 1927# pragma warning(disable: 4820) 1928# pragma warning(disable: 4514 4710 4711) 1929#endif 1930 1931#if (LZO_CC_SUNPROC) 1932#if !defined(__cplusplus) 1933# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) 1934# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) 1935# pragma error_messages(off,E_STATEMENT_NOT_REACHED) 1936#endif 1937#endif 1938 1939#if (__LZO_MMODEL_HUGE) && !(LZO_HAVE_MM_HUGE_PTR) 1940# error "this should not happen - check defines for __huge" 1941#endif 1942 1943#if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING) 1944#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 1945# define ACC_WANT_ACC_INCD_H 1 1946# define ACC_WANT_ACC_INCE_H 1 1947# define ACC_WANT_ACC_INCI_H 1 1948#elif 1 1949# include <string.h> 1950#else 1951# define ACC_WANT_ACC_INCD_H 1 1952#endif 1953 1954#if (LZO_ARCH_I086) 1955# define ACC_MM_AHSHIFT LZO_MM_AHSHIFT 1956# define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) 1957# define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) 1958# define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) 1959#endif 1960 1961#if !defined(lzo_uintptr_t) 1962# if defined(__LZO_MMODEL_HUGE) 1963# define lzo_uintptr_t unsigned long 1964# elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16) 1965# define __LZO_UINTPTR_T_IS_POINTER 1 1966 typedef char* lzo_uintptr_t; 1967# define lzo_uintptr_t lzo_uintptr_t 1968# elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P) 1969# define lzo_uintptr_t size_t 1970# elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P) 1971# define lzo_uintptr_t unsigned long 1972# elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P) 1973# define lzo_uintptr_t unsigned int 1974# elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P) 1975# define lzo_uintptr_t unsigned long long 1976# else 1977# define lzo_uintptr_t size_t 1978# endif 1979#endif 1980LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 1981 1982#if 1 && !defined(LZO_CFG_FREESTANDING) 1983#if 1 && !defined(HAVE_STRING_H) 1984#define HAVE_STRING_H 1 1985#endif 1986#if 1 && !defined(HAVE_MEMCMP) 1987#define HAVE_MEMCMP 1 1988#endif 1989#if 1 && !defined(HAVE_MEMCPY) 1990#define HAVE_MEMCPY 1 1991#endif 1992#if 1 && !defined(HAVE_MEMMOVE) 1993#define HAVE_MEMMOVE 1 1994#endif 1995#if 1 && !defined(HAVE_MEMSET) 1996#define HAVE_MEMSET 1 1997#endif 1998#endif 1999 2000#if 1 && defined(HAVE_STRING_H) 2001#include <string.h> 2002#endif 2003 2004#if (LZO_CFG_FREESTANDING) 2005# undef HAVE_MEMCMP 2006# undef HAVE_MEMCPY 2007# undef HAVE_MEMMOVE 2008# undef HAVE_MEMSET 2009#endif 2010 2011#if !(HAVE_MEMCMP) 2012# undef memcmp 2013# define memcmp(a,b,c) lzo_memcmp(a,b,c) 2014#elif !(__LZO_MMODEL_HUGE) 2015# undef lzo_memcmp 2016# define lzo_memcmp(a,b,c) memcmp(a,b,c) 2017#endif 2018#if !(HAVE_MEMCPY) 2019# undef memcpy 2020# define memcpy(a,b,c) lzo_memcpy(a,b,c) 2021#elif !(__LZO_MMODEL_HUGE) 2022# undef lzo_memcpy 2023# define lzo_memcpy(a,b,c) memcpy(a,b,c) 2024#endif 2025#if !(HAVE_MEMMOVE) 2026# undef memmove 2027# define memmove(a,b,c) lzo_memmove(a,b,c) 2028#elif !(__LZO_MMODEL_HUGE) 2029# undef lzo_memmove 2030# define lzo_memmove(a,b,c) memmove(a,b,c) 2031#endif 2032#if !(HAVE_MEMSET) 2033# undef memset 2034# define memset(a,b,c) lzo_memset(a,b,c) 2035#elif !(__LZO_MMODEL_HUGE) 2036# undef lzo_memset 2037# define lzo_memset(a,b,c) memset(a,b,c) 2038#endif 2039 2040#undef NDEBUG 2041#if (LZO_CFG_FREESTANDING) 2042# undef LZO_DEBUG 2043# define NDEBUG 1 2044# undef assert 2045# define assert(e) ((void)0) 2046#else 2047# if !defined(LZO_DEBUG) 2048# define NDEBUG 1 2049# endif 2050# include <assert.h> 2051#endif 2052 2053#if 0 && defined(__BOUNDS_CHECKING_ON) 2054# include <unchecked.h> 2055#else 2056# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt 2057# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) 2058#endif 2059 2060#if !defined(__lzo_inline) 2061# define __lzo_inline /*empty*/ 2062#endif 2063#if !defined(__lzo_forceinline) 2064# define __lzo_forceinline /*empty*/ 2065#endif 2066#if !defined(__lzo_noinline) 2067# define __lzo_noinline /*empty*/ 2068#endif 2069 2070#if (LZO_CFG_PGO) 2071# undef __acc_likely 2072# undef __acc_unlikely 2073# undef __lzo_likely 2074# undef __lzo_unlikely 2075# define __acc_likely(e) (e) 2076# define __acc_unlikely(e) (e) 2077# define __lzo_likely(e) (e) 2078# define __lzo_unlikely(e) (e) 2079#endif 2080 2081#if 1 2082# define LZO_BYTE(x) ((unsigned char) (x)) 2083#else 2084# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) 2085#endif 2086 2087#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) 2088#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) 2089#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) 2090#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) 2091 2092#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) 2093 2094#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) 2095 2096#define LZO_SIZE(bits) (1u << (bits)) 2097#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) 2098 2099#define LZO_LSIZE(bits) (1ul << (bits)) 2100#define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1) 2101 2102#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) 2103#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) 2104 2105#if !defined(DMUL) 2106#if 0 2107 2108# define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b))) 2109#else 2110# define DMUL(a,b) ((lzo_xint) ((a) * (b))) 2111#endif 2112#endif 2113 2114#if 1 && !(LZO_CFG_NO_UNALIGNED) 2115#if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386 || LZO_ARCH_POWERPC) 2116# if (LZO_SIZEOF_SHORT == 2) 2117# define LZO_UNALIGNED_OK_2 1 2118# endif 2119# if (LZO_SIZEOF_INT == 4) 2120# define LZO_UNALIGNED_OK_4 1 2121# endif 2122#endif 2123#endif 2124 2125#if defined(LZO_UNALIGNED_OK_2) 2126 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(short) == 2) 2127#endif 2128#if defined(LZO_UNALIGNED_OK_4) 2129 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) 2130#elif defined(LZO_ALIGNED_OK_4) 2131 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) 2132#endif 2133 2134#undef COPY4 2135#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 2136# if 1 && defined(ACC_UA_COPY32) 2137# define COPY4(d,s) ACC_UA_COPY32(d,s) 2138# else 2139# define COPY4(d,s) (* (__lzo_ua_volatile lzo_uint32p)(__lzo_ua_volatile lzo_voidp)(d) = * (__lzo_ua_volatile const lzo_uint32p)(__lzo_ua_volatile const lzo_voidp)(s)) 2140# endif 2141#endif 2142 2143#define MEMCPY8_DS(dest,src,len) \ 2144 lzo_memcpy(dest,src,len); dest += len; src += len 2145 2146#define BZERO8_PTR(s,l,n) \ 2147 lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) 2148 2149#define MEMCPY_DS(dest,src,len) \ 2150 do *dest++ = *src++; while (--len > 0) 2151 2152LZO_EXTERN(const lzo_bytep) lzo_copyright(void); 2153 2154#ifndef __LZO_PTR_H 2155#define __LZO_PTR_H 1 2156 2157#ifdef __cplusplus 2158extern "C" { 2159#endif 2160 2161#if !defined(lzo_uintptr_t) 2162# if (__LZO_MMODEL_HUGE) 2163# define lzo_uintptr_t unsigned long 2164# else 2165# define lzo_uintptr_t acc_uintptr_t 2166# ifdef __ACC_INTPTR_T_IS_POINTER 2167# define __LZO_UINTPTR_T_IS_POINTER 1 2168# endif 2169# endif 2170#endif 2171 2172#if (LZO_ARCH_I086) 2173#define PTR(a) ((lzo_bytep) (a)) 2174#define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0) 2175#define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0) 2176#elif (LZO_MM_PVP) 2177#define PTR(a) ((lzo_bytep) (a)) 2178#define PTR_ALIGNED_8(a) ((((lzo_uintptr_t)(a)) >> 61) == 0) 2179#define PTR_ALIGNED2_8(a,b) ((((lzo_uintptr_t)(a)|(lzo_uintptr_t)(b)) >> 61) == 0) 2180#else 2181#define PTR(a) ((lzo_uintptr_t) (a)) 2182#define PTR_LINEAR(a) PTR(a) 2183#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) 2184#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) 2185#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) 2186#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) 2187#endif 2188 2189#define PTR_LT(a,b) (PTR(a) < PTR(b)) 2190#define PTR_GE(a,b) (PTR(a) >= PTR(b)) 2191#define PTR_DIFF(a,b) (PTR(a) - PTR(b)) 2192#define pd(a,b) ((lzo_uint) ((a)-(b))) 2193 2194LZO_EXTERN(lzo_uintptr_t) 2195__lzo_ptr_linear(const lzo_voidp ptr); 2196 2197typedef union 2198{ 2199 char a_char; 2200 unsigned char a_uchar; 2201 short a_short; 2202 unsigned short a_ushort; 2203 int a_int; 2204 unsigned int a_uint; 2205 long a_long; 2206 unsigned long a_ulong; 2207 lzo_int a_lzo_int; 2208 lzo_uint a_lzo_uint; 2209 lzo_int32 a_lzo_int32; 2210 lzo_uint32 a_lzo_uint32; 2211 ptrdiff_t a_ptrdiff_t; 2212 lzo_uintptr_t a_lzo_uintptr_t; 2213 lzo_voidp a_lzo_voidp; 2214 void * a_void_p; 2215 lzo_bytep a_lzo_bytep; 2216 lzo_bytepp a_lzo_bytepp; 2217 lzo_uintp a_lzo_uintp; 2218 lzo_uint * a_lzo_uint_p; 2219 lzo_uint32p a_lzo_uint32p; 2220 lzo_uint32 * a_lzo_uint32_p; 2221 unsigned char * a_uchar_p; 2222 char * a_char_p; 2223} 2224lzo_full_align_t; 2225 2226#ifdef __cplusplus 2227} 2228#endif 2229 2230#endif 2231 2232#define LZO_DETERMINISTIC 1 2233 2234#define LZO_DICT_USE_PTR 1 2235#if 0 && (LZO_ARCH_I086) 2236# undef LZO_DICT_USE_PTR 2237#endif 2238 2239#if (LZO_DICT_USE_PTR) 2240# define lzo_dict_t const lzo_bytep 2241# define lzo_dict_p lzo_dict_t __LZO_MMODEL * 2242#else 2243# define lzo_dict_t lzo_uint 2244# define lzo_dict_p lzo_dict_t __LZO_MMODEL * 2245#endif 2246 2247#endif 2248 2249#if !defined(MINILZO_CFG_SKIP_LZO_PTR) 2250 2251LZO_PUBLIC(lzo_uintptr_t) 2252__lzo_ptr_linear(const lzo_voidp ptr) 2253{ 2254 lzo_uintptr_t p; 2255 2256#if (LZO_ARCH_I086) 2257 p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr)); 2258#elif (LZO_MM_PVP) 2259 p = (lzo_uintptr_t) (ptr); 2260 p = (p << 3) | (p >> 61); 2261#else 2262 p = (lzo_uintptr_t) PTR_LINEAR(ptr); 2263#endif 2264 2265 return p; 2266} 2267 2268LZO_PUBLIC(unsigned) 2269__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) 2270{ 2271#if defined(__LZO_UINTPTR_T_IS_POINTER) 2272 size_t n = (size_t) ptr; 2273 n = (((n + size - 1) / size) * size) - n; 2274#else 2275 lzo_uintptr_t p, n; 2276 p = __lzo_ptr_linear(ptr); 2277 n = (((p + size - 1) / size) * size) - p; 2278#endif 2279 2280 assert(size > 0); 2281 assert((long)n >= 0); 2282 assert(n <= size); 2283 return (unsigned)n; 2284} 2285 2286#endif 2287#if !defined(MINILZO_CFG_SKIP_LZO_UTIL) 2288 2289/* If you use the LZO library in a product, I would appreciate that you 2290 * keep this copyright string in the executable of your product. 2291 */ 2292 2293static const char __lzo_copyright[] = 2294#if !defined(__LZO_IN_MINLZO) 2295 LZO_VERSION_STRING; 2296#else 2297 "\r\n\n" 2298 "LZO data compression library.\n" 2299 "$Copyright: LZO Copyright (C) 1996-2010 Markus Franz Xaver Johannes Oberhumer\n" 2300 "<markus@oberhumer.com>\n" 2301 "http://www.oberhumer.com $\n\n" 2302 "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n" 2303 "$Info: " LZO_INFO_STRING " $\n"; 2304#endif 2305 2306LZO_PUBLIC(const lzo_bytep) 2307lzo_copyright(void) 2308{ 2309#if (LZO_OS_DOS16 && LZO_CC_TURBOC) 2310 return (lzo_voidp) __lzo_copyright; 2311#else 2312 return (const lzo_bytep) __lzo_copyright; 2313#endif 2314} 2315 2316LZO_PUBLIC(unsigned) 2317lzo_version(void) 2318{ 2319 return LZO_VERSION; 2320} 2321 2322LZO_PUBLIC(const char *) 2323lzo_version_string(void) 2324{ 2325 return LZO_VERSION_STRING; 2326} 2327 2328LZO_PUBLIC(const char *) 2329lzo_version_date(void) 2330{ 2331 return LZO_VERSION_DATE; 2332} 2333 2334LZO_PUBLIC(const lzo_charp) 2335_lzo_version_string(void) 2336{ 2337 return LZO_VERSION_STRING; 2338} 2339 2340LZO_PUBLIC(const lzo_charp) 2341_lzo_version_date(void) 2342{ 2343 return LZO_VERSION_DATE; 2344} 2345 2346#define LZO_BASE 65521u 2347#define LZO_NMAX 5552 2348 2349#define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1 2350#define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); 2351#define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); 2352#define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); 2353#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); 2354 2355LZO_PUBLIC(lzo_uint32) 2356lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len) 2357{ 2358 lzo_uint32 s1 = adler & 0xffff; 2359 lzo_uint32 s2 = (adler >> 16) & 0xffff; 2360 unsigned k; 2361 2362 if (buf == NULL) 2363 return 1; 2364 2365 while (len > 0) 2366 { 2367 k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX; 2368 len -= k; 2369 if (k >= 16) do 2370 { 2371 LZO_DO16(buf,0); 2372 buf += 16; 2373 k -= 16; 2374 } while (k >= 16); 2375 if (k != 0) do 2376 { 2377 s1 += *buf++; 2378 s2 += s1; 2379 } while (--k > 0); 2380 s1 %= LZO_BASE; 2381 s2 %= LZO_BASE; 2382 } 2383 return (s2 << 16) | s1; 2384} 2385 2386#undef LZO_DO1 2387#undef LZO_DO2 2388#undef LZO_DO4 2389#undef LZO_DO8 2390#undef LZO_DO16 2391 2392#endif 2393#if !defined(MINILZO_CFG_SKIP_LZO_STRING) 2394#undef lzo_memcmp 2395#undef lzo_memcpy 2396#undef lzo_memmove 2397#undef lzo_memset 2398#if !defined(__LZO_MMODEL_HUGE) 2399# undef LZO_HAVE_MM_HUGE_PTR 2400#endif 2401#define lzo_hsize_t lzo_uint 2402#define lzo_hvoid_p lzo_voidp 2403#define lzo_hbyte_p lzo_bytep 2404#define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f 2405#define lzo_hmemcmp lzo_memcmp 2406#define lzo_hmemcpy lzo_memcpy 2407#define lzo_hmemmove lzo_memmove 2408#define lzo_hmemset lzo_memset 2409#define __LZOLIB_HMEMCPY_CH_INCLUDED 1 2410#if !defined(LZOLIB_PUBLIC) 2411# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) 2412#endif 2413LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) 2414{ 2415#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP) 2416 const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1; 2417 const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2; 2418 if __lzo_likely(len > 0) do 2419 { 2420 int d = *p1 - *p2; 2421 if (d != 0) 2422 return d; 2423 p1++; p2++; 2424 } while __lzo_likely(--len > 0); 2425 return 0; 2426#else 2427 return memcmp(s1, s2, len); 2428#endif 2429} 2430LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 2431{ 2432#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY) 2433 lzo_hbyte_p p1 = (lzo_hbyte_p) dest; 2434 const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; 2435 if (!(len > 0) || p1 == p2) 2436 return dest; 2437 do 2438 *p1++ = *p2++; 2439 while __lzo_likely(--len > 0); 2440 return dest; 2441#else 2442 return memcpy(dest, src, len); 2443#endif 2444} 2445LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 2446{ 2447#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE) 2448 lzo_hbyte_p p1 = (lzo_hbyte_p) dest; 2449 const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; 2450 if (!(len > 0) || p1 == p2) 2451 return dest; 2452 if (p1 < p2) 2453 { 2454 do 2455 *p1++ = *p2++; 2456 while __lzo_likely(--len > 0); 2457 } 2458 else 2459 { 2460 p1 += len; 2461 p2 += len; 2462 do 2463 *--p1 = *--p2; 2464 while __lzo_likely(--len > 0); 2465 } 2466 return dest; 2467#else 2468 return memmove(dest, src, len); 2469#endif 2470} 2471LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len) 2472{ 2473#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET) 2474 lzo_hbyte_p p = (lzo_hbyte_p) s; 2475 if __lzo_likely(len > 0) do 2476 *p++ = (unsigned char) c; 2477 while __lzo_likely(--len > 0); 2478 return s; 2479#else 2480 return memset(s, c, len); 2481#endif 2482} 2483#undef LZOLIB_PUBLIC 2484#endif 2485#if !defined(MINILZO_CFG_SKIP_LZO_INIT) 2486 2487#if !defined(__LZO_IN_MINILZO) 2488 2489#define ACC_WANT_ACC_CHK_CH 1 2490#undef ACCCHK_ASSERT 2491 2492 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int) 2493 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint) 2494 2495 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32) 2496 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32) 2497 ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0) 2498 ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4) 2499 2500#if !defined(__LZO_UINTPTR_T_IS_POINTER) 2501 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) 2502#endif 2503 ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 2504 2505 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint) 2506 ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32)) 2507 ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint)) 2508 ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint)) 2509 2510#endif 2511#undef ACCCHK_ASSERT 2512 2513#if 0 2514#define u2p(ptr,off) ((lzo_voidp) (((lzo_bytep)(lzo_voidp)(ptr)) + (off))) 2515#else 2516static __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off) 2517{ 2518 return (lzo_voidp) ((lzo_bytep) ptr + off); 2519} 2520#endif 2521 2522LZO_PUBLIC(int) 2523_lzo_config_check(void) 2524{ 2525 lzo_bool r = 1; 2526 union { 2527 lzo_xint a[2]; unsigned char b[2*sizeof(lzo_xint)]; 2528 unsigned short x[2]; lzo_uint32 y[2]; lzo_uint z[2]; 2529 } u; 2530 lzo_voidp p; 2531 2532 u.a[0] = u.a[1] = 0; 2533 p = u2p(&u, 0); 2534 r &= ((* (lzo_bytep) p) == 0); 2535#if !defined(LZO_CFG_NO_CONFIG_CHECK) 2536#if defined(LZO_ABI_BIG_ENDIAN) 2537 u.a[0] = u.a[1] = 0; u.b[sizeof(lzo_uint) - 1] = 128; 2538 p = u2p(&u, 0); 2539 r &= ((* (lzo_uintp) p) == 128); 2540#endif 2541#if defined(LZO_ABI_LITTLE_ENDIAN) 2542 u.a[0] = u.a[1] = 0; u.b[0] = 128; 2543 p = u2p(&u, 0); 2544 r &= ((* (lzo_uintp) p) == 128); 2545#endif 2546#if defined(LZO_UNALIGNED_OK_2) 2547 u.a[0] = u.a[1] = 0; 2548 u.b[0] = 1; u.b[sizeof(unsigned short) + 1] = 2; 2549 p = u2p(&u, 1); 2550 r &= ((* (lzo_ushortp) p) == 0); 2551#endif 2552#if defined(LZO_UNALIGNED_OK_4) 2553 u.a[0] = u.a[1] = 0; 2554 u.b[0] = 3; u.b[sizeof(lzo_uint32) + 1] = 4; 2555 p = u2p(&u, 1); 2556 r &= ((* (lzo_uint32p) p) == 0); 2557#endif 2558#endif 2559 2560 return r == 1 ? LZO_E_OK : LZO_E_ERROR; 2561} 2562 2563LZO_PUBLIC(int) 2564__lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5, 2565 int s6, int s7, int s8, int s9) 2566{ 2567 int r; 2568 2569#if defined(__LZO_IN_MINILZO) 2570#elif (LZO_CC_MSC && ((_MSC_VER) < 700)) 2571#else 2572#define ACC_WANT_ACC_CHK_CH 1 2573#undef ACCCHK_ASSERT 2574#define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) 2575#endif 2576#undef ACCCHK_ASSERT 2577 2578 if (v == 0) 2579 return LZO_E_ERROR; 2580 2581 r = (s1 == -1 || s1 == (int) sizeof(short)) && 2582 (s2 == -1 || s2 == (int) sizeof(int)) && 2583 (s3 == -1 || s3 == (int) sizeof(long)) && 2584 (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) && 2585 (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && 2586 (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && 2587 (s7 == -1 || s7 == (int) sizeof(char *)) && 2588 (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && 2589 (s9 == -1 || s9 == (int) sizeof(lzo_callback_t)); 2590 if (!r) 2591 return LZO_E_ERROR; 2592 2593 r = _lzo_config_check(); 2594 if (r != LZO_E_OK) 2595 return r; 2596 2597 return r; 2598} 2599 2600#if !defined(__LZO_IN_MINILZO) 2601 2602#if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD) 2603 2604#if 0 2605BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment, 2606 WORD wHeapSize, LPSTR lpszCmdLine ) 2607#else 2608int __far __pascal LibMain ( int a, short b, short c, long d ) 2609#endif 2610{ 2611 LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d); 2612 return 1; 2613} 2614 2615#endif 2616 2617#endif 2618 2619#endif 2620 2621#define LZO1X 1 2622#define LZO_EOF_CODE 1 2623#define M2_MAX_OFFSET 0x0800 2624 2625#if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS) 2626 2627#define LZO_NEED_DICT_H 1 2628#define D_BITS 14 2629#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) 2630#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) 2631 2632#ifndef __LZO_CONFIG1X_H 2633#define __LZO_CONFIG1X_H 1 2634 2635#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) 2636# define LZO1X 1 2637#endif 2638 2639#if !defined(__LZO_IN_MINILZO) 2640#include "lzo/lzo1x.h" 2641#endif 2642 2643#ifndef LZO_EOF_CODE 2644#define LZO_EOF_CODE 1 2645#endif 2646#undef LZO_DETERMINISTIC 2647 2648#define M1_MAX_OFFSET 0x0400 2649#ifndef M2_MAX_OFFSET 2650#define M2_MAX_OFFSET 0x0800 2651#endif 2652#define M3_MAX_OFFSET 0x4000 2653#define M4_MAX_OFFSET 0xbfff 2654 2655#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) 2656 2657#define M1_MIN_LEN 2 2658#define M1_MAX_LEN 2 2659#define M2_MIN_LEN 3 2660#ifndef M2_MAX_LEN 2661#define M2_MAX_LEN 8 2662#endif 2663#define M3_MIN_LEN 3 2664#define M3_MAX_LEN 33 2665#define M4_MIN_LEN 3 2666#define M4_MAX_LEN 9 2667 2668#define M1_MARKER 0 2669#define M2_MARKER 64 2670#define M3_MARKER 32 2671#define M4_MARKER 16 2672 2673#ifndef MIN_LOOKAHEAD 2674#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) 2675#endif 2676 2677#if defined(LZO_NEED_DICT_H) 2678 2679#ifndef LZO_HASH 2680#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B 2681#endif 2682#define DL_MIN_LEN M2_MIN_LEN 2683 2684#ifndef __LZO_DICT_H 2685#define __LZO_DICT_H 1 2686 2687#ifdef __cplusplus 2688extern "C" { 2689#endif 2690 2691#if !defined(D_BITS) && defined(DBITS) 2692# define D_BITS DBITS 2693#endif 2694#if !defined(D_BITS) 2695# error "D_BITS is not defined" 2696#endif 2697#if (D_BITS < 16) 2698# define D_SIZE LZO_SIZE(D_BITS) 2699# define D_MASK LZO_MASK(D_BITS) 2700#else 2701# define D_SIZE LZO_USIZE(D_BITS) 2702# define D_MASK LZO_UMASK(D_BITS) 2703#endif 2704#define D_HIGH ((D_MASK >> 1) + 1) 2705 2706#if !defined(DD_BITS) 2707# define DD_BITS 0 2708#endif 2709#define DD_SIZE LZO_SIZE(DD_BITS) 2710#define DD_MASK LZO_MASK(DD_BITS) 2711 2712#if !defined(DL_BITS) 2713# define DL_BITS (D_BITS - DD_BITS) 2714#endif 2715#if (DL_BITS < 16) 2716# define DL_SIZE LZO_SIZE(DL_BITS) 2717# define DL_MASK LZO_MASK(DL_BITS) 2718#else 2719# define DL_SIZE LZO_USIZE(DL_BITS) 2720# define DL_MASK LZO_UMASK(DL_BITS) 2721#endif 2722 2723#if (D_BITS != DL_BITS + DD_BITS) 2724# error "D_BITS does not match" 2725#endif 2726#if (D_BITS < 6 || D_BITS > 18) 2727# error "invalid D_BITS" 2728#endif 2729#if (DL_BITS < 6 || DL_BITS > 20) 2730# error "invalid DL_BITS" 2731#endif 2732#if (DD_BITS < 0 || DD_BITS > 6) 2733# error "invalid DD_BITS" 2734#endif 2735 2736#if !defined(DL_MIN_LEN) 2737# define DL_MIN_LEN 3 2738#endif 2739#if !defined(DL_SHIFT) 2740# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) 2741#endif 2742 2743#define LZO_HASH_GZIP 1 2744#define LZO_HASH_GZIP_INCREMENTAL 2 2745#define LZO_HASH_LZO_INCREMENTAL_A 3 2746#define LZO_HASH_LZO_INCREMENTAL_B 4 2747 2748#if !defined(LZO_HASH) 2749# error "choose a hashing strategy" 2750#endif 2751 2752#undef DM 2753#undef DX 2754 2755#if (DL_MIN_LEN == 3) 2756# define _DV2_A(p,shift1,shift2) \ 2757 (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) 2758# define _DV2_B(p,shift1,shift2) \ 2759 (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) 2760# define _DV3_B(p,shift1,shift2,shift3) \ 2761 ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) 2762#elif (DL_MIN_LEN == 2) 2763# define _DV2_A(p,shift1,shift2) \ 2764 (( (lzo_xint)(p[0]) << shift1) ^ p[1]) 2765# define _DV2_B(p,shift1,shift2) \ 2766 (( (lzo_xint)(p[1]) << shift1) ^ p[2]) 2767#else 2768# error "invalid DL_MIN_LEN" 2769#endif 2770#define _DV_A(p,shift) _DV2_A(p,shift,shift) 2771#define _DV_B(p,shift) _DV2_B(p,shift,shift) 2772#define DA2(p,s1,s2) \ 2773 (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) 2774#define DS2(p,s1,s2) \ 2775 (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) 2776#define DX2(p,s1,s2) \ 2777 (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) 2778#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) 2779#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) 2780#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) 2781#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) 2782#define DM(v) DMS(v,0) 2783 2784#if (LZO_HASH == LZO_HASH_GZIP) 2785# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) 2786 2787#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) 2788# define __LZO_HASH_INCREMENTAL 1 2789# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) 2790# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) 2791# define _DINDEX(dv,p) (dv) 2792# define DVAL_LOOKAHEAD DL_MIN_LEN 2793 2794#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) 2795# define __LZO_HASH_INCREMENTAL 1 2796# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) 2797# define DVAL_NEXT(dv,p) \ 2798 dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) 2799# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 2800# define DVAL_LOOKAHEAD DL_MIN_LEN 2801 2802#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) 2803# define __LZO_HASH_INCREMENTAL 1 2804# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) 2805# define DVAL_NEXT(dv,p) \ 2806 dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) 2807# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 2808# define DVAL_LOOKAHEAD DL_MIN_LEN 2809 2810#else 2811# error "choose a hashing strategy" 2812#endif 2813 2814#ifndef DINDEX 2815#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) 2816#endif 2817#if !defined(DINDEX1) && defined(D_INDEX1) 2818#define DINDEX1 D_INDEX1 2819#endif 2820#if !defined(DINDEX2) && defined(D_INDEX2) 2821#define DINDEX2 D_INDEX2 2822#endif 2823 2824#if !defined(__LZO_HASH_INCREMENTAL) 2825# define DVAL_FIRST(dv,p) ((void) 0) 2826# define DVAL_NEXT(dv,p) ((void) 0) 2827# define DVAL_LOOKAHEAD 0 2828#endif 2829 2830#if !defined(DVAL_ASSERT) 2831#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) 2832#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_LLVM) 2833static void __attribute__((__unused__)) 2834#else 2835static void 2836#endif 2837DVAL_ASSERT(lzo_xint dv, const lzo_bytep p) 2838{ 2839 lzo_xint df; 2840 DVAL_FIRST(df,(p)); 2841 assert(DINDEX(dv,p) == DINDEX(df,p)); 2842} 2843#else 2844# define DVAL_ASSERT(dv,p) ((void) 0) 2845#endif 2846#endif 2847 2848#if defined(LZO_DICT_USE_PTR) 2849# define DENTRY(p,in) (p) 2850# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] 2851#else 2852# define DENTRY(p,in) ((lzo_uint) ((p)-(in))) 2853# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] 2854#endif 2855 2856#if (DD_BITS == 0) 2857 2858# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) 2859# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) 2860# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) 2861 2862#else 2863 2864# define UPDATE_D(dict,drun,dv,p,in) \ 2865 dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 2866# define UPDATE_I(dict,drun,index,p,in) \ 2867 dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 2868# define UPDATE_P(ptr,drun,p,in) \ 2869 (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK 2870 2871#endif 2872 2873#if defined(LZO_DICT_USE_PTR) 2874 2875#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 2876 (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) 2877 2878#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 2879 (BOUNDS_CHECKING_OFF_IN_EXPR(( \ 2880 m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ 2881 PTR_LT(m_pos,in) || \ 2882 (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \ 2883 m_off > max_offset ))) 2884 2885#else 2886 2887#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 2888 (m_off == 0 || \ 2889 ((m_off = pd(ip, in) - m_off) > max_offset) || \ 2890 (m_pos = (ip) - (m_off), 0) ) 2891 2892#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 2893 (pd(ip, in) <= m_off || \ 2894 ((m_off = pd(ip, in) - m_off) > max_offset) || \ 2895 (m_pos = (ip) - (m_off), 0) ) 2896 2897#endif 2898 2899#if defined(LZO_DETERMINISTIC) 2900# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET 2901#else 2902# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET 2903#endif 2904 2905#ifdef __cplusplus 2906} 2907#endif 2908 2909#endif 2910 2911#endif 2912 2913#endif 2914 2915#define do_compress _lzo1x_1_do_compress 2916#define DO_COMPRESS lzo1x_1_compress 2917 2918#if 1 && defined(DO_COMPRESS) && !defined(do_compress) 2919# define do_compress LZO_CPP_ECONCAT2(DO_COMPRESS,_core) 2920#endif 2921 2922static __lzo_noinline lzo_uint 2923do_compress ( const lzo_bytep in , lzo_uint in_len, 2924 lzo_bytep out, lzo_uintp out_len, 2925 lzo_voidp wrkmem ) 2926{ 2927 register const lzo_bytep ip; 2928 lzo_bytep op; 2929 const lzo_bytep const in_end = in + in_len; 2930 const lzo_bytep const ip_end = in + in_len - M2_MAX_LEN - 5; 2931 const lzo_bytep ii; 2932 lzo_dict_p const dict = (lzo_dict_p) wrkmem; 2933 2934 op = out; 2935 ip = in; 2936 ii = ip; 2937 2938 ip += 4; 2939 for (;;) 2940 { 2941 register const lzo_bytep m_pos; 2942 LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0); 2943 lzo_uint m_len; 2944 lzo_uint dindex; 2945 2946 DINDEX1(dindex,ip); 2947 GINDEX(m_pos,m_off,dict,dindex,in); 2948 if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 2949 goto literal; 2950#if 1 2951 if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 2952 goto try_match; 2953 DINDEX2(dindex,ip); 2954#endif 2955 GINDEX(m_pos,m_off,dict,dindex,in); 2956 if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 2957 goto literal; 2958 if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 2959 goto try_match; 2960 goto literal; 2961 2962try_match: 2963#if 1 && defined(LZO_UNALIGNED_OK_2) 2964 if (* (const lzo_ushortp) (const lzo_voidp) m_pos != * (const lzo_ushortp) (const lzo_voidp) ip) 2965#else 2966 if (m_pos[0] != ip[0] || m_pos[1] != ip[1]) 2967#endif 2968 { 2969 } 2970 else 2971 { 2972 if __lzo_likely(m_pos[2] == ip[2]) 2973 { 2974#if 0 2975 if (m_off <= M2_MAX_OFFSET) 2976 goto match; 2977 if (lit <= 3) 2978 goto match; 2979 if (lit == 3) 2980 { 2981 assert(op - 2 > out); op[-2] |= LZO_BYTE(3); 2982 *op++ = *ii++; *op++ = *ii++; *op++ = *ii++; 2983 goto code_match; 2984 } 2985 if (m_pos[3] == ip[3]) 2986#endif 2987 goto match; 2988 } 2989 else 2990 { 2991#if 0 2992#if 0 2993 if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3) 2994#else 2995 if (m_off <= M1_MAX_OFFSET && lit == 3) 2996#endif 2997 { 2998 register lzo_uint t; 2999 3000 t = lit; 3001 assert(op - 2 > out); op[-2] |= LZO_BYTE(t); 3002 do *op++ = *ii++; while (--t > 0); 3003 assert(ii == ip); 3004 m_off -= 1; 3005 *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2)); 3006 *op++ = LZO_BYTE(m_off >> 2); 3007 ip += 2; 3008 goto match_done; 3009 } 3010#endif 3011 } 3012 } 3013 3014literal: 3015 UPDATE_I(dict,0,dindex,ip,in); 3016 ++ip; 3017 if __lzo_unlikely(ip >= ip_end) 3018 break; 3019 continue; 3020 3021match: 3022 UPDATE_I(dict,0,dindex,ip,in); 3023 if (pd(ip,ii) > 0) 3024 { 3025 register lzo_uint t = pd(ip,ii); 3026 3027 if (t <= 3) 3028 { 3029 assert(op - 2 > out); 3030 op[-2] |= LZO_BYTE(t); 3031 } 3032 else if (t <= 18) 3033 *op++ = LZO_BYTE(t - 3); 3034 else 3035 { 3036 register lzo_uint tt = t - 18; 3037 3038 *op++ = 0; 3039 while (tt > 255) 3040 { 3041 tt -= 255; 3042 *op++ = 0; 3043 } 3044 assert(tt > 0); 3045 *op++ = LZO_BYTE(tt); 3046 } 3047 do *op++ = *ii++; while (--t > 0); 3048 } 3049 3050 assert(ii == ip); 3051 ip += 3; 3052 if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ || 3053 m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++ 3054#ifdef LZO1Y 3055 || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++ 3056 || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++ 3057#endif 3058 ) 3059 { 3060 --ip; 3061 m_len = pd(ip, ii); 3062 assert(m_len >= 3); assert(m_len <= M2_MAX_LEN); 3063 3064 if (m_off <= M2_MAX_OFFSET) 3065 { 3066 m_off -= 1; 3067#if defined(LZO1X) 3068 *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); 3069 *op++ = LZO_BYTE(m_off >> 3); 3070#elif defined(LZO1Y) 3071 *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); 3072 *op++ = LZO_BYTE(m_off >> 2); 3073#endif 3074 } 3075 else if (m_off <= M3_MAX_OFFSET) 3076 { 3077 m_off -= 1; 3078 *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); 3079 goto m3_m4_offset; 3080 } 3081 else 3082#if defined(LZO1X) 3083 { 3084 m_off -= 0x4000; 3085 assert(m_off > 0); assert(m_off <= 0x7fff); 3086 *op++ = LZO_BYTE(M4_MARKER | 3087 ((m_off & 0x4000) >> 11) | (m_len - 2)); 3088 goto m3_m4_offset; 3089 } 3090#elif defined(LZO1Y) 3091 goto m4_match; 3092#endif 3093 } 3094 else 3095 { 3096 { 3097 const lzo_bytep end = in_end; 3098 const lzo_bytep m = m_pos + M2_MAX_LEN + 1; 3099 while (ip < end && *m == *ip) 3100 m++, ip++; 3101 m_len = pd(ip, ii); 3102 } 3103 assert(m_len > M2_MAX_LEN); 3104 3105 if (m_off <= M3_MAX_OFFSET) 3106 { 3107 m_off -= 1; 3108 if (m_len <= 33) 3109 *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); 3110 else 3111 { 3112 m_len -= 33; 3113 *op++ = M3_MARKER | 0; 3114 goto m3_m4_len; 3115 } 3116 } 3117 else 3118 { 3119#if defined(LZO1Y) 3120m4_match: 3121#endif 3122 m_off -= 0x4000; 3123 assert(m_off > 0); assert(m_off <= 0x7fff); 3124 if (m_len <= M4_MAX_LEN) 3125 *op++ = LZO_BYTE(M4_MARKER | 3126 ((m_off & 0x4000) >> 11) | (m_len - 2)); 3127 else 3128 { 3129 m_len -= M4_MAX_LEN; 3130 *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11)); 3131m3_m4_len: 3132 while (m_len > 255) 3133 { 3134 m_len -= 255; 3135 *op++ = 0; 3136 } 3137 assert(m_len > 0); 3138 *op++ = LZO_BYTE(m_len); 3139 } 3140 } 3141 3142m3_m4_offset: 3143 *op++ = LZO_BYTE((m_off & 63) << 2); 3144 *op++ = LZO_BYTE(m_off >> 6); 3145 } 3146 3147#if 0 3148match_done: 3149#endif 3150 ii = ip; 3151 if __lzo_unlikely(ip >= ip_end) 3152 break; 3153 } 3154 3155 *out_len = pd(op, out); 3156 return pd(in_end,ii); 3157} 3158 3159LZO_PUBLIC(int) 3160DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, 3161 lzo_bytep out, lzo_uintp out_len, 3162 lzo_voidp wrkmem ) 3163{ 3164 lzo_bytep op = out; 3165 lzo_uint t; 3166 3167 if __lzo_unlikely(in_len <= M2_MAX_LEN + 5) 3168 t = in_len; 3169 else 3170 { 3171 t = do_compress(in,in_len,op,out_len,wrkmem); 3172 op += *out_len; 3173 } 3174 3175 if (t > 0) 3176 { 3177 const lzo_bytep ii = in + in_len - t; 3178 3179 if (op == out && t <= 238) 3180 *op++ = LZO_BYTE(17 + t); 3181 else if (t <= 3) 3182 op[-2] |= LZO_BYTE(t); 3183 else if (t <= 18) 3184 *op++ = LZO_BYTE(t - 3); 3185 else 3186 { 3187 lzo_uint tt = t - 18; 3188 3189 *op++ = 0; 3190 while (tt > 255) 3191 { 3192 tt -= 255; 3193 *op++ = 0; 3194 } 3195 assert(tt > 0); 3196 *op++ = LZO_BYTE(tt); 3197 } 3198 do *op++ = *ii++; while (--t > 0); 3199 } 3200 3201 *op++ = M4_MARKER | 1; 3202 *op++ = 0; 3203 *op++ = 0; 3204 3205 *out_len = pd(op, out); 3206 return LZO_E_OK; 3207} 3208 3209#endif 3210 3211#undef do_compress 3212#undef DO_COMPRESS 3213#undef LZO_HASH 3214 3215#undef LZO_TEST_OVERRUN 3216#undef DO_DECOMPRESS 3217#define DO_DECOMPRESS lzo1x_decompress 3218 3219#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS) 3220 3221#if defined(LZO_TEST_OVERRUN) 3222# if !defined(LZO_TEST_OVERRUN_INPUT) 3223# define LZO_TEST_OVERRUN_INPUT 2 3224# endif 3225# if !defined(LZO_TEST_OVERRUN_OUTPUT) 3226# define LZO_TEST_OVERRUN_OUTPUT 2 3227# endif 3228# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3229# define LZO_TEST_OVERRUN_LOOKBEHIND 1 3230# endif 3231#endif 3232 3233#undef TEST_IP 3234#undef TEST_OP 3235#undef TEST_LB 3236#undef TEST_LBO 3237#undef NEED_IP 3238#undef NEED_OP 3239#undef HAVE_TEST_IP 3240#undef HAVE_TEST_OP 3241#undef HAVE_NEED_IP 3242#undef HAVE_NEED_OP 3243#undef HAVE_ANY_IP 3244#undef HAVE_ANY_OP 3245 3246#if defined(LZO_TEST_OVERRUN_INPUT) 3247# if (LZO_TEST_OVERRUN_INPUT >= 1) 3248# define TEST_IP (ip < ip_end) 3249# endif 3250# if (LZO_TEST_OVERRUN_INPUT >= 2) 3251# define NEED_IP(x) \ 3252 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 3253# endif 3254#endif 3255 3256#if defined(LZO_TEST_OVERRUN_OUTPUT) 3257# if (LZO_TEST_OVERRUN_OUTPUT >= 1) 3258# define TEST_OP (op <= op_end) 3259# endif 3260# if (LZO_TEST_OVERRUN_OUTPUT >= 2) 3261# undef TEST_OP 3262# define NEED_OP(x) \ 3263 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 3264# endif 3265#endif 3266 3267#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3268# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun 3269# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun 3270#else 3271# define TEST_LB(m_pos) ((void) 0) 3272# define TEST_LBO(m_pos,o) ((void) 0) 3273#endif 3274 3275#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 3276# define TEST_IP (ip < ip_end) 3277#endif 3278 3279#if defined(TEST_IP) 3280# define HAVE_TEST_IP 1 3281#else 3282# define TEST_IP 1 3283#endif 3284#if defined(TEST_OP) 3285# define HAVE_TEST_OP 1 3286#else 3287# define TEST_OP 1 3288#endif 3289 3290#if defined(NEED_IP) 3291# define HAVE_NEED_IP 1 3292#else 3293# define NEED_IP(x) ((void) 0) 3294#endif 3295#if defined(NEED_OP) 3296# define HAVE_NEED_OP 1 3297#else 3298# define NEED_OP(x) ((void) 0) 3299#endif 3300 3301#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 3302# define HAVE_ANY_IP 1 3303#endif 3304#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 3305# define HAVE_ANY_OP 1 3306#endif 3307 3308#if defined(DO_DECOMPRESS) 3309LZO_PUBLIC(int) 3310DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 3311 lzo_bytep out, lzo_uintp out_len, 3312 lzo_voidp wrkmem ) 3313#endif 3314{ 3315 register lzo_bytep op; 3316 register const lzo_bytep ip; 3317 register lzo_uint t; 3318#if defined(COPY_DICT) 3319 lzo_uint m_off; 3320 const lzo_bytep dict_end; 3321#else 3322 register const lzo_bytep m_pos; 3323#endif 3324 3325 const lzo_bytep const ip_end = in + in_len; 3326#if defined(HAVE_ANY_OP) 3327 lzo_bytep const op_end = out + *out_len; 3328#endif 3329#if defined(LZO1Z) 3330 lzo_uint last_m_off = 0; 3331#endif 3332 3333 LZO_UNUSED(wrkmem); 3334 3335#if defined(COPY_DICT) 3336 if (dict) 3337 { 3338 if (dict_len > M4_MAX_OFFSET) 3339 { 3340 dict += dict_len - M4_MAX_OFFSET; 3341 dict_len = M4_MAX_OFFSET; 3342 } 3343 dict_end = dict + dict_len; 3344 } 3345 else 3346 { 3347 dict_len = 0; 3348 dict_end = NULL; 3349 } 3350#endif 3351 3352 *out_len = 0; 3353 3354 op = out; 3355 ip = in; 3356 3357 if (*ip > 17) 3358 { 3359 t = *ip++ - 17; 3360 if (t < 4) 3361 goto match_next; 3362 assert(t > 0); NEED_OP(t); NEED_IP(t+1); 3363 do *op++ = *ip++; while (--t > 0); 3364 goto first_literal_run; 3365 } 3366 3367 while (TEST_IP && TEST_OP) 3368 { 3369 t = *ip++; 3370 if (t >= 16) 3371 goto match; 3372 if (t == 0) 3373 { 3374 NEED_IP(1); 3375 while (*ip == 0) 3376 { 3377 t += 255; 3378 ip++; 3379 NEED_IP(1); 3380 } 3381 t += 15 + *ip++; 3382 } 3383 assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); 3384#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 3385#if !defined(LZO_UNALIGNED_OK_4) 3386 if (PTR_ALIGNED2_4(op,ip)) 3387 { 3388#endif 3389 COPY4(op,ip); 3390 op += 4; ip += 4; 3391 if (--t > 0) 3392 { 3393 if (t >= 4) 3394 { 3395 do { 3396 COPY4(op,ip); 3397 op += 4; ip += 4; t -= 4; 3398 } while (t >= 4); 3399 if (t > 0) do *op++ = *ip++; while (--t > 0); 3400 } 3401 else 3402 do *op++ = *ip++; while (--t > 0); 3403 } 3404#if !defined(LZO_UNALIGNED_OK_4) 3405 } 3406 else 3407#endif 3408#endif 3409#if !defined(LZO_UNALIGNED_OK_4) 3410 { 3411 *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 3412 do *op++ = *ip++; while (--t > 0); 3413 } 3414#endif 3415 3416first_literal_run: 3417 3418 t = *ip++; 3419 if (t >= 16) 3420 goto match; 3421#if defined(COPY_DICT) 3422#if defined(LZO1Z) 3423 m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 3424 last_m_off = m_off; 3425#else 3426 m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 3427#endif 3428 NEED_OP(3); 3429 t = 3; COPY_DICT(t,m_off) 3430#else 3431#if defined(LZO1Z) 3432 t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 3433 m_pos = op - t; 3434 last_m_off = t; 3435#else 3436 m_pos = op - (1 + M2_MAX_OFFSET); 3437 m_pos -= t >> 2; 3438 m_pos -= *ip++ << 2; 3439#endif 3440 TEST_LB(m_pos); NEED_OP(3); 3441 *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 3442#endif 3443 goto match_done; 3444 3445 do { 3446match: 3447 if (t >= 64) 3448 { 3449#if defined(COPY_DICT) 3450#if defined(LZO1X) 3451 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 3452 t = (t >> 5) - 1; 3453#elif defined(LZO1Y) 3454 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 3455 t = (t >> 4) - 3; 3456#elif defined(LZO1Z) 3457 m_off = t & 0x1f; 3458 if (m_off >= 0x1c) 3459 m_off = last_m_off; 3460 else 3461 { 3462 m_off = 1 + (m_off << 6) + (*ip++ >> 2); 3463 last_m_off = m_off; 3464 } 3465 t = (t >> 5) - 1; 3466#endif 3467#else 3468#if defined(LZO1X) 3469 m_pos = op - 1; 3470 m_pos -= (t >> 2) & 7; 3471 m_pos -= *ip++ << 3; 3472 t = (t >> 5) - 1; 3473#elif defined(LZO1Y) 3474 m_pos = op - 1; 3475 m_pos -= (t >> 2) & 3; 3476 m_pos -= *ip++ << 2; 3477 t = (t >> 4) - 3; 3478#elif defined(LZO1Z) 3479 { 3480 lzo_uint off = t & 0x1f; 3481 m_pos = op; 3482 if (off >= 0x1c) 3483 { 3484 assert(last_m_off > 0); 3485 m_pos -= last_m_off; 3486 } 3487 else 3488 { 3489 off = 1 + (off << 6) + (*ip++ >> 2); 3490 m_pos -= off; 3491 last_m_off = off; 3492 } 3493 } 3494 t = (t >> 5) - 1; 3495#endif 3496 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 3497 goto copy_match; 3498#endif 3499 } 3500 else if (t >= 32) 3501 { 3502 t &= 31; 3503 if (t == 0) 3504 { 3505 NEED_IP(1); 3506 while (*ip == 0) 3507 { 3508 t += 255; 3509 ip++; 3510 NEED_IP(1); 3511 } 3512 t += 31 + *ip++; 3513 } 3514#if defined(COPY_DICT) 3515#if defined(LZO1Z) 3516 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 3517 last_m_off = m_off; 3518#else 3519 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 3520#endif 3521#else 3522#if defined(LZO1Z) 3523 { 3524 lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 3525 m_pos = op - off; 3526 last_m_off = off; 3527 } 3528#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 3529 m_pos = op - 1; 3530 m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; 3531#else 3532 m_pos = op - 1; 3533 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 3534#endif 3535#endif 3536 ip += 2; 3537 } 3538 else if (t >= 16) 3539 { 3540#if defined(COPY_DICT) 3541 m_off = (t & 8) << 11; 3542#else 3543 m_pos = op; 3544 m_pos -= (t & 8) << 11; 3545#endif 3546 t &= 7; 3547 if (t == 0) 3548 { 3549 NEED_IP(1); 3550 while (*ip == 0) 3551 { 3552 t += 255; 3553 ip++; 3554 NEED_IP(1); 3555 } 3556 t += 7 + *ip++; 3557 } 3558#if defined(COPY_DICT) 3559#if defined(LZO1Z) 3560 m_off += (ip[0] << 6) + (ip[1] >> 2); 3561#else 3562 m_off += (ip[0] >> 2) + (ip[1] << 6); 3563#endif 3564 ip += 2; 3565 if (m_off == 0) 3566 goto eof_found; 3567 m_off += 0x4000; 3568#if defined(LZO1Z) 3569 last_m_off = m_off; 3570#endif 3571#else 3572#if defined(LZO1Z) 3573 m_pos -= (ip[0] << 6) + (ip[1] >> 2); 3574#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 3575 m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; 3576#else 3577 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 3578#endif 3579 ip += 2; 3580 if (m_pos == op) 3581 goto eof_found; 3582 m_pos -= 0x4000; 3583#if defined(LZO1Z) 3584 last_m_off = pd((const lzo_bytep)op, m_pos); 3585#endif 3586#endif 3587 } 3588 else 3589 { 3590#if defined(COPY_DICT) 3591#if defined(LZO1Z) 3592 m_off = 1 + (t << 6) + (*ip++ >> 2); 3593 last_m_off = m_off; 3594#else 3595 m_off = 1 + (t >> 2) + (*ip++ << 2); 3596#endif 3597 NEED_OP(2); 3598 t = 2; COPY_DICT(t,m_off) 3599#else 3600#if defined(LZO1Z) 3601 t = 1 + (t << 6) + (*ip++ >> 2); 3602 m_pos = op - t; 3603 last_m_off = t; 3604#else 3605 m_pos = op - 1; 3606 m_pos -= t >> 2; 3607 m_pos -= *ip++ << 2; 3608#endif 3609 TEST_LB(m_pos); NEED_OP(2); 3610 *op++ = *m_pos++; *op++ = *m_pos; 3611#endif 3612 goto match_done; 3613 } 3614 3615#if defined(COPY_DICT) 3616 3617 NEED_OP(t+3-1); 3618 t += 3-1; COPY_DICT(t,m_off) 3619 3620#else 3621 3622 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 3623#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 3624#if !defined(LZO_UNALIGNED_OK_4) 3625 if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 3626 { 3627 assert((op - m_pos) >= 4); 3628#else 3629 if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 3630 { 3631#endif 3632 COPY4(op,m_pos); 3633 op += 4; m_pos += 4; t -= 4 - (3 - 1); 3634 do { 3635 COPY4(op,m_pos); 3636 op += 4; m_pos += 4; t -= 4; 3637 } while (t >= 4); 3638 if (t > 0) do *op++ = *m_pos++; while (--t > 0); 3639 } 3640 else 3641#endif 3642 { 3643copy_match: 3644 *op++ = *m_pos++; *op++ = *m_pos++; 3645 do *op++ = *m_pos++; while (--t > 0); 3646 } 3647 3648#endif 3649 3650match_done: 3651#if defined(LZO1Z) 3652 t = ip[-1] & 3; 3653#else 3654 t = ip[-2] & 3; 3655#endif 3656 if (t == 0) 3657 break; 3658 3659match_next: 3660 assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); 3661#if 0 3662 do *op++ = *ip++; while (--t > 0); 3663#else 3664 *op++ = *ip++; 3665 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 3666#endif 3667 t = *ip++; 3668 } while (TEST_IP && TEST_OP); 3669 } 3670 3671#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) 3672 *out_len = pd(op, out); 3673 return LZO_E_EOF_NOT_FOUND; 3674#endif 3675 3676eof_found: 3677 assert(t == 1); 3678 *out_len = pd(op, out); 3679 return (ip == ip_end ? LZO_E_OK : 3680 (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 3681 3682#if defined(HAVE_NEED_IP) 3683input_overrun: 3684 *out_len = pd(op, out); 3685 return LZO_E_INPUT_OVERRUN; 3686#endif 3687 3688#if defined(HAVE_NEED_OP) 3689output_overrun: 3690 *out_len = pd(op, out); 3691 return LZO_E_OUTPUT_OVERRUN; 3692#endif 3693 3694#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3695lookbehind_overrun: 3696 *out_len = pd(op, out); 3697 return LZO_E_LOOKBEHIND_OVERRUN; 3698#endif 3699} 3700 3701#endif 3702 3703#define LZO_TEST_OVERRUN 1 3704#undef DO_DECOMPRESS 3705#define DO_DECOMPRESS lzo1x_decompress_safe 3706 3707#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE) 3708 3709#if defined(LZO_TEST_OVERRUN) 3710# if !defined(LZO_TEST_OVERRUN_INPUT) 3711# define LZO_TEST_OVERRUN_INPUT 2 3712# endif 3713# if !defined(LZO_TEST_OVERRUN_OUTPUT) 3714# define LZO_TEST_OVERRUN_OUTPUT 2 3715# endif 3716# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3717# define LZO_TEST_OVERRUN_LOOKBEHIND 1 3718# endif 3719#endif 3720 3721#undef TEST_IP 3722#undef TEST_OP 3723#undef TEST_LB 3724#undef TEST_LBO 3725#undef NEED_IP 3726#undef NEED_OP 3727#undef HAVE_TEST_IP 3728#undef HAVE_TEST_OP 3729#undef HAVE_NEED_IP 3730#undef HAVE_NEED_OP 3731#undef HAVE_ANY_IP 3732#undef HAVE_ANY_OP 3733 3734#if defined(LZO_TEST_OVERRUN_INPUT) 3735# if (LZO_TEST_OVERRUN_INPUT >= 1) 3736# define TEST_IP (ip < ip_end) 3737# endif 3738# if (LZO_TEST_OVERRUN_INPUT >= 2) 3739# define NEED_IP(x) \ 3740 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 3741# endif 3742#endif 3743 3744#if defined(LZO_TEST_OVERRUN_OUTPUT) 3745# if (LZO_TEST_OVERRUN_OUTPUT >= 1) 3746# define TEST_OP (op <= op_end) 3747# endif 3748# if (LZO_TEST_OVERRUN_OUTPUT >= 2) 3749# undef TEST_OP 3750# define NEED_OP(x) \ 3751 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 3752# endif 3753#endif 3754 3755#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3756# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun 3757# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun 3758#else 3759# define TEST_LB(m_pos) ((void) 0) 3760# define TEST_LBO(m_pos,o) ((void) 0) 3761#endif 3762 3763#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 3764# define TEST_IP (ip < ip_end) 3765#endif 3766 3767#if defined(TEST_IP) 3768# define HAVE_TEST_IP 1 3769#else 3770# define TEST_IP 1 3771#endif 3772#if defined(TEST_OP) 3773# define HAVE_TEST_OP 1 3774#else 3775# define TEST_OP 1 3776#endif 3777 3778#if defined(NEED_IP) 3779# define HAVE_NEED_IP 1 3780#else 3781# define NEED_IP(x) ((void) 0) 3782#endif 3783#if defined(NEED_OP) 3784# define HAVE_NEED_OP 1 3785#else 3786# define NEED_OP(x) ((void) 0) 3787#endif 3788 3789#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 3790# define HAVE_ANY_IP 1 3791#endif 3792#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 3793# define HAVE_ANY_OP 1 3794#endif 3795 3796#if defined(DO_DECOMPRESS) 3797LZO_PUBLIC(int) 3798DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 3799 lzo_bytep out, lzo_uintp out_len, 3800 lzo_voidp wrkmem ) 3801#endif 3802{ 3803 register lzo_bytep op; 3804 register const lzo_bytep ip; 3805 register lzo_uint t; 3806#if defined(COPY_DICT) 3807 lzo_uint m_off; 3808 const lzo_bytep dict_end; 3809#else 3810 register const lzo_bytep m_pos; 3811#endif 3812 3813 const lzo_bytep const ip_end = in + in_len; 3814#if defined(HAVE_ANY_OP) 3815 lzo_bytep const op_end = out + *out_len; 3816#endif 3817#if defined(LZO1Z) 3818 lzo_uint last_m_off = 0; 3819#endif 3820 3821 LZO_UNUSED(wrkmem); 3822 3823#if defined(COPY_DICT) 3824 if (dict) 3825 { 3826 if (dict_len > M4_MAX_OFFSET) 3827 { 3828 dict += dict_len - M4_MAX_OFFSET; 3829 dict_len = M4_MAX_OFFSET; 3830 } 3831 dict_end = dict + dict_len; 3832 } 3833 else 3834 { 3835 dict_len = 0; 3836 dict_end = NULL; 3837 } 3838#endif 3839 3840 *out_len = 0; 3841 3842 op = out; 3843 ip = in; 3844 3845 if (*ip > 17) 3846 { 3847 t = *ip++ - 17; 3848 if (t < 4) 3849 goto match_next; 3850 assert(t > 0); NEED_OP(t); NEED_IP(t+1); 3851 do *op++ = *ip++; while (--t > 0); 3852 goto first_literal_run; 3853 } 3854 3855 while (TEST_IP && TEST_OP) 3856 { 3857 t = *ip++; 3858 if (t >= 16) 3859 goto match; 3860 if (t == 0) 3861 { 3862 NEED_IP(1); 3863 while (*ip == 0) 3864 { 3865 t += 255; 3866 ip++; 3867 NEED_IP(1); 3868 } 3869 t += 15 + *ip++; 3870 } 3871 assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); 3872#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 3873#if !defined(LZO_UNALIGNED_OK_4) 3874 if (PTR_ALIGNED2_4(op,ip)) 3875 { 3876#endif 3877 COPY4(op,ip); 3878 op += 4; ip += 4; 3879 if (--t > 0) 3880 { 3881 if (t >= 4) 3882 { 3883 do { 3884 COPY4(op,ip); 3885 op += 4; ip += 4; t -= 4; 3886 } while (t >= 4); 3887 if (t > 0) do *op++ = *ip++; while (--t > 0); 3888 } 3889 else 3890 do *op++ = *ip++; while (--t > 0); 3891 } 3892#if !defined(LZO_UNALIGNED_OK_4) 3893 } 3894 else 3895#endif 3896#endif 3897#if !defined(LZO_UNALIGNED_OK_4) 3898 { 3899 *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 3900 do *op++ = *ip++; while (--t > 0); 3901 } 3902#endif 3903 3904first_literal_run: 3905 3906 t = *ip++; 3907 if (t >= 16) 3908 goto match; 3909#if defined(COPY_DICT) 3910#if defined(LZO1Z) 3911 m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 3912 last_m_off = m_off; 3913#else 3914 m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 3915#endif 3916 NEED_OP(3); 3917 t = 3; COPY_DICT(t,m_off) 3918#else 3919#if defined(LZO1Z) 3920 t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 3921 m_pos = op - t; 3922 last_m_off = t; 3923#else 3924 m_pos = op - (1 + M2_MAX_OFFSET); 3925 m_pos -= t >> 2; 3926 m_pos -= *ip++ << 2; 3927#endif 3928 TEST_LB(m_pos); NEED_OP(3); 3929 *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 3930#endif 3931 goto match_done; 3932 3933 do { 3934match: 3935 if (t >= 64) 3936 { 3937#if defined(COPY_DICT) 3938#if defined(LZO1X) 3939 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 3940 t = (t >> 5) - 1; 3941#elif defined(LZO1Y) 3942 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 3943 t = (t >> 4) - 3; 3944#elif defined(LZO1Z) 3945 m_off = t & 0x1f; 3946 if (m_off >= 0x1c) 3947 m_off = last_m_off; 3948 else 3949 { 3950 m_off = 1 + (m_off << 6) + (*ip++ >> 2); 3951 last_m_off = m_off; 3952 } 3953 t = (t >> 5) - 1; 3954#endif 3955#else 3956#if defined(LZO1X) 3957 m_pos = op - 1; 3958 m_pos -= (t >> 2) & 7; 3959 m_pos -= *ip++ << 3; 3960 t = (t >> 5) - 1; 3961#elif defined(LZO1Y) 3962 m_pos = op - 1; 3963 m_pos -= (t >> 2) & 3; 3964 m_pos -= *ip++ << 2; 3965 t = (t >> 4) - 3; 3966#elif defined(LZO1Z) 3967 { 3968 lzo_uint off = t & 0x1f; 3969 m_pos = op; 3970 if (off >= 0x1c) 3971 { 3972 assert(last_m_off > 0); 3973 m_pos -= last_m_off; 3974 } 3975 else 3976 { 3977 off = 1 + (off << 6) + (*ip++ >> 2); 3978 m_pos -= off; 3979 last_m_off = off; 3980 } 3981 } 3982 t = (t >> 5) - 1; 3983#endif 3984 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 3985 goto copy_match; 3986#endif 3987 } 3988 else if (t >= 32) 3989 { 3990 t &= 31; 3991 if (t == 0) 3992 { 3993 NEED_IP(1); 3994 while (*ip == 0) 3995 { 3996 t += 255; 3997 ip++; 3998 NEED_IP(1); 3999 } 4000 t += 31 + *ip++; 4001 } 4002#if defined(COPY_DICT) 4003#if defined(LZO1Z) 4004 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 4005 last_m_off = m_off; 4006#else 4007 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 4008#endif 4009#else 4010#if defined(LZO1Z) 4011 { 4012 lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 4013 m_pos = op - off; 4014 last_m_off = off; 4015 } 4016#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 4017 m_pos = op - 1; 4018 m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; 4019#else 4020 m_pos = op - 1; 4021 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 4022#endif 4023#endif 4024 ip += 2; 4025 } 4026 else if (t >= 16) 4027 { 4028#if defined(COPY_DICT) 4029 m_off = (t & 8) << 11; 4030#else 4031 m_pos = op; 4032 m_pos -= (t & 8) << 11; 4033#endif 4034 t &= 7; 4035 if (t == 0) 4036 { 4037 NEED_IP(1); 4038 while (*ip == 0) 4039 { 4040 t += 255; 4041 ip++; 4042 NEED_IP(1); 4043 } 4044 t += 7 + *ip++; 4045 } 4046#if defined(COPY_DICT) 4047#if defined(LZO1Z) 4048 m_off += (ip[0] << 6) + (ip[1] >> 2); 4049#else 4050 m_off += (ip[0] >> 2) + (ip[1] << 6); 4051#endif 4052 ip += 2; 4053 if (m_off == 0) 4054 goto eof_found; 4055 m_off += 0x4000; 4056#if defined(LZO1Z) 4057 last_m_off = m_off; 4058#endif 4059#else 4060#if defined(LZO1Z) 4061 m_pos -= (ip[0] << 6) + (ip[1] >> 2); 4062#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 4063 m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; 4064#else 4065 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 4066#endif 4067 ip += 2; 4068 if (m_pos == op) 4069 goto eof_found; 4070 m_pos -= 0x4000; 4071#if defined(LZO1Z) 4072 last_m_off = pd((const lzo_bytep)op, m_pos); 4073#endif 4074#endif 4075 } 4076 else 4077 { 4078#if defined(COPY_DICT) 4079#if defined(LZO1Z) 4080 m_off = 1 + (t << 6) + (*ip++ >> 2); 4081 last_m_off = m_off; 4082#else 4083 m_off = 1 + (t >> 2) + (*ip++ << 2); 4084#endif 4085 NEED_OP(2); 4086 t = 2; COPY_DICT(t,m_off) 4087#else 4088#if defined(LZO1Z) 4089 t = 1 + (t << 6) + (*ip++ >> 2); 4090 m_pos = op - t; 4091 last_m_off = t; 4092#else 4093 m_pos = op - 1; 4094 m_pos -= t >> 2; 4095 m_pos -= *ip++ << 2; 4096#endif 4097 TEST_LB(m_pos); NEED_OP(2); 4098 *op++ = *m_pos++; *op++ = *m_pos; 4099#endif 4100 goto match_done; 4101 } 4102 4103#if defined(COPY_DICT) 4104 4105 NEED_OP(t+3-1); 4106 t += 3-1; COPY_DICT(t,m_off) 4107 4108#else 4109 4110 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 4111#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 4112#if !defined(LZO_UNALIGNED_OK_4) 4113 if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 4114 { 4115 assert((op - m_pos) >= 4); 4116#else 4117 if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 4118 { 4119#endif 4120 COPY4(op,m_pos); 4121 op += 4; m_pos += 4; t -= 4 - (3 - 1); 4122 do { 4123 COPY4(op,m_pos); 4124 op += 4; m_pos += 4; t -= 4; 4125 } while (t >= 4); 4126 if (t > 0) do *op++ = *m_pos++; while (--t > 0); 4127 } 4128 else 4129#endif 4130 { 4131copy_match: 4132 *op++ = *m_pos++; *op++ = *m_pos++; 4133 do *op++ = *m_pos++; while (--t > 0); 4134 } 4135 4136#endif 4137 4138match_done: 4139#if defined(LZO1Z) 4140 t = ip[-1] & 3; 4141#else 4142 t = ip[-2] & 3; 4143#endif 4144 if (t == 0) 4145 break; 4146 4147match_next: 4148 assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); 4149#if 0 4150 do *op++ = *ip++; while (--t > 0); 4151#else 4152 *op++ = *ip++; 4153 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 4154#endif 4155 t = *ip++; 4156 } while (TEST_IP && TEST_OP); 4157 } 4158 4159#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) 4160 *out_len = pd(op, out); 4161 return LZO_E_EOF_NOT_FOUND; 4162#endif 4163 4164eof_found: 4165 assert(t == 1); 4166 *out_len = pd(op, out); 4167 return (ip == ip_end ? LZO_E_OK : 4168 (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 4169 4170#if defined(HAVE_NEED_IP) 4171input_overrun: 4172 *out_len = pd(op, out); 4173 return LZO_E_INPUT_OVERRUN; 4174#endif 4175 4176#if defined(HAVE_NEED_OP) 4177output_overrun: 4178 *out_len = pd(op, out); 4179 return LZO_E_OUTPUT_OVERRUN; 4180#endif 4181 4182#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 4183lookbehind_overrun: 4184 *out_len = pd(op, out); 4185 return LZO_E_LOOKBEHIND_OVERRUN; 4186#endif 4187} 4188 4189#endif 4190 4191/***** End of minilzo.c *****/ 4192 4193