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