1 /* minilzo.c -- mini subset of the LZO real-time data compression library
3 This file is part of the LZO real-time data compression library.
5 Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
6 Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
7 Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
8 Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
9 Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
10 Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
11 Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
12 Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
13 Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
14 Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
17 The LZO library is free software; you can redistribute it and/or
18 modify it under the terms of the GNU General Public License,
19 version 2, as published by the Free Software Foundation.
21 The LZO library is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
26 You should have received a copy of the GNU General Public License
27 along with the LZO library; see the file COPYING.
28 If not, write to the Free Software Foundation, Inc.,
29 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
31 Markus F.X.J. Oberhumer
32 <markus@oberhumer.com>
33 http://www.oberhumer.com/opensource/lzo/
38 * the full LZO package can be found at
39 * http://www.oberhumer.com/opensource/lzo/
42 #define __LZO_IN_MINILZO
45 #if defined(LZO_CFG_FREESTANDING)
46 # undef MINILZO_HAVE_CONFIG_H
47 # define LZO_LIBC_FREESTANDING 1
48 # define LZO_OS_FREESTANDING 1
51 #ifdef MINILZO_HAVE_CONFIG_H
56 #if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS)
58 #ifndef __LZODEFS_H_INCLUDED
59 #define __LZODEFS_H_INCLUDED 1
61 #if defined(__CYGWIN32__) && !defined(__CYGWIN__)
62 # define __CYGWIN__ __CYGWIN32__
64 #if defined(__IBMCPP__) && !defined(__IBMC__)
65 # define __IBMC__ __IBMCPP__
67 #if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER)
68 # define __INTEL_COMPILER __ICL
70 #if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE)
71 # define _ALL_SOURCE 1
73 #if defined(__mips__) && defined(__R5900__)
74 # if !defined(__LONG_MAX__)
75 # define __LONG_MAX__ 9223372036854775807L
78 #if defined(__INTEL_COMPILER) && defined(__linux__)
79 # pragma warning(disable: 193)
81 #if defined(__KEIL__) && defined(__C166__)
82 # pragma warning disable = 322
83 #elif 0 && defined(__C251__)
84 # pragma warning disable = 322
86 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__)
87 # if (_MSC_VER >= 1300)
88 # pragma warning(disable: 4668)
91 #if 0 && defined(__WATCOMC__)
92 # if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060)
93 # pragma warning 203 9
96 #if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__)
100 #define LZO_0xffffL 0xfffful
101 #define LZO_0xffffffffL 0xfffffffful
103 #define LZO_0xffffL 65535ul
104 #define LZO_0xffffffffL 4294967295ul
106 #if (LZO_0xffffL == LZO_0xffffffffL)
107 # error "your preprocessor is broken 1"
109 #if (16ul * 16384ul != 262144ul)
110 # error "your preprocessor is broken 2"
113 #if (32767 >= 4294967295ul)
114 # error "your preprocessor is broken 3"
116 #if (65535u >= 4294967295ul)
117 # error "your preprocessor is broken 4"
120 #if (UINT_MAX == LZO_0xffffL)
121 #if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__)
125 # if !defined(_MSDOS)
128 #elif 0 && defined(__VERSION) && defined(MB_LEN_MAX)
129 # if (__VERSION == 520) && (MB_LEN_MAX == 1)
130 # if !defined(__AZTEC_C__)
131 # define __AZTEC_C__ __VERSION
133 # if !defined(__DOS__)
139 #if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL)
140 # define ptrdiff_t long
141 # define _PTRDIFF_T_DEFINED
143 #if (UINT_MAX == LZO_0xffffL)
144 # undef __LZO_RENAME_A
145 # undef __LZO_RENAME_B
146 # if defined(__AZTEC_C__) && defined(__DOS__)
147 # define __LZO_RENAME_A 1
148 # elif defined(_MSC_VER) && defined(MSDOS)
149 # if (_MSC_VER < 600)
150 # define __LZO_RENAME_A 1
151 # elif (_MSC_VER < 700)
152 # define __LZO_RENAME_B 1
154 # elif defined(__TSC__) && defined(__OS2__)
155 # define __LZO_RENAME_A 1
156 # elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)
157 # define __LZO_RENAME_A 1
158 # elif defined(__PACIFIC__) && defined(DOS)
162 # if !defined(__near)
166 # if defined(__LZO_RENAME_A)
167 # if !defined(__cdecl)
168 # define __cdecl cdecl
173 # if !defined(__huge)
176 # if !defined(__near)
179 # if !defined(__pascal)
180 # define __pascal pascal
182 # if !defined(__huge)
185 # elif defined(__LZO_RENAME_B)
186 # if !defined(__cdecl)
187 # define __cdecl _cdecl
192 # if !defined(__huge)
193 # define __huge _huge
195 # if !defined(__near)
196 # define __near _near
198 # if !defined(__pascal)
199 # define __pascal _pascal
201 # elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
202 # if !defined(__cdecl)
203 # define __cdecl cdecl
205 # if !defined(__pascal)
206 # define __pascal pascal
209 # undef __LZO_RENAME_A
210 # undef __LZO_RENAME_B
212 #if (UINT_MAX == LZO_0xffffL)
213 #if defined(__AZTEC_C__) && defined(__DOS__)
214 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
215 #elif defined(_MSC_VER) && defined(MSDOS)
216 # if (_MSC_VER < 600)
217 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
219 # if (_MSC_VER < 700)
220 # define LZO_BROKEN_INTEGRAL_PROMOTION 1
221 # define LZO_BROKEN_SIZEOF 1
223 #elif defined(__PACIFIC__) && defined(DOS)
224 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
225 #elif defined(__TURBOC__) && defined(__MSDOS__)
226 # if (__TURBOC__ < 0x0150)
227 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
228 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
229 # define LZO_BROKEN_INTEGRAL_PROMOTION 1
231 # if (__TURBOC__ < 0x0200)
232 # define LZO_BROKEN_SIZEOF 1
234 # if (__TURBOC__ < 0x0400) && defined(__cplusplus)
235 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
237 #elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
238 # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
239 # define LZO_BROKEN_SIZEOF 1
242 #if defined(__WATCOMC__) && (__WATCOMC__ < 900)
243 # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
245 #define LZO_CPP_STRINGIZE(x) #x
246 #define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x)
247 #define LZO_CPP_CONCAT2(a,b) a ## b
248 #define LZO_CPP_CONCAT3(a,b,c) a ## b ## c
249 #define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d
250 #define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
251 #define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b)
252 #define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c)
253 #define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d)
254 #define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e)
255 #define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o))
256 #if 1 && defined(__cplusplus)
257 # if !defined(__STDC_CONSTANT_MACROS)
258 # define __STDC_CONSTANT_MACROS 1
260 # if !defined(__STDC_LIMIT_MACROS)
261 # define __STDC_LIMIT_MACROS 1
264 #if defined(__cplusplus)
265 # define LZO_EXTERN_C extern "C"
267 # define LZO_EXTERN_C extern
269 #if !defined(__LZO_OS_OVERRIDE)
270 #if defined(LZO_OS_FREESTANDING)
271 # define LZO_INFO_OS "freestanding"
272 #elif defined(LZO_OS_EMBEDDED)
273 # define LZO_INFO_OS "embedded"
274 #elif defined(__CYGWIN__) && defined(__GNUC__)
275 # define LZO_OS_CYGWIN 1
276 # define LZO_INFO_OS "cygwin"
277 #elif defined(__EMX__) && defined(__GNUC__)
278 # define LZO_OS_EMX 1
279 # define LZO_INFO_OS "emx"
280 #elif defined(__BEOS__)
281 # define LZO_OS_BEOS 1
282 # define LZO_INFO_OS "beos"
283 #elif defined(__Lynx__)
284 # define LZO_OS_LYNXOS 1
285 # define LZO_INFO_OS "lynxos"
286 #elif defined(__OS400__)
287 # define LZO_OS_OS400 1
288 # define LZO_INFO_OS "os400"
289 #elif defined(__QNX__)
290 # define LZO_OS_QNX 1
291 # define LZO_INFO_OS "qnx"
292 #elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460)
293 # define LZO_OS_DOS32 1
294 # define LZO_INFO_OS "dos32"
295 #elif defined(__BORLANDC__) && defined(__DPMI16__)
296 # define LZO_OS_DOS16 1
297 # define LZO_INFO_OS "dos16"
298 #elif defined(__ZTC__) && defined(DOS386)
299 # define LZO_OS_DOS32 1
300 # define LZO_INFO_OS "dos32"
301 #elif defined(__OS2__) || defined(__OS2V2__)
302 # if (UINT_MAX == LZO_0xffffL)
303 # define LZO_OS_OS216 1
304 # define LZO_INFO_OS "os216"
305 # elif (UINT_MAX == LZO_0xffffffffL)
306 # define LZO_OS_OS2 1
307 # define LZO_INFO_OS "os2"
309 # error "check your limits.h header"
311 #elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64)
312 # define LZO_OS_WIN64 1
313 # define LZO_INFO_OS "win64"
314 #elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__)
315 # define LZO_OS_WIN32 1
316 # define LZO_INFO_OS "win32"
317 #elif defined(__MWERKS__) && defined(__INTEL__)
318 # define LZO_OS_WIN32 1
319 # define LZO_INFO_OS "win32"
320 #elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
321 # if (UINT_MAX == LZO_0xffffL)
322 # define LZO_OS_WIN16 1
323 # define LZO_INFO_OS "win16"
324 # elif (UINT_MAX == LZO_0xffffffffL)
325 # define LZO_OS_WIN32 1
326 # define LZO_INFO_OS "win32"
328 # error "check your limits.h header"
330 #elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS))
331 # if (UINT_MAX == LZO_0xffffL)
332 # define LZO_OS_DOS16 1
333 # define LZO_INFO_OS "dos16"
334 # elif (UINT_MAX == LZO_0xffffffffL)
335 # define LZO_OS_DOS32 1
336 # define LZO_INFO_OS "dos32"
338 # error "check your limits.h header"
340 #elif defined(__WATCOMC__)
341 # if defined(__NT__) && (UINT_MAX == LZO_0xffffL)
342 # define LZO_OS_DOS16 1
343 # define LZO_INFO_OS "dos16"
344 # elif defined(__NT__) && (__WATCOMC__ < 1100)
345 # define LZO_OS_WIN32 1
346 # define LZO_INFO_OS "win32"
348 # error "please specify a target using the -bt compiler option"
350 #elif defined(__palmos__)
351 # define LZO_OS_PALMOS 1
352 # define LZO_INFO_OS "palmos"
353 #elif defined(__TOS__) || defined(__atarist__)
354 # define LZO_OS_TOS 1
355 # define LZO_INFO_OS "tos"
356 #elif defined(macintosh) && !defined(__ppc__)
357 # define LZO_OS_MACCLASSIC 1
358 # define LZO_INFO_OS "macclassic"
360 # define LZO_OS_VMS 1
361 # define LZO_INFO_OS "vms"
362 #elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
363 # define LZO_OS_CONSOLE 1
364 # define LZO_OS_CONSOLE_PS2 1
365 # define LZO_INFO_OS "console"
366 # define LZO_INFO_OS_CONSOLE "ps2"
367 #elif (defined(__mips__) && defined(__psp__))
368 # define LZO_OS_CONSOLE 1
369 # define LZO_OS_CONSOLE_PSP 1
370 # define LZO_INFO_OS "console"
371 # define LZO_INFO_OS_CONSOLE "psp"
373 # define LZO_OS_POSIX 1
374 # define LZO_INFO_OS "posix"
377 # if defined(_AIX) || defined(__AIX__) || defined(__aix__)
378 # define LZO_OS_POSIX_AIX 1
379 # define LZO_INFO_OS_POSIX "aix"
380 # elif defined(__FreeBSD__)
381 # define LZO_OS_POSIX_FREEBSD 1
382 # define LZO_INFO_OS_POSIX "freebsd"
383 # elif defined(__hpux__) || defined(__hpux)
384 # define LZO_OS_POSIX_HPUX 1
385 # define LZO_INFO_OS_POSIX "hpux"
386 # elif defined(__INTERIX)
387 # define LZO_OS_POSIX_INTERIX 1
388 # define LZO_INFO_OS_POSIX "interix"
389 # elif defined(__IRIX__) || defined(__irix__)
390 # define LZO_OS_POSIX_IRIX 1
391 # define LZO_INFO_OS_POSIX "irix"
392 # elif defined(__linux__) || defined(__linux)
393 # define LZO_OS_POSIX_LINUX 1
394 # define LZO_INFO_OS_POSIX "linux"
395 # elif defined(__APPLE__) || defined(__MACOS__)
396 # define LZO_OS_POSIX_MACOSX 1
397 # define LZO_INFO_OS_POSIX "macosx"
398 # elif defined(__NetBSD__)
399 # define LZO_OS_POSIX_NETBSD 1
400 # define LZO_INFO_OS_POSIX "netbsd"
401 # elif defined(__OpenBSD__)
402 # define LZO_OS_POSIX_OPENBSD 1
403 # define LZO_INFO_OS_POSIX "openbsd"
404 # elif defined(__osf__)
405 # define LZO_OS_POSIX_OSF 1
406 # define LZO_INFO_OS_POSIX "osf"
407 # elif defined(__solaris__) || defined(__sun)
408 # if defined(__SVR4) || defined(__svr4__)
409 # define LZO_OS_POSIX_SOLARIS 1
410 # define LZO_INFO_OS_POSIX "solaris"
412 # define LZO_OS_POSIX_SUNOS 1
413 # define LZO_INFO_OS_POSIX "sunos"
415 # elif defined(__ultrix__) || defined(__ultrix)
416 # define LZO_OS_POSIX_ULTRIX 1
417 # define LZO_INFO_OS_POSIX "ultrix"
419 # define LZO_OS_POSIX_UNKNOWN 1
420 # define LZO_INFO_OS_POSIX "unknown"
424 #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
425 # if (UINT_MAX != LZO_0xffffL)
426 # error "this should not happen"
428 # if (ULONG_MAX != LZO_0xffffffffL)
429 # error "this should not happen"
432 #if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64)
433 # if (UINT_MAX != LZO_0xffffffffL)
434 # error "this should not happen"
436 # if (ULONG_MAX != LZO_0xffffffffL)
437 # error "this should not happen"
440 #if defined(CIL) && defined(_GNUCC) && defined(__GNUC__)
441 # define LZO_CC_CILLY 1
442 # define LZO_INFO_CC "Cilly"
443 # if defined(__CILLY__)
444 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__CILLY__)
446 # define LZO_INFO_CCVER "unknown"
448 #elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__)
449 # define LZO_CC_SDCC 1
450 # define LZO_INFO_CC "sdcc"
451 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(SDCC)
452 #elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__)
453 # define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__)
454 # define LZO_INFO_CC "Pathscale C"
455 # define LZO_INFO_CCVER __PATHSCALE__
456 #elif defined(__INTEL_COMPILER)
457 # define LZO_CC_INTELC 1
458 # define LZO_INFO_CC "Intel C"
459 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__INTEL_COMPILER)
460 #elif defined(__POCC__) && defined(_WIN32)
461 # define LZO_CC_PELLESC 1
462 # define LZO_INFO_CC "Pelles C"
463 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__POCC__)
464 #elif defined(__llvm__) && defined(__GNUC__) && defined(__VERSION__)
465 # define LZO_CC_LLVM 1
466 # define LZO_INFO_CC "llvm-gcc"
467 # define LZO_INFO_CCVER __VERSION__
468 #elif defined(__GNUC__) && defined(__VERSION__)
469 # if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
470 # define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
471 # elif defined(__GNUC_MINOR__)
472 # define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
474 # define LZO_CC_GNUC (__GNUC__ * 0x10000L)
476 # define LZO_INFO_CC "gcc"
477 # define LZO_INFO_CCVER __VERSION__
478 #elif defined(__AZTEC_C__)
479 # define LZO_CC_AZTECC 1
480 # define LZO_INFO_CC "Aztec C"
481 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__AZTEC_C__)
482 #elif defined(__BORLANDC__)
483 # define LZO_CC_BORLANDC 1
484 # define LZO_INFO_CC "Borland C"
485 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__BORLANDC__)
486 #elif defined(__DMC__) && defined(__SC__)
487 # define LZO_CC_DMC 1
488 # define LZO_INFO_CC "Digital Mars C"
489 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__DMC__)
490 #elif defined(__DECC)
491 # define LZO_CC_DECC 1
492 # define LZO_INFO_CC "DEC C"
493 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__DECC)
494 #elif defined(__HIGHC__)
495 # define LZO_CC_HIGHC 1
496 # define LZO_INFO_CC "MetaWare High C"
497 # define LZO_INFO_CCVER "unknown"
498 #elif defined(__IBMC__)
499 # define LZO_CC_IBMC 1
500 # define LZO_INFO_CC "IBM C"
501 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__IBMC__)
502 #elif defined(__KEIL__) && defined(__C166__)
503 # define LZO_CC_KEILC 1
504 # define LZO_INFO_CC "Keil C"
505 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__C166__)
506 #elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL)
507 # define LZO_CC_LCCWIN32 1
508 # define LZO_INFO_CC "lcc-win32"
509 # define LZO_INFO_CCVER "unknown"
510 #elif defined(__LCC__)
511 # define LZO_CC_LCC 1
512 # define LZO_INFO_CC "lcc"
513 # if defined(__LCC_VERSION__)
514 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__LCC_VERSION__)
516 # define LZO_INFO_CCVER "unknown"
518 #elif defined(_MSC_VER)
519 # define LZO_CC_MSC 1
520 # define LZO_INFO_CC "Microsoft C"
521 # if defined(_MSC_FULL_VER)
522 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(_MSC_VER) "." LZO_CPP_MACRO_EXPAND(_MSC_FULL_VER)
524 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(_MSC_VER)
526 #elif defined(__MWERKS__)
527 # define LZO_CC_MWERKS 1
528 # define LZO_INFO_CC "Metrowerks C"
529 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__MWERKS__)
530 #elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386)
531 # define LZO_CC_NDPC 1
532 # define LZO_INFO_CC "Microway NDP C"
533 # define LZO_INFO_CCVER "unknown"
534 #elif defined(__PACIFIC__)
535 # define LZO_CC_PACIFICC 1
536 # define LZO_INFO_CC "Pacific C"
537 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__PACIFIC__)
538 #elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__))
539 # define LZO_CC_PGI 1
540 # define LZO_INFO_CC "Portland Group PGI C"
541 # define LZO_INFO_CCVER "unknown"
542 #elif defined(__PUREC__) && defined(__TOS__)
543 # define LZO_CC_PUREC 1
544 # define LZO_INFO_CC "Pure C"
545 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__PUREC__)
546 #elif defined(__SC__) && defined(__ZTC__)
547 # define LZO_CC_SYMANTECC 1
548 # define LZO_INFO_CC "Symantec C"
549 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__SC__)
550 #elif defined(__SUNPRO_C)
551 # define LZO_CC_SUNPROC 1
552 # define LZO_INFO_CC "Sun C"
553 # define LZO_INFO_CCVER "unknown"
554 #elif defined(__TINYC__)
555 # define LZO_CC_TINYC 1
556 # define LZO_INFO_CC "Tiny C"
557 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__TINYC__)
558 #elif defined(__TSC__)
559 # define LZO_CC_TOPSPEEDC 1
560 # define LZO_INFO_CC "TopSpeed C"
561 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__TSC__)
562 #elif defined(__WATCOMC__)
563 # define LZO_CC_WATCOMC 1
564 # define LZO_INFO_CC "Watcom C"
565 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__WATCOMC__)
566 #elif defined(__TURBOC__)
567 # define LZO_CC_TURBOC 1
568 # define LZO_INFO_CC "Turbo C"
569 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__TURBOC__)
570 #elif defined(__ZTC__)
571 # define LZO_CC_ZORTECHC 1
572 # define LZO_INFO_CC "Zortech C"
573 # if (__ZTC__ == 0x310)
574 # define LZO_INFO_CCVER "0x310"
576 # define LZO_INFO_CCVER LZO_CPP_MACRO_EXPAND(__ZTC__)
579 # define LZO_CC_UNKNOWN 1
580 # define LZO_INFO_CC "unknown"
581 # define LZO_INFO_CCVER "unknown"
583 #if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER)
584 # error "LZO_CC_MSC: _MSC_FULL_VER is not defined"
586 #if !defined(__LZO_ARCH_OVERRIDE)
587 #if defined(LZO_ARCH_GENERIC)
588 # define LZO_INFO_ARCH "generic"
589 #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
590 # define LZO_ARCH_I086 1
591 # define LZO_ARCH_IA16 1
592 # define LZO_INFO_ARCH "i086"
593 #elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)
594 # define LZO_ARCH_ALPHA 1
595 # define LZO_INFO_ARCH "alpha"
596 #elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
597 # define LZO_ARCH_AMD64 1
598 # define LZO_INFO_ARCH "amd64"
599 #elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB))
600 # define LZO_ARCH_ARM 1
601 # define LZO_ARCH_ARM_THUMB 1
602 # define LZO_INFO_ARCH "arm_thumb"
603 #elif defined(__arm__) || defined(_M_ARM)
604 # define LZO_ARCH_ARM 1
605 # define LZO_INFO_ARCH "arm"
606 #elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__)
607 # define LZO_ARCH_AVR 1
608 # define LZO_INFO_ARCH "avr"
609 #elif defined(__bfin__)
610 # define LZO_ARCH_BLACKFIN 1
611 # define LZO_INFO_ARCH "blackfin"
612 #elif (UINT_MAX == LZO_0xffffL) && defined(__C166__)
613 # define LZO_ARCH_C166 1
614 # define LZO_INFO_ARCH "c166"
615 #elif defined(__cris__)
616 # define LZO_ARCH_CRIS 1
617 # define LZO_INFO_ARCH "cris"
618 #elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
619 # define LZO_ARCH_H8300 1
620 # define LZO_INFO_ARCH "h8300"
621 #elif defined(__hppa__) || defined(__hppa)
622 # define LZO_ARCH_HPPA 1
623 # define LZO_INFO_ARCH "hppa"
624 #elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386)
625 # define LZO_ARCH_I386 1
626 # define LZO_ARCH_IA32 1
627 # define LZO_INFO_ARCH "i386"
628 #elif (LZO_CC_ZORTECHC && defined(__I86__))
629 # define LZO_ARCH_I386 1
630 # define LZO_ARCH_IA32 1
631 # define LZO_INFO_ARCH "i386"
632 #elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386)
633 # define LZO_ARCH_I386 1
634 # define LZO_ARCH_IA32 1
635 # define LZO_INFO_ARCH "i386"
636 #elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
637 # define LZO_ARCH_IA64 1
638 # define LZO_INFO_ARCH "ia64"
639 #elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__)
640 # define LZO_ARCH_M16C 1
641 # define LZO_INFO_ARCH "m16c"
642 #elif defined(__m32r__)
643 # define LZO_ARCH_M32R 1
644 # define LZO_INFO_ARCH "m32r"
645 #elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(_M_M68K)
646 # define LZO_ARCH_M68K 1
647 # define LZO_INFO_ARCH "m68k"
648 #elif (UINT_MAX == LZO_0xffffL) && defined(__C251__)
649 # define LZO_ARCH_MCS251 1
650 # define LZO_INFO_ARCH "mcs251"
651 #elif (UINT_MAX == LZO_0xffffL) && defined(__C51__)
652 # define LZO_ARCH_MCS51 1
653 # define LZO_INFO_ARCH "mcs51"
654 #elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000)
655 # define LZO_ARCH_MIPS 1
656 # define LZO_INFO_ARCH "mips"
657 #elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__)
658 # define LZO_ARCH_MSP430 1
659 # define LZO_INFO_ARCH "msp430"
660 #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC)
661 # define LZO_ARCH_POWERPC 1
662 # define LZO_INFO_ARCH "powerpc"
663 #elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x)
664 # define LZO_ARCH_S390 1
665 # define LZO_INFO_ARCH "s390"
666 #elif defined(__sh__) || defined(_M_SH)
667 # define LZO_ARCH_SH 1
668 # define LZO_INFO_ARCH "sh"
669 #elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8)
670 # define LZO_ARCH_SPARC 1
671 # define LZO_INFO_ARCH "sparc"
672 #elif (UINT_MAX == LZO_0xffffL) && defined(__z80)
673 # define LZO_ARCH_Z80 1
674 # define LZO_INFO_ARCH "z80"
676 # define LZO_ARCH_UNKNOWN 1
677 # define LZO_INFO_ARCH "unknown"
680 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2)
681 # error "FIXME - missing define for CPU architecture"
683 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32)
684 # error "FIXME - missing WIN32 define for CPU architecture"
686 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64)
687 # error "FIXME - missing WIN64 define for CPU architecture"
689 #if (LZO_OS_OS216 || LZO_OS_WIN16)
690 # define LZO_ARCH_I086PM 1
691 # define LZO_ARCH_IA16PM 1
692 #elif 1 && (LZO_OS_DOS16 && defined(BLX286))
693 # define LZO_ARCH_I086PM 1
694 # define LZO_ARCH_IA16PM 1
695 #elif 1 && (LZO_OS_DOS16 && defined(DOSX286))
696 # define LZO_ARCH_I086PM 1
697 # define LZO_ARCH_IA16PM 1
698 #elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__))
699 # define LZO_ARCH_I086PM 1
700 # define LZO_ARCH_IA16PM 1
702 #if defined(LZO_ARCH_ARM_THUMB) && !defined(LZO_ARCH_ARM)
703 # error "this should not happen"
705 #if defined(LZO_ARCH_I086PM) && !defined(LZO_ARCH_I086)
706 # error "this should not happen"
709 # if (UINT_MAX != LZO_0xffffL)
710 # error "this should not happen"
712 # if (ULONG_MAX != LZO_0xffffffffL)
713 # error "this should not happen"
717 # if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__)
718 # error "this should not happen"
720 # if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__)
721 # error "this should not happen"
723 # if (ULONG_MAX != LZO_0xffffffffL)
724 # error "this should not happen"
727 #if !defined(__LZO_MM_OVERRIDE)
728 #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
729 #if (UINT_MAX != LZO_0xffffL)
730 # error "this should not happen"
732 #if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM)
733 # define LZO_MM_TINY 1
734 #elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM)
735 # define LZO_MM_HUGE 1
736 #elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL)
737 # define LZO_MM_SMALL 1
738 #elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM)
739 # define LZO_MM_MEDIUM 1
740 #elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM)
741 # define LZO_MM_COMPACT 1
742 #elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL)
743 # define LZO_MM_LARGE 1
744 #elif (LZO_CC_AZTECC)
745 # if defined(_LARGE_CODE) && defined(_LARGE_DATA)
746 # define LZO_MM_LARGE 1
747 # elif defined(_LARGE_CODE)
748 # define LZO_MM_MEDIUM 1
749 # elif defined(_LARGE_DATA)
750 # define LZO_MM_COMPACT 1
752 # define LZO_MM_SMALL 1
754 #elif (LZO_CC_ZORTECHC && defined(__VCM__))
755 # define LZO_MM_LARGE 1
757 # error "unknown memory model"
759 #define LZO_HAVE_MM_HUGE_PTR 1
760 #define LZO_HAVE_MM_HUGE_ARRAY 1
762 # undef LZO_HAVE_MM_HUGE_ARRAY
764 #if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC)
765 # undef LZO_HAVE_MM_HUGE_PTR
766 # undef LZO_HAVE_MM_HUGE_ARRAY
767 #elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
768 # undef LZO_HAVE_MM_HUGE_ARRAY
769 #elif (LZO_CC_MSC && defined(_QC))
770 # undef LZO_HAVE_MM_HUGE_ARRAY
771 # if (_MSC_VER < 600)
772 # undef LZO_HAVE_MM_HUGE_PTR
774 #elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295))
775 # undef LZO_HAVE_MM_HUGE_ARRAY
777 #if (LZO_ARCH_I086PM) && !defined(LZO_HAVE_MM_HUGE_PTR)
779 # error "this should not happen"
780 # elif (LZO_CC_ZORTECHC)
782 # error "this should not happen"
788 #if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200))
789 extern void __near __cdecl
_AHSHIFT(void);
790 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
791 #elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
792 extern void __near __cdecl
_AHSHIFT(void);
793 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
794 #elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC)
795 extern void __near __cdecl
_AHSHIFT(void);
796 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
797 #elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295))
798 extern void __near __cdecl
_AHSHIFT(void);
799 # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
800 #elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16)
801 # define LZO_MM_AHSHIFT 12
802 #elif (LZO_CC_WATCOMC)
803 extern unsigned char _HShift
;
804 # define LZO_MM_AHSHIFT ((unsigned) _HShift)
806 # error "FIXME - implement LZO_MM_AHSHIFT"
811 #elif (LZO_ARCH_C166)
812 #if !defined(__MODEL__)
813 # error "FIXME - C166 __MODEL__"
814 #elif ((__MODEL__) == 0)
815 # define LZO_MM_SMALL 1
816 #elif ((__MODEL__) == 1)
817 # define LZO_MM_SMALL 1
818 #elif ((__MODEL__) == 2)
819 # define LZO_MM_LARGE 1
820 #elif ((__MODEL__) == 3)
821 # define LZO_MM_TINY 1
822 #elif ((__MODEL__) == 4)
823 # define LZO_MM_XTINY 1
824 #elif ((__MODEL__) == 5)
825 # define LZO_MM_XSMALL 1
827 # error "FIXME - C166 __MODEL__"
829 #elif (LZO_ARCH_MCS251)
830 #if !defined(__MODEL__)
831 # error "FIXME - MCS251 __MODEL__"
832 #elif ((__MODEL__) == 0)
833 # define LZO_MM_SMALL 1
834 #elif ((__MODEL__) == 2)
835 # define LZO_MM_LARGE 1
836 #elif ((__MODEL__) == 3)
837 # define LZO_MM_TINY 1
838 #elif ((__MODEL__) == 4)
839 # define LZO_MM_XTINY 1
840 #elif ((__MODEL__) == 5)
841 # define LZO_MM_XSMALL 1
843 # error "FIXME - MCS251 __MODEL__"
845 #elif (LZO_ARCH_MCS51)
846 #if !defined(__MODEL__)
847 # error "FIXME - MCS51 __MODEL__"
848 #elif ((__MODEL__) == 1)
849 # define LZO_MM_SMALL 1
850 #elif ((__MODEL__) == 2)
851 # define LZO_MM_LARGE 1
852 #elif ((__MODEL__) == 3)
853 # define LZO_MM_TINY 1
854 #elif ((__MODEL__) == 4)
855 # define LZO_MM_XTINY 1
856 #elif ((__MODEL__) == 5)
857 # define LZO_MM_XSMALL 1
859 # error "FIXME - MCS51 __MODEL__"
862 # define LZO_MM_FLAT 1
865 # define LZO_INFO_MM "flat"
867 # define LZO_INFO_MM "tiny"
869 # define LZO_INFO_MM "small"
870 #elif (LZO_MM_MEDIUM)
871 # define LZO_INFO_MM "medium"
872 #elif (LZO_MM_COMPACT)
873 # define LZO_INFO_MM "compact"
875 # define LZO_INFO_MM "large"
877 # define LZO_INFO_MM "huge"
879 # error "unknown memory model"
882 #if defined(SIZEOF_SHORT)
883 # define LZO_SIZEOF_SHORT (SIZEOF_SHORT)
885 #if defined(SIZEOF_INT)
886 # define LZO_SIZEOF_INT (SIZEOF_INT)
888 #if defined(SIZEOF_LONG)
889 # define LZO_SIZEOF_LONG (SIZEOF_LONG)
891 #if defined(SIZEOF_LONG_LONG)
892 # define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG)
894 #if defined(SIZEOF___INT16)
895 # define LZO_SIZEOF___INT16 (SIZEOF___INT16)
897 #if defined(SIZEOF___INT32)
898 # define LZO_SIZEOF___INT32 (SIZEOF___INT32)
900 #if defined(SIZEOF___INT64)
901 # define LZO_SIZEOF___INT64 (SIZEOF___INT64)
903 #if defined(SIZEOF_VOID_P)
904 # define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P)
906 #if defined(SIZEOF_SIZE_T)
907 # define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T)
909 #if defined(SIZEOF_PTRDIFF_T)
910 # define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T)
912 #define __LZO_LSR(x,b) (((x)+0ul) >> (b))
913 #if !defined(LZO_SIZEOF_SHORT)
914 # if (USHRT_MAX == LZO_0xffffL)
915 # define LZO_SIZEOF_SHORT 2
916 # elif (__LZO_LSR(USHRT_MAX,7) == 1)
917 # define LZO_SIZEOF_SHORT 1
918 # elif (__LZO_LSR(USHRT_MAX,15) == 1)
919 # define LZO_SIZEOF_SHORT 2
920 # elif (__LZO_LSR(USHRT_MAX,31) == 1)
921 # define LZO_SIZEOF_SHORT 4
922 # elif (__LZO_LSR(USHRT_MAX,63) == 1)
923 # define LZO_SIZEOF_SHORT 8
924 # elif (__LZO_LSR(USHRT_MAX,127) == 1)
925 # define LZO_SIZEOF_SHORT 16
927 # error "LZO_SIZEOF_SHORT"
930 #if !defined(LZO_SIZEOF_INT)
931 # if (UINT_MAX == LZO_0xffffL)
932 # define LZO_SIZEOF_INT 2
933 # elif (UINT_MAX == LZO_0xffffffffL)
934 # define LZO_SIZEOF_INT 4
935 # elif (__LZO_LSR(UINT_MAX,7) == 1)
936 # define LZO_SIZEOF_INT 1
937 # elif (__LZO_LSR(UINT_MAX,15) == 1)
938 # define LZO_SIZEOF_INT 2
939 # elif (__LZO_LSR(UINT_MAX,31) == 1)
940 # define LZO_SIZEOF_INT 4
941 # elif (__LZO_LSR(UINT_MAX,63) == 1)
942 # define LZO_SIZEOF_INT 8
943 # elif (__LZO_LSR(UINT_MAX,127) == 1)
944 # define LZO_SIZEOF_INT 16
946 # error "LZO_SIZEOF_INT"
949 #if !defined(LZO_SIZEOF_LONG)
950 # if (ULONG_MAX == LZO_0xffffffffL)
951 # define LZO_SIZEOF_LONG 4
952 # elif (__LZO_LSR(ULONG_MAX,7) == 1)
953 # define LZO_SIZEOF_LONG 1
954 # elif (__LZO_LSR(ULONG_MAX,15) == 1)
955 # define LZO_SIZEOF_LONG 2
956 # elif (__LZO_LSR(ULONG_MAX,31) == 1)
957 # define LZO_SIZEOF_LONG 4
958 # elif (__LZO_LSR(ULONG_MAX,63) == 1)
959 # define LZO_SIZEOF_LONG 8
960 # elif (__LZO_LSR(ULONG_MAX,127) == 1)
961 # define LZO_SIZEOF_LONG 16
963 # error "LZO_SIZEOF_LONG"
966 #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
967 #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
968 # if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__)
969 # if (LZO_CC_GNUC >= 0x030300ul)
970 # if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0)
971 # define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG
977 #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
978 #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
979 #if (LZO_ARCH_I086 && LZO_CC_DMC)
980 #elif (LZO_CC_CILLY) && defined(__GNUC__)
981 # define LZO_SIZEOF_LONG_LONG 8
982 #elif (LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
983 # define LZO_SIZEOF_LONG_LONG 8
984 #elif ((LZO_OS_WIN32 || LZO_OS_WIN64) && LZO_CC_MSC && (_MSC_VER >= 1400))
985 # define LZO_SIZEOF_LONG_LONG 8
987 # define LZO_SIZEOF___INT64 8
988 #elif (LZO_ARCH_I386 && (LZO_CC_DMC))
989 # define LZO_SIZEOF_LONG_LONG 8
990 #elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700)))
991 # define LZO_SIZEOF_LONG_LONG 8
992 #elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__)))
993 # define LZO_SIZEOF_LONG_LONG 8
994 #elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI))
995 # define LZO_SIZEOF_LONG_LONG 8
996 #elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC))
997 # define LZO_SIZEOF___INT64 8
998 #elif (LZO_OS_WIN32 && (LZO_CC_MSC))
999 # define LZO_SIZEOF___INT64 8
1000 #elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520)))
1001 # define LZO_SIZEOF___INT64 8
1002 #elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100)))
1003 # define LZO_SIZEOF___INT64 8
1004 #elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64))
1005 # define LZO_SIZEOF___INT64 8
1006 #elif (LZO_OS_OS400) && defined(__LLP64_IFC__)
1007 # define LZO_SIZEOF_LONG_LONG 8
1008 #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
1009 # define LZO_SIZEOF_LONG_LONG 8
1010 #elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2)
1011 #elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
1012 # define LZO_SIZEOF_LONG_LONG 8
1016 #if defined(__cplusplus) && defined(LZO_CC_GNUC)
1017 # if (LZO_CC_GNUC < 0x020800ul)
1018 # undef LZO_SIZEOF_LONG_LONG
1021 #if defined(LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG)
1022 # undef LZO_SIZEOF_LONG_LONG
1024 #if !defined(LZO_SIZEOF_VOID_P)
1026 # define __LZO_WORDSIZE 2
1027 # if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
1028 # define LZO_SIZEOF_VOID_P 2
1029 # elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
1030 # define LZO_SIZEOF_VOID_P 4
1034 #elif (LZO_ARCH_AVR || LZO_ARCH_Z80)
1035 # define __LZO_WORDSIZE 1
1036 # define LZO_SIZEOF_VOID_P 2
1037 #elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430)
1038 # define LZO_SIZEOF_VOID_P 2
1039 #elif (LZO_ARCH_H8300)
1040 # if defined(__NORMAL_MODE__)
1041 # define __LZO_WORDSIZE 4
1042 # define LZO_SIZEOF_VOID_P 2
1043 # elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
1044 # define __LZO_WORDSIZE 4
1045 # define LZO_SIZEOF_VOID_P 4
1047 # define __LZO_WORDSIZE 2
1048 # define LZO_SIZEOF_VOID_P 2
1050 # if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4)
1051 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT
1052 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT
1054 #elif (LZO_ARCH_M16C)
1055 # define __LZO_WORDSIZE 2
1056 # if defined(__m32c_cpu__) || defined(__m32cm_cpu__)
1057 # define LZO_SIZEOF_VOID_P 4
1059 # define LZO_SIZEOF_VOID_P 2
1061 #elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
1062 # define __LZO_WORDSIZE 8
1063 # define LZO_SIZEOF_VOID_P 4
1064 #elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64)
1065 # define __LZO_WORDSIZE 8
1066 # define LZO_SIZEOF_VOID_P 8
1067 #elif (LZO_OS_OS400) && defined(__LLP64_IFC__)
1068 # define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG
1069 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
1070 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
1071 #elif (LZO_OS_OS400)
1072 # define __LZO_WORDSIZE LZO_SIZEOF_LONG
1073 # define LZO_SIZEOF_VOID_P 16
1074 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
1075 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
1076 #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
1077 # define LZO_SIZEOF_VOID_P 8
1078 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
1079 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
1081 # define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG
1084 #if !defined(LZO_WORDSIZE)
1085 # if defined(__LZO_WORDSIZE)
1086 # define LZO_WORDSIZE __LZO_WORDSIZE
1088 # define LZO_WORDSIZE LZO_SIZEOF_VOID_P
1091 #if !defined(LZO_SIZEOF_SIZE_T)
1092 #if (LZO_ARCH_I086 || LZO_ARCH_M16C)
1093 # define LZO_SIZEOF_SIZE_T 2
1095 # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P
1098 #if !defined(LZO_SIZEOF_PTRDIFF_T)
1100 # if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE)
1101 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P
1102 # elif (LZO_MM_COMPACT || LZO_MM_LARGE)
1103 # if (LZO_CC_BORLANDC || LZO_CC_TURBOC)
1104 # define LZO_SIZEOF_PTRDIFF_T 4
1106 # define LZO_SIZEOF_PTRDIFF_T 2
1112 # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T
1115 #if !defined(LZO_ABI_BIG_ENDIAN) && !defined(LZO_ABI_LITTLE_ENDIAN) && !defined(LZO_ABI_NEUTRAL_ENDIAN)
1116 #if (LZO_ARCH_AMD64 || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430)
1117 # define LZO_ABI_LITTLE_ENDIAN 1
1118 #elif (LZO_ARCH_M68K || LZO_ARCH_S390)
1119 # define LZO_ABI_BIG_ENDIAN 1
1120 #elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
1121 # define LZO_ABI_BIG_ENDIAN 1
1122 #elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
1123 # define LZO_ABI_LITTLE_ENDIAN 1
1124 #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__)
1125 # define LZO_ABI_BIG_ENDIAN 1
1126 #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__)
1127 # define LZO_ABI_LITTLE_ENDIAN 1
1130 #if defined(LZO_ABI_BIG_ENDIAN) && defined(LZO_ABI_LITTLE_ENDIAN)
1131 # error "this should not happen"
1133 #if defined(LZO_ABI_BIG_ENDIAN)
1134 # define LZO_INFO_ABI_ENDIAN "be"
1135 #elif defined(LZO_ABI_LITTLE_ENDIAN)
1136 # define LZO_INFO_ABI_ENDIAN "le"
1137 #elif defined(LZO_ABI_NEUTRAL_ENDIAN)
1138 # define LZO_INFO_ABI_ENDIAN "neutral"
1140 #if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
1141 # define LZO_ABI_I8LP16 1
1142 # define LZO_INFO_ABI_PM "i8lp16"
1143 #elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
1144 # define LZO_ABI_ILP16 1
1145 # define LZO_INFO_ABI_PM "ilp16"
1146 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
1147 # define LZO_ABI_ILP32 1
1148 # define LZO_INFO_ABI_PM "ilp32"
1149 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8)
1150 # define LZO_ABI_LLP64 1
1151 # define LZO_INFO_ABI_PM "llp64"
1152 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
1153 # define LZO_ABI_LP64 1
1154 # define LZO_INFO_ABI_PM "lp64"
1155 #elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
1156 # define LZO_ABI_ILP64 1
1157 # define LZO_INFO_ABI_PM "ilp64"
1158 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4)
1159 # define LZO_ABI_IP32L64 1
1160 # define LZO_INFO_ABI_PM "ip32l64"
1162 #if !defined(__LZO_LIBC_OVERRIDE)
1163 #if defined(LZO_LIBC_NAKED)
1164 # define LZO_INFO_LIBC "naked"
1165 #elif defined(LZO_LIBC_FREESTANDING)
1166 # define LZO_INFO_LIBC "freestanding"
1167 #elif defined(LZO_LIBC_MOSTLY_FREESTANDING)
1168 # define LZO_INFO_LIBC "mfreestanding"
1169 #elif defined(LZO_LIBC_ISOC90)
1170 # define LZO_INFO_LIBC "isoc90"
1171 #elif defined(LZO_LIBC_ISOC99)
1172 # define LZO_INFO_LIBC "isoc99"
1173 #elif defined(__dietlibc__)
1174 # define LZO_LIBC_DIETLIBC 1
1175 # define LZO_INFO_LIBC "dietlibc"
1176 #elif defined(_NEWLIB_VERSION)
1177 # define LZO_LIBC_NEWLIB 1
1178 # define LZO_INFO_LIBC "newlib"
1179 #elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__)
1180 # if defined(__UCLIBC_SUBLEVEL__)
1181 # define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__)
1183 # define LZO_LIBC_UCLIBC 0x00090bL
1185 # define LZO_INFO_LIBC "uclibc"
1186 #elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1187 # define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100)
1188 # define LZO_INFO_LIBC "glibc"
1189 #elif (LZO_CC_MWERKS) && defined(__MSL__)
1190 # define LZO_LIBC_MSL __MSL__
1191 # define LZO_INFO_LIBC "msl"
1193 # define LZO_LIBC_DEFAULT 1
1194 # define LZO_INFO_LIBC "default"
1197 #if (LZO_CC_GNUC >= 0x020800ul)
1198 # define __lzo_gnuc_extension__ __extension__
1199 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1200 # define __lzo_gnuc_extension__ __extension__
1202 # define __lzo_gnuc_extension__
1204 #if (LZO_CC_CILLY || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
1205 # define lzo_alignof(e) __alignof__(e)
1206 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700))
1207 # define lzo_alignof(e) __alignof__(e)
1208 #elif (LZO_CC_MSC && (_MSC_VER >= 1300))
1209 # define lzo_alignof(e) __alignof(e)
1211 #if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295))
1212 #elif defined(__cplusplus)
1213 # define __lzo_inline inline
1214 #elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550))
1215 # define __lzo_inline __inline
1216 #elif (LZO_CC_CILLY || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
1217 # define __lzo_inline __inline__
1219 # define __lzo_inline __inline
1220 #elif (LZO_CC_INTELC)
1221 # define __lzo_inline __inline
1222 #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405))
1223 # define __lzo_inline __inline
1224 #elif (LZO_CC_MSC && (_MSC_VER >= 900))
1225 # define __lzo_inline __inline
1226 #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
1227 # define __lzo_inline inline
1229 #if (LZO_CC_GNUC >= 0x030200ul)
1230 # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
1231 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && (LZO_OS_WIN32 || LZO_OS_WIN64))
1232 # define __lzo_forceinline __forceinline
1233 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
1234 # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
1235 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1236 # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
1237 #elif (LZO_CC_MSC && (_MSC_VER >= 1200))
1238 # define __lzo_forceinline __forceinline
1240 #if (LZO_CC_GNUC >= 0x030200ul)
1241 # define __lzo_noinline __attribute__((__noinline__))
1242 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && (LZO_OS_WIN32 || LZO_OS_WIN64))
1243 # define __lzo_noinline __declspec(noinline)
1244 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
1245 # define __lzo_noinline __attribute__((__noinline__))
1246 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1247 # define __lzo_noinline __attribute__((__noinline__))
1248 #elif (LZO_CC_MSC && (_MSC_VER >= 1300))
1249 # define __lzo_noinline __declspec(noinline)
1250 #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64))
1251 # if defined(__cplusplus)
1253 # define __lzo_noinline __declspec(noinline)
1256 #if (defined(__lzo_forceinline) || defined(__lzo_noinline)) && !defined(__lzo_inline)
1257 # error "this should not happen"
1259 #if (LZO_CC_GNUC >= 0x020700ul)
1260 # define __lzo_noreturn __attribute__((__noreturn__))
1261 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && (LZO_OS_WIN32 || LZO_OS_WIN64))
1262 # define __lzo_noreturn __declspec(noreturn)
1263 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && (LZO_OS_POSIX))
1264 # define __lzo_noreturn __attribute__((__noreturn__))
1265 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1266 # define __lzo_noreturn __attribute__((__noreturn__))
1267 #elif (LZO_CC_MSC && (_MSC_VER >= 1200))
1268 # define __lzo_noreturn __declspec(noreturn)
1270 #if (LZO_CC_GNUC >= 0x030400ul)
1271 # define __lzo_constructor __attribute__((__constructor__,__used__))
1272 #elif (LZO_CC_GNUC >= 0x020700ul)
1273 # define __lzo_constructor __attribute__((__constructor__))
1274 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1275 # define __lzo_constructor __attribute__((__constructor__))
1277 #if (LZO_CC_GNUC >= 0x030400ul)
1278 # define __lzo_destructor __attribute__((__destructor__,__used__))
1279 #elif (LZO_CC_GNUC >= 0x020700ul)
1280 # define __lzo_destructor __attribute__((__destructor__))
1281 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1282 # define __lzo_destructor __attribute__((__destructor__))
1284 #if defined(__lzo_destructor) && !defined(__lzo_constructor)
1285 # error "this should not happen"
1287 #if (LZO_CC_GNUC >= 0x030200ul)
1288 # define __lzo_likely(e) (__builtin_expect(!!(e),1))
1289 # define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
1290 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
1291 # define __lzo_likely(e) (__builtin_expect(!!(e),1))
1292 # define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
1293 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
1294 # define __lzo_likely(e) (__builtin_expect(!!(e),1))
1295 # define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
1297 # define __lzo_likely(e) (e)
1298 # define __lzo_unlikely(e) (e)
1300 #if !defined(LZO_UNUSED)
1301 # if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
1302 # define LZO_UNUSED(var) ((void) &var)
1303 # elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC)
1304 # define LZO_UNUSED(var) if (&var) ; else
1305 # elif (LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
1306 # define LZO_UNUSED(var) ((void) var)
1307 # elif (LZO_CC_MSC && (_MSC_VER < 900))
1308 # define LZO_UNUSED(var) if (&var) ; else
1309 # elif (LZO_CC_KEILC)
1310 # define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];}
1311 # elif (LZO_CC_PACIFICC)
1312 # define LZO_UNUSED(var) ((void) sizeof(var))
1313 # elif (LZO_CC_WATCOMC) && defined(__cplusplus)
1314 # define LZO_UNUSED(var) ((void) var)
1316 # define LZO_UNUSED(var) ((void) &var)
1319 #if !defined(LZO_UNUSED_FUNC)
1320 # if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
1321 # define LZO_UNUSED_FUNC(func) ((void) func)
1322 # elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC)
1323 # define LZO_UNUSED_FUNC(func) if (func) ; else
1324 # elif (LZO_CC_LLVM)
1325 # define LZO_UNUSED_FUNC(func) ((void) &func)
1326 # elif (LZO_CC_MSC && (_MSC_VER < 900))
1327 # define LZO_UNUSED_FUNC(func) if (func) ; else
1329 # define LZO_UNUSED_FUNC(func) ((void) &func)
1330 # elif (LZO_CC_KEILC || LZO_CC_PELLESC)
1331 # define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];}
1333 # define LZO_UNUSED_FUNC(func) ((void) func)
1336 #if !defined(LZO_UNUSED_LABEL)
1337 # if (LZO_CC_WATCOMC) && defined(__cplusplus)
1338 # define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l
1339 # elif (LZO_CC_INTELC || LZO_CC_WATCOMC)
1340 # define LZO_UNUSED_LABEL(l) if (0) goto l
1342 # define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l
1345 #if !defined(LZO_COMPILE_TIME_ASSERT_HEADER)
1346 # if (LZO_CC_AZTECC || LZO_CC_ZORTECHC)
1347 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)];
1348 # elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
1349 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)];
1350 # elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
1351 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)];
1353 # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)];
1356 #if !defined(LZO_COMPILE_TIME_ASSERT)
1357 # if (LZO_CC_AZTECC)
1358 # define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];}
1359 # elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
1360 # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
1361 # elif (LZO_CC_MSC && (_MSC_VER < 900))
1362 # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
1363 # elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
1364 # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
1366 # define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];}
1369 #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)
1370 # if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC)
1371 # elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
1372 # define __lzo_cdecl __cdecl
1373 # define __lzo_cdecl_atexit
1374 # define __lzo_cdecl_main __cdecl
1375 # if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
1376 # define __lzo_cdecl_qsort __pascal
1377 # elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
1378 # define __lzo_cdecl_qsort _stdcall
1380 # define __lzo_cdecl_qsort __cdecl
1382 # elif (LZO_CC_WATCOMC)
1383 # define __lzo_cdecl __cdecl
1385 # define __lzo_cdecl __cdecl
1386 # define __lzo_cdecl_atexit __cdecl
1387 # define __lzo_cdecl_main __cdecl
1388 # define __lzo_cdecl_qsort __cdecl
1390 # if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC)
1391 # elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
1392 # define __lzo_cdecl_sighandler __pascal
1393 # elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
1394 # define __lzo_cdecl_sighandler _stdcall
1395 # elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE)
1396 # define __lzo_cdecl_sighandler __clrcall
1397 # elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700))
1399 # define __lzo_cdecl_sighandler _far _cdecl _loadds
1401 # define __lzo_cdecl_sighandler _far _cdecl
1403 # define __lzo_cdecl_sighandler _cdecl
1406 # define __lzo_cdecl_sighandler __cdecl
1408 #elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
1409 # define __lzo_cdecl cdecl
1411 #if !defined(__lzo_cdecl)
1412 # define __lzo_cdecl
1414 #if !defined(__lzo_cdecl_atexit)
1415 # define __lzo_cdecl_atexit
1417 #if !defined(__lzo_cdecl_main)
1418 # define __lzo_cdecl_main
1420 #if !defined(__lzo_cdecl_qsort)
1421 # define __lzo_cdecl_qsort
1423 #if !defined(__lzo_cdecl_sighandler)
1424 # define __lzo_cdecl_sighandler
1426 #if !defined(__lzo_cdecl_va)
1427 # define __lzo_cdecl_va __lzo_cdecl
1429 #if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64)
1430 # if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000))
1431 # elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
1432 # elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul)))
1434 # define LZO_HAVE_WINDOWS_H 1
1437 #if (LZO_ARCH_ALPHA)
1438 # define LZO_OPT_AVOID_UINT_INDEX 1
1439 # define LZO_OPT_AVOID_SHORT 1
1440 # define LZO_OPT_AVOID_USHORT 1
1441 #elif (LZO_ARCH_AMD64)
1442 # define LZO_OPT_AVOID_INT_INDEX 1
1443 # define LZO_OPT_AVOID_UINT_INDEX 1
1444 # define LZO_OPT_UNALIGNED16 1
1445 # define LZO_OPT_UNALIGNED32 1
1446 # define LZO_OPT_UNALIGNED64 1
1447 #elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB)
1448 #elif (LZO_ARCH_ARM)
1449 # define LZO_OPT_AVOID_SHORT 1
1450 # define LZO_OPT_AVOID_USHORT 1
1451 #elif (LZO_ARCH_CRIS)
1452 # define LZO_OPT_UNALIGNED16 1
1453 # define LZO_OPT_UNALIGNED32 1
1454 #elif (LZO_ARCH_I386)
1455 # define LZO_OPT_UNALIGNED16 1
1456 # define LZO_OPT_UNALIGNED32 1
1457 #elif (LZO_ARCH_IA64)
1458 # define LZO_OPT_AVOID_INT_INDEX 1
1459 # define LZO_OPT_AVOID_UINT_INDEX 1
1460 # define LZO_OPT_PREFER_POSTINC 1
1461 #elif (LZO_ARCH_M68K)
1462 # define LZO_OPT_PREFER_POSTINC 1
1463 # define LZO_OPT_PREFER_PREDEC 1
1464 # if defined(__mc68020__) && !defined(__mcoldfire__)
1465 # define LZO_OPT_UNALIGNED16 1
1466 # define LZO_OPT_UNALIGNED32 1
1468 #elif (LZO_ARCH_MIPS)
1469 # define LZO_OPT_AVOID_UINT_INDEX 1
1470 #elif (LZO_ARCH_POWERPC)
1471 # define LZO_OPT_PREFER_PREINC 1
1472 # define LZO_OPT_PREFER_PREDEC 1
1473 # if defined(LZO_ABI_BIG_ENDIAN)
1474 # define LZO_OPT_UNALIGNED16 1
1475 # define LZO_OPT_UNALIGNED32 1
1477 #elif (LZO_ARCH_S390)
1478 # define LZO_OPT_UNALIGNED16 1
1479 # define LZO_OPT_UNALIGNED32 1
1480 # if (LZO_SIZEOF_SIZE_T == 8)
1481 # define LZO_OPT_UNALIGNED64 1
1484 # define LZO_OPT_PREFER_POSTINC 1
1485 # define LZO_OPT_PREFER_PREDEC 1
1487 #if !defined(LZO_CFG_NO_INLINE_ASM)
1488 #if defined(LZO_CC_LLVM)
1489 # define LZO_CFG_NO_INLINE_ASM 1
1492 #if !defined(LZO_CFG_NO_UNALIGNED)
1493 #if defined(LZO_ABI_NEUTRAL_ENDIAN) || defined(LZO_ARCH_GENERIC)
1494 # define LZO_CFG_NO_UNALIGNED 1
1497 #if defined(LZO_CFG_NO_UNALIGNED)
1498 # undef LZO_OPT_UNALIGNED16
1499 # undef LZO_OPT_UNALIGNED32
1500 # undef LZO_OPT_UNALIGNED64
1502 #if defined(LZO_CFG_NO_INLINE_ASM)
1503 #elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
1504 # define LZO_ASM_SYNTAX_MSC 1
1505 #elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
1506 #elif (LZO_ARCH_I386 && (LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
1507 # define LZO_ASM_SYNTAX_GNUC 1
1508 #elif (LZO_ARCH_AMD64 && (LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
1509 # define LZO_ASM_SYNTAX_GNUC 1
1511 #if (LZO_ASM_SYNTAX_GNUC)
1512 #if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
1513 # define __LZO_ASM_CLOBBER "ax"
1514 #elif (LZO_CC_INTELC)
1515 # define __LZO_ASM_CLOBBER "memory"
1517 # define __LZO_ASM_CLOBBER "cc", "memory"
1520 #if defined(__LZO_INFOSTR_MM)
1521 #elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM))
1522 # define __LZO_INFOSTR_MM ""
1523 #elif defined(LZO_INFO_MM)
1524 # define __LZO_INFOSTR_MM "." LZO_INFO_MM
1526 # define __LZO_INFOSTR_MM ""
1528 #if defined(__LZO_INFOSTR_PM)
1529 #elif defined(LZO_INFO_ABI_PM)
1530 # define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM
1532 # define __LZO_INFOSTR_PM ""
1534 #if defined(__LZO_INFOSTR_ENDIAN)
1535 #elif defined(LZO_INFO_ABI_ENDIAN)
1536 # define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN
1538 # define __LZO_INFOSTR_ENDIAN ""
1540 #if defined(__LZO_INFOSTR_OSNAME)
1541 #elif defined(LZO_INFO_OS_CONSOLE)
1542 # define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE
1543 #elif defined(LZO_INFO_OS_POSIX)
1544 # define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX
1546 # define __LZO_INFOSTR_OSNAME LZO_INFO_OS
1548 #if defined(__LZO_INFOSTR_LIBC)
1549 #elif defined(LZO_INFO_LIBC)
1550 # define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC
1552 # define __LZO_INFOSTR_LIBC ""
1554 #if defined(__LZO_INFOSTR_CCVER)
1555 #elif defined(LZO_INFO_CCVER)
1556 # define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER
1558 # define __LZO_INFOSTR_CCVER ""
1560 #define LZO_INFO_STRING \
1561 LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \
1562 " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER
1568 #undef LZO_HAVE_CONFIG_H
1569 #include "minilzo.h"
1571 #if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2020)
1572 # error "version mismatch in miniLZO source files"
1575 #ifdef MINILZO_HAVE_CONFIG_H
1576 # define LZO_HAVE_CONFIG_H
1579 #ifndef __LZO_CONF_H
1580 #define __LZO_CONF_H
1582 #if !defined(__LZO_IN_MINILZO)
1583 #if defined(LZO_CFG_FREESTANDING)
1584 # define LZO_LIBC_FREESTANDING 1
1585 # define LZO_OS_FREESTANDING 1
1586 # define ACC_LIBC_FREESTANDING 1
1587 # define ACC_OS_FREESTANDING 1
1589 #if defined(LZO_CFG_NO_UNALIGNED)
1590 # define ACC_CFG_NO_UNALIGNED 1
1592 #if defined(LZO_HAVE_CONFIG_H)
1593 # define ACC_CONFIG_NO_HEADER 1
1595 #if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED)
1596 # error "include this file first"
1598 #include "lzo/lzoconf.h"
1601 #if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED)
1602 # error "version mismatch"
1605 #if (LZO_CC_BORLANDC && LZO_ARCH_I086)
1609 #if (LZO_CC_MSC && (_MSC_VER >= 1000))
1610 # pragma warning(disable: 4127 4701)
1612 #if (LZO_CC_MSC && (_MSC_VER >= 1300))
1613 # pragma warning(disable: 4820)
1614 # pragma warning(disable: 4514 4710 4711)
1617 #if defined(__LZO_MMODEL_HUGE) && (!LZO_HAVE_MM_HUGE_PTR)
1618 # error "this should not happen - check defines for __huge"
1621 #if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING)
1622 #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
1623 # define ACC_WANT_ACC_INCD_H 1
1624 # define ACC_WANT_ACC_INCE_H 1
1625 # define ACC_WANT_ACC_INCI_H 1
1627 # include <string.h>
1629 # define ACC_WANT_ACC_INCD_H 1
1633 # define ACC_MM_AHSHIFT LZO_MM_AHSHIFT
1634 # define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0])
1635 # define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1])
1636 # define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o)))
1639 #if !defined(lzo_uintptr_t)
1640 # if defined(__LZO_MMODEL_HUGE)
1641 # define lzo_uintptr_t unsigned long
1642 # elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16)
1643 # define __LZO_UINTPTR_T_IS_POINTER 1
1644 typedef char* lzo_uintptr_t
;
1645 # define lzo_uintptr_t lzo_uintptr_t
1646 # elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P)
1647 # define lzo_uintptr_t size_t
1648 # elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P)
1649 # define lzo_uintptr_t unsigned long
1650 # elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P)
1651 # define lzo_uintptr_t unsigned int
1652 # elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P)
1653 # define lzo_uintptr_t unsigned long long
1655 # define lzo_uintptr_t size_t
1658 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t
) >= sizeof(lzo_voidp
))
1660 #if 1 && !defined(LZO_CFG_FREESTANDING)
1661 #if 1 && !defined(HAVE_STRING_H)
1662 #define HAVE_STRING_H 1
1664 #if 1 && !defined(HAVE_MEMCMP)
1665 #define HAVE_MEMCMP 1
1667 #if 1 && !defined(HAVE_MEMCPY)
1668 #define HAVE_MEMCPY 1
1670 #if 1 && !defined(HAVE_MEMMOVE)
1671 #define HAVE_MEMMOVE 1
1673 #if 1 && !defined(HAVE_MEMSET)
1674 #define HAVE_MEMSET 1
1678 #if 1 && defined(HAVE_STRING_H)
1682 #if defined(LZO_CFG_FREESTANDING)
1685 # undef HAVE_MEMMOVE
1689 #if !defined(HAVE_MEMCMP)
1691 # define memcmp(a,b,c) lzo_memcmp(a,b,c)
1692 #elif !defined(__LZO_MMODEL_HUGE)
1693 # define lzo_memcmp(a,b,c) memcmp(a,b,c)
1695 #if !defined(HAVE_MEMCPY)
1697 # define memcpy(a,b,c) lzo_memcpy(a,b,c)
1698 #elif !defined(__LZO_MMODEL_HUGE)
1699 # define lzo_memcpy(a,b,c) memcpy(a,b,c)
1701 #if !defined(HAVE_MEMMOVE)
1703 # define memmove(a,b,c) lzo_memmove(a,b,c)
1704 #elif !defined(__LZO_MMODEL_HUGE)
1705 # define lzo_memmove(a,b,c) memmove(a,b,c)
1707 #if !defined(HAVE_MEMSET)
1709 # define memset(a,b,c) lzo_memset(a,b,c)
1710 #elif !defined(__LZO_MMODEL_HUGE)
1711 # define lzo_memset(a,b,c) memset(a,b,c)
1715 #if defined(LZO_CFG_FREESTANDING)
1719 # define assert(e) ((void)0)
1721 # if !defined(LZO_DEBUG)
1724 # include <assert.h>
1727 #if 0 && defined(__BOUNDS_CHECKING_ON)
1728 # include <unchecked.h>
1730 # define BOUNDS_CHECKING_OFF_DURING(stmt) stmt
1731 # define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr)
1734 #if !defined(__lzo_inline)
1735 # define __lzo_inline
1737 #if !defined(__lzo_forceinline)
1738 # define __lzo_forceinline
1740 #if !defined(__lzo_noinline)
1741 # define __lzo_noinline
1745 # define LZO_BYTE(x) ((unsigned char) (x))
1747 # define LZO_BYTE(x) ((unsigned char) ((x) & 0xff))
1750 #define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b))
1751 #define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b))
1752 #define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c))
1753 #define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c))
1755 #define lzo_sizeof(type) ((lzo_uint) (sizeof(type)))
1757 #define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array))))
1759 #define LZO_SIZE(bits) (1u << (bits))
1760 #define LZO_MASK(bits) (LZO_SIZE(bits) - 1)
1762 #define LZO_LSIZE(bits) (1ul << (bits))
1763 #define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1)
1765 #define LZO_USIZE(bits) ((lzo_uint) 1 << (bits))
1766 #define LZO_UMASK(bits) (LZO_USIZE(bits) - 1)
1771 # define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b)))
1773 # define DMUL(a,b) ((lzo_xint) ((a) * (b)))
1777 #if 1 && !defined(LZO_CFG_NO_UNALIGNED)
1778 #if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
1779 # if (LZO_SIZEOF_SHORT == 2)
1780 # define LZO_UNALIGNED_OK_2
1782 # if (LZO_SIZEOF_INT == 4)
1783 # define LZO_UNALIGNED_OK_4
1788 #if defined(LZO_UNALIGNED_OK_2)
1789 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(short) == 2)
1791 #if defined(LZO_UNALIGNED_OK_4)
1792 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32
) == 4)
1793 #elif defined(LZO_ALIGNED_OK_4)
1794 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32
) == 4)
1797 #define MEMCPY8_DS(dest,src,len) \
1798 lzo_memcpy(dest,src,len); dest += len; src += len
1800 #define BZERO8_PTR(s,l,n) \
1801 lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n))
1803 #define MEMCPY_DS(dest,src,len) \
1804 do *dest++ = *src++; while (--len > 0)
1806 __LZO_EXTERN_C
int __lzo_init_done
;
1807 __LZO_EXTERN_C
const char __lzo_copyright
[];
1808 LZO_EXTERN(const lzo_bytep
) lzo_copyright(void);
1817 #if !defined(lzo_uintptr_t)
1818 # if defined(__LZO_MMODEL_HUGE)
1819 # define lzo_uintptr_t unsigned long
1821 # define lzo_uintptr_t acc_uintptr_t
1822 # ifdef __ACC_INTPTR_T_IS_POINTER
1823 # define __LZO_UINTPTR_T_IS_POINTER 1
1829 #define PTR(a) ((lzo_bytep) (a))
1830 #define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0)
1831 #define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0)
1833 #define PTR(a) ((lzo_uintptr_t) (a))
1834 #define PTR_LINEAR(a) PTR(a)
1835 #define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0)
1836 #define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0)
1837 #define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)
1838 #define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)
1841 #define PTR_LT(a,b) (PTR(a) < PTR(b))
1842 #define PTR_GE(a,b) (PTR(a) >= PTR(b))
1843 #define PTR_DIFF(a,b) (PTR(a) - PTR(b))
1844 #define pd(a,b) ((lzo_uint) ((a)-(b)))
1846 LZO_EXTERN(lzo_uintptr_t
)
1847 __lzo_ptr_linear(const lzo_voidp ptr
);
1852 unsigned char a_uchar
;
1854 unsigned short a_ushort
;
1856 unsigned int a_uint
;
1858 unsigned long a_ulong
;
1860 lzo_uint a_lzo_uint
;
1861 lzo_int32 a_lzo_int32
;
1862 lzo_uint32 a_lzo_uint32
;
1863 ptrdiff_t a_ptrdiff_t
;
1864 lzo_uintptr_t a_lzo_uintptr_t
;
1865 lzo_voidp a_lzo_voidp
;
1867 lzo_bytep a_lzo_bytep
;
1868 lzo_bytepp a_lzo_bytepp
;
1869 lzo_uintp a_lzo_uintp
;
1870 lzo_uint
* a_lzo_uint_p
;
1871 lzo_uint32p a_lzo_uint32p
;
1872 lzo_uint32
* a_lzo_uint32_p
;
1873 unsigned char * a_uchar_p
;
1884 #define LZO_DETERMINISTIC
1886 #define LZO_DICT_USE_PTR
1887 #if 0 && (LZO_ARCH_I086)
1888 # undef LZO_DICT_USE_PTR
1891 #if defined(LZO_DICT_USE_PTR)
1892 # define lzo_dict_t const lzo_bytep
1893 # define lzo_dict_p lzo_dict_t __LZO_MMODEL *
1895 # define lzo_dict_t lzo_uint
1896 # define lzo_dict_p lzo_dict_t __LZO_MMODEL *
1901 #if !defined(MINILZO_CFG_SKIP_LZO_PTR)
1903 LZO_PUBLIC(lzo_uintptr_t
)
1904 __lzo_ptr_linear(const lzo_voidp ptr
)
1909 p
= (((lzo_uintptr_t
)(ACC_PTR_FP_SEG(ptr
))) << (16 - ACC_MM_AHSHIFT
)) + (ACC_PTR_FP_OFF(ptr
));
1911 p
= (lzo_uintptr_t
) PTR_LINEAR(ptr
);
1917 LZO_PUBLIC(unsigned)
1918 __lzo_align_gap(const lzo_voidp ptr
, lzo_uint size
)
1920 #if defined(__LZO_UINTPTR_T_IS_POINTER)
1921 size_t n
= (size_t) ptr
;
1922 n
= (((n
+ size
- 1) / size
) * size
) - n
;
1925 p
= __lzo_ptr_linear(ptr
);
1926 n
= (((p
+ size
- 1) / size
) * size
) - p
;
1930 assert((long)n
>= 0);
1937 /* If you use the LZO library in a product, you *must* keep this
1938 * copyright string in the executable of your product.
1941 const char __lzo_copyright
[] =
1942 #if !defined(__LZO_IN_MINLZO)
1946 "LZO data compression library.\n"
1947 "$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer\n"
1948 "<markus@oberhumer.com>\n"
1949 "http://www.oberhumer.com $\n\n"
1950 "$Id: LZO version: v" LZO_VERSION_STRING
", " LZO_VERSION_DATE
" $\n"
1951 "$Built: " __DATE__
" " __TIME__
" $\n"
1952 "$Info: " LZO_INFO_STRING
" $\n";
1955 LZO_PUBLIC(const lzo_bytep
)
1958 #if (LZO_OS_DOS16 && LZO_CC_TURBOC)
1959 return (lzo_voidp
) __lzo_copyright
;
1961 return (const lzo_bytep
) __lzo_copyright
;
1965 LZO_PUBLIC(unsigned)
1971 LZO_PUBLIC(const char *)
1972 lzo_version_string(void)
1974 return LZO_VERSION_STRING
;
1977 LZO_PUBLIC(const char *)
1978 lzo_version_date(void)
1980 return LZO_VERSION_DATE
;
1983 LZO_PUBLIC(const lzo_charp
)
1984 _lzo_version_string(void)
1986 return LZO_VERSION_STRING
;
1989 LZO_PUBLIC(const lzo_charp
)
1990 _lzo_version_date(void)
1992 return LZO_VERSION_DATE
;
1995 #define LZO_BASE 65521u
1996 #define LZO_NMAX 5552
1998 #define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1
1999 #define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1);
2000 #define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2);
2001 #define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4);
2002 #define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8);
2004 LZO_PUBLIC(lzo_uint32
)
2005 lzo_adler32(lzo_uint32 adler
, const lzo_bytep buf
, lzo_uint len
)
2007 lzo_uint32 s1
= adler
& 0xffff;
2008 lzo_uint32 s2
= (adler
>> 16) & 0xffff;
2016 k
= len
< LZO_NMAX
? (unsigned) len
: LZO_NMAX
;
2032 return (s2
<< 16) | s1
;
2041 #if !defined(MINILZO_CFG_SKIP_LZO_STRING)
2046 #if !defined(__LZO_MMODEL_HUGE)
2047 # undef LZO_HAVE_MM_HUGE_PTR
2049 #define lzo_hsize_t lzo_uint
2050 #define lzo_hvoid_p lzo_voidp
2051 #define lzo_hbyte_p lzo_bytep
2052 #define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f
2053 #define lzo_hmemcmp lzo_memcmp
2054 #define lzo_hmemcpy lzo_memcpy
2055 #define lzo_hmemmove lzo_memmove
2056 #define lzo_hmemset lzo_memset
2057 #define __LZOLIB_HMEMCPY_CH_INCLUDED 1
2058 #if !defined(LZOLIB_PUBLIC)
2059 # define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
2061 LZOLIB_PUBLIC(int, lzo_hmemcmp
) (const lzo_hvoid_p s1
, const lzo_hvoid_p s2
, lzo_hsize_t len
)
2063 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCMP)
2064 const lzo_hbyte_p p1
= (const lzo_hbyte_p
) s1
;
2065 const lzo_hbyte_p p2
= (const lzo_hbyte_p
) s2
;
2066 if __lzo_likely(len
> 0) do
2072 } while __lzo_likely(--len
> 0);
2075 return memcmp(s1
, s2
, len
);
2078 LZOLIB_PUBLIC(lzo_hvoid_p
, lzo_hmemcpy
) (lzo_hvoid_p dest
, const lzo_hvoid_p src
, lzo_hsize_t len
)
2080 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCPY)
2081 lzo_hbyte_p p1
= (lzo_hbyte_p
) dest
;
2082 const lzo_hbyte_p p2
= (const lzo_hbyte_p
) src
;
2083 if (len
<= 0 || p1
== p2
)
2087 while __lzo_likely(--len
> 0);
2090 return memcpy(dest
, src
, len
);
2093 LZOLIB_PUBLIC(lzo_hvoid_p
, lzo_hmemmove
) (lzo_hvoid_p dest
, const lzo_hvoid_p src
, lzo_hsize_t len
)
2095 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMMOVE)
2096 lzo_hbyte_p p1
= (lzo_hbyte_p
) dest
;
2097 const lzo_hbyte_p p2
= (const lzo_hbyte_p
) src
;
2098 if (len
<= 0 || p1
== p2
)
2104 while __lzo_likely(--len
> 0);
2112 while __lzo_likely(--len
> 0);
2116 return memmove(dest
, src
, len
);
2119 LZOLIB_PUBLIC(lzo_hvoid_p
, lzo_hmemset
) (lzo_hvoid_p s
, int c
, lzo_hsize_t len
)
2121 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMSET)
2122 lzo_hbyte_p p
= (lzo_hbyte_p
) s
;
2123 if __lzo_likely(len
> 0) do
2124 *p
++ = (unsigned char) c
;
2125 while __lzo_likely(--len
> 0);
2128 return memset(s
, c
, len
);
2131 #undef LZOLIB_PUBLIC
2134 #if !defined(__LZO_IN_MINILZO)
2136 #define ACC_WANT_ACC_CHK_CH 1
2137 #undef ACCCHK_ASSERT
2139 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int
)
2140 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint
)
2142 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32
)
2143 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32
)
2144 ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0)
2145 ACCCHK_ASSERT(sizeof(lzo_uint32
) >= 4)
2147 #if !defined(__LZO_UINTPTR_T_IS_POINTER)
2148 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t
)
2150 ACCCHK_ASSERT(sizeof(lzo_uintptr_t
) >= sizeof(lzo_voidp
))
2152 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint
)
2153 ACCCHK_ASSERT(sizeof(lzo_xint
) >= sizeof(lzo_uint32
))
2154 ACCCHK_ASSERT(sizeof(lzo_xint
) >= sizeof(lzo_uint
))
2155 ACCCHK_ASSERT(sizeof(lzo_xint
) == sizeof(lzo_uint32
) || sizeof(lzo_xint
) == sizeof(lzo_uint
))
2158 #undef ACCCHK_ASSERT
2161 _lzo_config_check(void)
2164 union { unsigned char c
[2*sizeof(lzo_xint
)]; lzo_xint l
[2]; } u
;
2166 #if !defined(LZO_CFG_NO_CONFIG_CHECK)
2167 #if defined(LZO_ABI_BIG_ENDIAN)
2168 u
.l
[0] = u
.l
[1] = 0; u
.c
[sizeof(lzo_xint
) - 1] = 128;
2169 r
&= (u
.l
[0] == 128);
2171 #if defined(LZO_ABI_LITTLE_ENDIAN)
2172 u
.l
[0] = u
.l
[1] = 0; u
.c
[0] = 128;
2173 r
&= (u
.l
[0] == 128);
2175 #if defined(LZO_UNALIGNED_OK_2)
2176 u
.l
[0] = u
.l
[1] = 0;
2177 r
&= ((* (const lzo_ushortp
) (const lzo_voidp
) &u
.c
[1]) == 0);
2179 #if defined(LZO_UNALIGNED_OK_4)
2180 u
.l
[0] = u
.l
[1] = 0;
2181 r
&= ((* (const lzo_uint32p
) (const lzo_voidp
) &u
.c
[1]) == 0);
2186 return r
== 1 ? LZO_E_OK
: LZO_E_ERROR
;
2189 int __lzo_init_done
= 0;
2192 __lzo_init_v2(unsigned v
, int s1
, int s2
, int s3
, int s4
, int s5
,
2193 int s6
, int s7
, int s8
, int s9
)
2197 #if defined(__LZO_IN_MINILZO)
2198 #elif (LZO_CC_MSC && ((_MSC_VER) < 700))
2200 #define ACC_WANT_ACC_CHK_CH 1
2201 #undef ACCCHK_ASSERT
2202 #define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr)
2204 #undef ACCCHK_ASSERT
2206 __lzo_init_done
= 1;
2211 r
= (s1
== -1 || s1
== (int) sizeof(short)) &&
2212 (s2
== -1 || s2
== (int) sizeof(int)) &&
2213 (s3
== -1 || s3
== (int) sizeof(long)) &&
2214 (s4
== -1 || s4
== (int) sizeof(lzo_uint32
)) &&
2215 (s5
== -1 || s5
== (int) sizeof(lzo_uint
)) &&
2216 (s6
== -1 || s6
== (int) lzo_sizeof_dict_t
) &&
2217 (s7
== -1 || s7
== (int) sizeof(char *)) &&
2218 (s8
== -1 || s8
== (int) sizeof(lzo_voidp
)) &&
2219 (s9
== -1 || s9
== (int) sizeof(lzo_callback_t
));
2223 r
= _lzo_config_check();
2230 #if !defined(__LZO_IN_MINILZO)
2232 #if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD)
2235 BOOL FAR PASCAL
LibMain ( HANDLE hInstance
, WORD wDataSegment
,
2236 WORD wHeapSize
, LPSTR lpszCmdLine
)
2238 int __far __pascal
LibMain ( int a
, short b
, short c
, long d
)
2241 LZO_UNUSED(a
); LZO_UNUSED(b
); LZO_UNUSED(c
); LZO_UNUSED(d
);
2249 #define do_compress _lzo1x_1_do_compress
2251 #if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS)
2253 #define LZO_NEED_DICT_H
2255 #define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5)
2256 #define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f)
2258 #ifndef __LZO_CONFIG1X_H
2259 #define __LZO_CONFIG1X_H
2261 #if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z)
2265 #if !defined(__LZO_IN_MINILZO)
2266 #include "lzo/lzo1x.h"
2269 #define LZO_EOF_CODE
2270 #undef LZO_DETERMINISTIC
2272 #define M1_MAX_OFFSET 0x0400
2273 #ifndef M2_MAX_OFFSET
2274 #define M2_MAX_OFFSET 0x0800
2276 #define M3_MAX_OFFSET 0x4000
2277 #define M4_MAX_OFFSET 0xbfff
2279 #define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET)
2281 #define M1_MIN_LEN 2
2282 #define M1_MAX_LEN 2
2283 #define M2_MIN_LEN 3
2285 #define M2_MAX_LEN 8
2287 #define M3_MIN_LEN 3
2288 #define M3_MAX_LEN 33
2289 #define M4_MIN_LEN 3
2290 #define M4_MAX_LEN 9
2293 #define M2_MARKER 64
2294 #define M3_MARKER 32
2295 #define M4_MARKER 16
2297 #ifndef MIN_LOOKAHEAD
2298 #define MIN_LOOKAHEAD (M2_MAX_LEN + 1)
2301 #if defined(LZO_NEED_DICT_H)
2304 #define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B
2306 #define DL_MIN_LEN M2_MIN_LEN
2308 #ifndef __LZO_DICT_H
2309 #define __LZO_DICT_H
2315 #if !defined(D_BITS) && defined(DBITS)
2316 # define D_BITS DBITS
2318 #if !defined(D_BITS)
2319 # error "D_BITS is not defined"
2322 # define D_SIZE LZO_SIZE(D_BITS)
2323 # define D_MASK LZO_MASK(D_BITS)
2325 # define D_SIZE LZO_USIZE(D_BITS)
2326 # define D_MASK LZO_UMASK(D_BITS)
2328 #define D_HIGH ((D_MASK >> 1) + 1)
2330 #if !defined(DD_BITS)
2333 #define DD_SIZE LZO_SIZE(DD_BITS)
2334 #define DD_MASK LZO_MASK(DD_BITS)
2336 #if !defined(DL_BITS)
2337 # define DL_BITS (D_BITS - DD_BITS)
2340 # define DL_SIZE LZO_SIZE(DL_BITS)
2341 # define DL_MASK LZO_MASK(DL_BITS)
2343 # define DL_SIZE LZO_USIZE(DL_BITS)
2344 # define DL_MASK LZO_UMASK(DL_BITS)
2347 #if (D_BITS != DL_BITS + DD_BITS)
2348 # error "D_BITS does not match"
2350 #if (D_BITS < 8 || D_BITS > 18)
2351 # error "invalid D_BITS"
2353 #if (DL_BITS < 8 || DL_BITS > 20)
2354 # error "invalid DL_BITS"
2356 #if (DD_BITS < 0 || DD_BITS > 6)
2357 # error "invalid DD_BITS"
2360 #if !defined(DL_MIN_LEN)
2361 # define DL_MIN_LEN 3
2363 #if !defined(DL_SHIFT)
2364 # define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN)
2367 #define LZO_HASH_GZIP 1
2368 #define LZO_HASH_GZIP_INCREMENTAL 2
2369 #define LZO_HASH_LZO_INCREMENTAL_A 3
2370 #define LZO_HASH_LZO_INCREMENTAL_B 4
2372 #if !defined(LZO_HASH)
2373 # error "choose a hashing strategy"
2379 #if (DL_MIN_LEN == 3)
2380 # define _DV2_A(p,shift1,shift2) \
2381 (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2])
2382 # define _DV2_B(p,shift1,shift2) \
2383 (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0])
2384 # define _DV3_B(p,shift1,shift2,shift3) \
2385 ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0])
2386 #elif (DL_MIN_LEN == 2)
2387 # define _DV2_A(p,shift1,shift2) \
2388 (( (lzo_xint)(p[0]) << shift1) ^ p[1])
2389 # define _DV2_B(p,shift1,shift2) \
2390 (( (lzo_xint)(p[1]) << shift1) ^ p[2])
2392 # error "invalid DL_MIN_LEN"
2394 #define _DV_A(p,shift) _DV2_A(p,shift,shift)
2395 #define _DV_B(p,shift) _DV2_B(p,shift,shift)
2396 #define DA2(p,s1,s2) \
2397 (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0])
2398 #define DS2(p,s1,s2) \
2399 (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0])
2400 #define DX2(p,s1,s2) \
2401 (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0])
2402 #define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0])
2403 #define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0])
2404 #define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0])
2405 #define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s)))
2406 #define DM(v) DMS(v,0)
2408 #if (LZO_HASH == LZO_HASH_GZIP)
2409 # define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT))
2411 #elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL)
2412 # define __LZO_HASH_INCREMENTAL
2413 # define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT)
2414 # define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2])
2415 # define _DINDEX(dv,p) (dv)
2416 # define DVAL_LOOKAHEAD DL_MIN_LEN
2418 #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A)
2419 # define __LZO_HASH_INCREMENTAL
2420 # define DVAL_FIRST(dv,p) dv = _DV_A((p),5)
2421 # define DVAL_NEXT(dv,p) \
2422 dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2])
2423 # define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5)
2424 # define DVAL_LOOKAHEAD DL_MIN_LEN
2426 #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B)
2427 # define __LZO_HASH_INCREMENTAL
2428 # define DVAL_FIRST(dv,p) dv = _DV_B((p),5)
2429 # define DVAL_NEXT(dv,p) \
2430 dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5)))
2431 # define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5)
2432 # define DVAL_LOOKAHEAD DL_MIN_LEN
2435 # error "choose a hashing strategy"
2439 #define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS)
2441 #if !defined(DINDEX1) && defined(D_INDEX1)
2442 #define DINDEX1 D_INDEX1
2444 #if !defined(DINDEX2) && defined(D_INDEX2)
2445 #define DINDEX2 D_INDEX2
2448 #if !defined(__LZO_HASH_INCREMENTAL)
2449 # define DVAL_FIRST(dv,p) ((void) 0)
2450 # define DVAL_NEXT(dv,p) ((void) 0)
2451 # define DVAL_LOOKAHEAD 0
2454 #if !defined(DVAL_ASSERT)
2455 #if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG)
2456 static void DVAL_ASSERT(lzo_xint dv
, const lzo_bytep p
)
2460 assert(DINDEX(dv
,p
) == DINDEX(df
,p
));
2463 # define DVAL_ASSERT(dv,p) ((void) 0)
2467 #if defined(LZO_DICT_USE_PTR)
2468 # define DENTRY(p,in) (p)
2469 # define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex]
2471 # define DENTRY(p,in) ((lzo_uint) ((p)-(in)))
2472 # define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex]
2477 # define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in)
2478 # define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in)
2479 # define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in)
2483 # define UPDATE_D(dict,drun,dv,p,in) \
2484 dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
2485 # define UPDATE_I(dict,drun,index,p,in) \
2486 dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
2487 # define UPDATE_P(ptr,drun,p,in) \
2488 (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK
2492 #if defined(LZO_DICT_USE_PTR)
2494 #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
2495 (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset)
2497 #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
2498 (BOUNDS_CHECKING_OFF_IN_EXPR(( \
2499 m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \
2500 PTR_LT(m_pos,in) || \
2501 (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) <= 0 || \
2502 m_off > max_offset )))
2506 #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
2508 ((m_off = pd(ip, in) - m_off) > max_offset) || \
2509 (m_pos = (ip) - (m_off), 0) )
2511 #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
2512 (pd(ip, in) <= m_off || \
2513 ((m_off = pd(ip, in) - m_off) > max_offset) || \
2514 (m_pos = (ip) - (m_off), 0) )
2518 #if defined(LZO_DETERMINISTIC)
2519 # define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET
2521 # define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET
2534 #define DO_COMPRESS lzo1x_1_compress
2536 static __lzo_noinline lzo_uint
2537 do_compress ( const lzo_bytep in
, lzo_uint in_len
,
2538 lzo_bytep out
, lzo_uintp out_len
,
2541 register const lzo_bytep ip
;
2543 const lzo_bytep
const in_end
= in
+ in_len
;
2544 const lzo_bytep
const ip_end
= in
+ in_len
- M2_MAX_LEN
- 5;
2546 lzo_dict_p
const dict
= (lzo_dict_p
) wrkmem
;
2555 register const lzo_bytep m_pos
;
2561 GINDEX(m_pos
,m_off
,dict
,dindex
,in
);
2562 if (LZO_CHECK_MPOS_NON_DET(m_pos
,m_off
,in
,ip
,M4_MAX_OFFSET
))
2565 if (m_off
<= M2_MAX_OFFSET
|| m_pos
[3] == ip
[3])
2569 GINDEX(m_pos
,m_off
,dict
,dindex
,in
);
2570 if (LZO_CHECK_MPOS_NON_DET(m_pos
,m_off
,in
,ip
,M4_MAX_OFFSET
))
2572 if (m_off
<= M2_MAX_OFFSET
|| m_pos
[3] == ip
[3])
2577 #if 1 && defined(LZO_UNALIGNED_OK_2)
2578 if (* (const lzo_ushortp
) m_pos
!= * (const lzo_ushortp
) ip
)
2580 if (m_pos
[0] != ip
[0] || m_pos
[1] != ip
[1])
2586 if __lzo_likely(m_pos
[2] == ip
[2])
2589 if (m_off
<= M2_MAX_OFFSET
)
2595 assert(op
- 2 > out
); op
[-2] |= LZO_BYTE(3);
2596 *op
++ = *ii
++; *op
++ = *ii
++; *op
++ = *ii
++;
2599 if (m_pos
[3] == ip
[3])
2607 if (m_off
<= M1_MAX_OFFSET
&& lit
> 0 && lit
<= 3)
2609 if (m_off
<= M1_MAX_OFFSET
&& lit
== 3)
2612 register lzo_uint t
;
2615 assert(op
- 2 > out
); op
[-2] |= LZO_BYTE(t
);
2616 do *op
++ = *ii
++; while (--t
> 0);
2619 *op
++ = LZO_BYTE(M1_MARKER
| ((m_off
& 3) << 2));
2620 *op
++ = LZO_BYTE(m_off
>> 2);
2629 UPDATE_I(dict
,0,dindex
,ip
,in
);
2631 if __lzo_unlikely(ip
>= ip_end
)
2636 UPDATE_I(dict
,0,dindex
,ip
,in
);
2639 register lzo_uint t
= pd(ip
,ii
);
2643 assert(op
- 2 > out
);
2644 op
[-2] |= LZO_BYTE(t
);
2647 *op
++ = LZO_BYTE(t
- 3);
2650 register lzo_uint tt
= t
- 18;
2659 *op
++ = LZO_BYTE(tt
);
2661 do *op
++ = *ii
++; while (--t
> 0);
2666 if (m_pos
[3] != *ip
++ || m_pos
[4] != *ip
++ || m_pos
[5] != *ip
++ ||
2667 m_pos
[6] != *ip
++ || m_pos
[7] != *ip
++ || m_pos
[8] != *ip
++
2669 || m_pos
[ 9] != *ip
++ || m_pos
[10] != *ip
++ || m_pos
[11] != *ip
++
2670 || m_pos
[12] != *ip
++ || m_pos
[13] != *ip
++ || m_pos
[14] != *ip
++
2676 assert(m_len
>= 3); assert(m_len
<= M2_MAX_LEN
);
2678 if (m_off
<= M2_MAX_OFFSET
)
2682 *op
++ = LZO_BYTE(((m_len
- 1) << 5) | ((m_off
& 7) << 2));
2683 *op
++ = LZO_BYTE(m_off
>> 3);
2684 #elif defined(LZO1Y)
2685 *op
++ = LZO_BYTE(((m_len
+ 1) << 4) | ((m_off
& 3) << 2));
2686 *op
++ = LZO_BYTE(m_off
>> 2);
2689 else if (m_off
<= M3_MAX_OFFSET
)
2692 *op
++ = LZO_BYTE(M3_MARKER
| (m_len
- 2));
2699 assert(m_off
> 0); assert(m_off
<= 0x7fff);
2700 *op
++ = LZO_BYTE(M4_MARKER
|
2701 ((m_off
& 0x4000) >> 11) | (m_len
- 2));
2704 #elif defined(LZO1Y)
2711 const lzo_bytep end
= in_end
;
2712 const lzo_bytep m
= m_pos
+ M2_MAX_LEN
+ 1;
2713 while (ip
< end
&& *m
== *ip
)
2717 assert(m_len
> M2_MAX_LEN
);
2719 if (m_off
<= M3_MAX_OFFSET
)
2723 *op
++ = LZO_BYTE(M3_MARKER
| (m_len
- 2));
2727 *op
++ = M3_MARKER
| 0;
2737 assert(m_off
> 0); assert(m_off
<= 0x7fff);
2738 if (m_len
<= M4_MAX_LEN
)
2739 *op
++ = LZO_BYTE(M4_MARKER
|
2740 ((m_off
& 0x4000) >> 11) | (m_len
- 2));
2743 m_len
-= M4_MAX_LEN
;
2744 *op
++ = LZO_BYTE(M4_MARKER
| ((m_off
& 0x4000) >> 11));
2752 *op
++ = LZO_BYTE(m_len
);
2757 *op
++ = LZO_BYTE((m_off
& 63) << 2);
2758 *op
++ = LZO_BYTE(m_off
>> 6);
2765 if __lzo_unlikely(ip
>= ip_end
)
2769 *out_len
= pd(op
, out
);
2770 return pd(in_end
,ii
);
2774 DO_COMPRESS ( const lzo_bytep in
, lzo_uint in_len
,
2775 lzo_bytep out
, lzo_uintp out_len
,
2781 if __lzo_unlikely(in_len
<= M2_MAX_LEN
+ 5)
2785 t
= do_compress(in
,in_len
,op
,out_len
,wrkmem
);
2791 const lzo_bytep ii
= in
+ in_len
- t
;
2793 if (op
== out
&& t
<= 238)
2794 *op
++ = LZO_BYTE(17 + t
);
2796 op
[-2] |= LZO_BYTE(t
);
2798 *op
++ = LZO_BYTE(t
- 3);
2801 lzo_uint tt
= t
- 18;
2810 *op
++ = LZO_BYTE(tt
);
2812 do *op
++ = *ii
++; while (--t
> 0);
2815 *op
++ = M4_MARKER
| 1;
2819 *out_len
= pd(op
, out
);
2829 #undef LZO_TEST_OVERRUN
2830 #undef DO_DECOMPRESS
2831 #define DO_DECOMPRESS lzo1x_decompress
2833 #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS)
2835 #if defined(LZO_TEST_OVERRUN)
2836 # if !defined(LZO_TEST_OVERRUN_INPUT)
2837 # define LZO_TEST_OVERRUN_INPUT 2
2839 # if !defined(LZO_TEST_OVERRUN_OUTPUT)
2840 # define LZO_TEST_OVERRUN_OUTPUT 2
2842 # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
2843 # define LZO_TEST_OVERRUN_LOOKBEHIND
2860 #if defined(LZO_TEST_OVERRUN_INPUT)
2861 # if (LZO_TEST_OVERRUN_INPUT >= 1)
2862 # define TEST_IP (ip < ip_end)
2864 # if (LZO_TEST_OVERRUN_INPUT >= 2)
2865 # define NEED_IP(x) \
2866 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
2870 #if defined(LZO_TEST_OVERRUN_OUTPUT)
2871 # if (LZO_TEST_OVERRUN_OUTPUT >= 1)
2872 # define TEST_OP (op <= op_end)
2874 # if (LZO_TEST_OVERRUN_OUTPUT >= 2)
2876 # define NEED_OP(x) \
2877 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
2881 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
2882 # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun
2883 # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun
2885 # define TEST_LB(m_pos) ((void) 0)
2886 # define TEST_LBO(m_pos,o) ((void) 0)
2889 #if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
2890 # define TEST_IP (ip < ip_end)
2893 #if defined(TEST_IP)
2894 # define HAVE_TEST_IP
2898 #if defined(TEST_OP)
2899 # define HAVE_TEST_OP
2904 #if defined(NEED_IP)
2905 # define HAVE_NEED_IP
2907 # define NEED_IP(x) ((void) 0)
2909 #if defined(NEED_OP)
2910 # define HAVE_NEED_OP
2912 # define NEED_OP(x) ((void) 0)
2915 #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
2916 # define HAVE_ANY_IP
2918 #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
2919 # define HAVE_ANY_OP
2923 #define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
2926 #if defined(LZO_UNALIGNED_OK_4)
2927 # define COPY4(dst,src) __COPY4(dst,src)
2928 #elif defined(LZO_ALIGNED_OK_4)
2929 # define COPY4(dst,src) __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src))
2932 #if defined(DO_DECOMPRESS)
2934 DO_DECOMPRESS ( const lzo_bytep in
, lzo_uint in_len
,
2935 lzo_bytep out
, lzo_uintp out_len
,
2939 register lzo_bytep op
;
2940 register const lzo_bytep ip
;
2941 register lzo_uint t
;
2942 #if defined(COPY_DICT)
2944 const lzo_bytep dict_end
;
2946 register const lzo_bytep m_pos
;
2949 const lzo_bytep
const ip_end
= in
+ in_len
;
2950 #if defined(HAVE_ANY_OP)
2951 lzo_bytep
const op_end
= out
+ *out_len
;
2954 lzo_uint last_m_off
= 0;
2959 #if defined(COPY_DICT)
2962 if (dict_len
> M4_MAX_OFFSET
)
2964 dict
+= dict_len
- M4_MAX_OFFSET
;
2965 dict_len
= M4_MAX_OFFSET
;
2967 dict_end
= dict
+ dict_len
;
2986 assert(t
> 0); NEED_OP(t
); NEED_IP(t
+1);
2987 do *op
++ = *ip
++; while (--t
> 0);
2988 goto first_literal_run
;
2991 while (TEST_IP
&& TEST_OP
)
3007 assert(t
> 0); NEED_OP(t
+3); NEED_IP(t
+4);
3008 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
3009 #if !defined(LZO_UNALIGNED_OK_4)
3010 if (PTR_ALIGNED2_4(op
,ip
))
3021 op
+= 4; ip
+= 4; t
-= 4;
3023 if (t
> 0) do *op
++ = *ip
++; while (--t
> 0);
3026 do *op
++ = *ip
++; while (--t
> 0);
3028 #if !defined(LZO_UNALIGNED_OK_4)
3033 #if !defined(LZO_UNALIGNED_OK_4)
3035 *op
++ = *ip
++; *op
++ = *ip
++; *op
++ = *ip
++;
3036 do *op
++ = *ip
++; while (--t
> 0);
3045 #if defined(COPY_DICT)
3047 m_off
= (1 + M2_MAX_OFFSET
) + (t
<< 6) + (*ip
++ >> 2);
3050 m_off
= (1 + M2_MAX_OFFSET
) + (t
>> 2) + (*ip
++ << 2);
3053 t
= 3; COPY_DICT(t
,m_off
)
3056 t
= (1 + M2_MAX_OFFSET
) + (t
<< 6) + (*ip
++ >> 2);
3060 m_pos
= op
- (1 + M2_MAX_OFFSET
);
3062 m_pos
-= *ip
++ << 2;
3064 TEST_LB(m_pos
); NEED_OP(3);
3065 *op
++ = *m_pos
++; *op
++ = *m_pos
++; *op
++ = *m_pos
;
3073 #if defined(COPY_DICT)
3075 m_off
= 1 + ((t
>> 2) & 7) + (*ip
++ << 3);
3077 #elif defined(LZO1Y)
3078 m_off
= 1 + ((t
>> 2) & 3) + (*ip
++ << 2);
3080 #elif defined(LZO1Z)
3086 m_off
= 1 + (m_off
<< 6) + (*ip
++ >> 2);
3094 m_pos
-= (t
>> 2) & 7;
3095 m_pos
-= *ip
++ << 3;
3097 #elif defined(LZO1Y)
3099 m_pos
-= (t
>> 2) & 3;
3100 m_pos
-= *ip
++ << 2;
3102 #elif defined(LZO1Z)
3104 lzo_uint off
= t
& 0x1f;
3108 assert(last_m_off
> 0);
3109 m_pos
-= last_m_off
;
3113 off
= 1 + (off
<< 6) + (*ip
++ >> 2);
3120 TEST_LB(m_pos
); assert(t
> 0); NEED_OP(t
+3-1);
3138 #if defined(COPY_DICT)
3140 m_off
= 1 + (ip
[0] << 6) + (ip
[1] >> 2);
3143 m_off
= 1 + (ip
[0] >> 2) + (ip
[1] << 6);
3148 lzo_uint off
= 1 + (ip
[0] << 6) + (ip
[1] >> 2);
3152 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
3154 m_pos
-= (* (const lzo_ushortp
) ip
) >> 2;
3157 m_pos
-= (ip
[0] >> 2) + (ip
[1] << 6);
3164 #if defined(COPY_DICT)
3165 m_off
= (t
& 8) << 11;
3168 m_pos
-= (t
& 8) << 11;
3182 #if defined(COPY_DICT)
3184 m_off
+= (ip
[0] << 6) + (ip
[1] >> 2);
3186 m_off
+= (ip
[0] >> 2) + (ip
[1] << 6);
3197 m_pos
-= (ip
[0] << 6) + (ip
[1] >> 2);
3198 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
3199 m_pos
-= (* (const lzo_ushortp
) ip
) >> 2;
3201 m_pos
-= (ip
[0] >> 2) + (ip
[1] << 6);
3208 last_m_off
= pd((const lzo_bytep
)op
, m_pos
);
3214 #if defined(COPY_DICT)
3216 m_off
= 1 + (t
<< 6) + (*ip
++ >> 2);
3219 m_off
= 1 + (t
>> 2) + (*ip
++ << 2);
3222 t
= 2; COPY_DICT(t
,m_off
)
3225 t
= 1 + (t
<< 6) + (*ip
++ >> 2);
3231 m_pos
-= *ip
++ << 2;
3233 TEST_LB(m_pos
); NEED_OP(2);
3234 *op
++ = *m_pos
++; *op
++ = *m_pos
;
3239 #if defined(COPY_DICT)
3242 t
+= 3-1; COPY_DICT(t
,m_off
)
3246 TEST_LB(m_pos
); assert(t
> 0); NEED_OP(t
+3-1);
3247 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
3248 #if !defined(LZO_UNALIGNED_OK_4)
3249 if (t
>= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op
,m_pos
))
3251 assert((op
- m_pos
) >= 4);
3253 if (t
>= 2 * 4 - (3 - 1) && (op
- m_pos
) >= 4)
3257 op
+= 4; m_pos
+= 4; t
-= 4 - (3 - 1);
3260 op
+= 4; m_pos
+= 4; t
-= 4;
3262 if (t
> 0) do *op
++ = *m_pos
++; while (--t
> 0);
3268 *op
++ = *m_pos
++; *op
++ = *m_pos
++;
3269 do *op
++ = *m_pos
++; while (--t
> 0);
3284 assert(t
> 0); assert(t
< 4); NEED_OP(t
); NEED_IP(t
+1);
3286 do *op
++ = *ip
++; while (--t
> 0);
3289 if (t
> 1) { *op
++ = *ip
++; if (t
> 2) { *op
++ = *ip
++; } }
3292 } while (TEST_IP
&& TEST_OP
);
3295 #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
3296 *out_len
= pd(op
, out
);
3297 return LZO_E_EOF_NOT_FOUND
;
3302 *out_len
= pd(op
, out
);
3303 return (ip
== ip_end
? LZO_E_OK
:
3304 (ip
< ip_end
? LZO_E_INPUT_NOT_CONSUMED
: LZO_E_INPUT_OVERRUN
));
3306 #if defined(HAVE_NEED_IP)
3308 *out_len
= pd(op
, out
);
3309 return LZO_E_INPUT_OVERRUN
;
3312 #if defined(HAVE_NEED_OP)
3314 *out_len
= pd(op
, out
);
3315 return LZO_E_OUTPUT_OVERRUN
;
3318 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
3320 *out_len
= pd(op
, out
);
3321 return LZO_E_LOOKBEHIND_OVERRUN
;
3327 #define LZO_TEST_OVERRUN
3328 #undef DO_DECOMPRESS
3329 #define DO_DECOMPRESS lzo1x_decompress_safe
3331 #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE)
3333 #if defined(LZO_TEST_OVERRUN)
3334 # if !defined(LZO_TEST_OVERRUN_INPUT)
3335 # define LZO_TEST_OVERRUN_INPUT 2
3337 # if !defined(LZO_TEST_OVERRUN_OUTPUT)
3338 # define LZO_TEST_OVERRUN_OUTPUT 2
3340 # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
3341 # define LZO_TEST_OVERRUN_LOOKBEHIND
3358 #if defined(LZO_TEST_OVERRUN_INPUT)
3359 # if (LZO_TEST_OVERRUN_INPUT >= 1)
3360 # define TEST_IP (ip < ip_end)
3362 # if (LZO_TEST_OVERRUN_INPUT >= 2)
3363 # define NEED_IP(x) \
3364 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
3368 #if defined(LZO_TEST_OVERRUN_OUTPUT)
3369 # if (LZO_TEST_OVERRUN_OUTPUT >= 1)
3370 # define TEST_OP (op <= op_end)
3372 # if (LZO_TEST_OVERRUN_OUTPUT >= 2)
3374 # define NEED_OP(x) \
3375 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
3379 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
3380 # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun
3381 # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun
3383 # define TEST_LB(m_pos) ((void) 0)
3384 # define TEST_LBO(m_pos,o) ((void) 0)
3387 #if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
3388 # define TEST_IP (ip < ip_end)
3391 #if defined(TEST_IP)
3392 # define HAVE_TEST_IP
3396 #if defined(TEST_OP)
3397 # define HAVE_TEST_OP
3402 #if defined(NEED_IP)
3403 # define HAVE_NEED_IP
3405 # define NEED_IP(x) ((void) 0)
3407 #if defined(NEED_OP)
3408 # define HAVE_NEED_OP
3410 # define NEED_OP(x) ((void) 0)
3413 #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
3414 # define HAVE_ANY_IP
3416 #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
3417 # define HAVE_ANY_OP
3421 #define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
3424 #if defined(LZO_UNALIGNED_OK_4)
3425 # define COPY4(dst,src) __COPY4(dst,src)
3426 #elif defined(LZO_ALIGNED_OK_4)
3427 # define COPY4(dst,src) __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src))
3430 #if defined(DO_DECOMPRESS)
3432 DO_DECOMPRESS ( const lzo_bytep in
, lzo_uint in_len
,
3433 lzo_bytep out
, lzo_uintp out_len
,
3437 register lzo_bytep op
;
3438 register const lzo_bytep ip
;
3439 register lzo_uint t
;
3440 #if defined(COPY_DICT)
3442 const lzo_bytep dict_end
;
3444 register const lzo_bytep m_pos
;
3447 const lzo_bytep
const ip_end
= in
+ in_len
;
3448 #if defined(HAVE_ANY_OP)
3449 lzo_bytep
const op_end
= out
+ *out_len
;
3452 lzo_uint last_m_off
= 0;
3457 #if defined(COPY_DICT)
3460 if (dict_len
> M4_MAX_OFFSET
)
3462 dict
+= dict_len
- M4_MAX_OFFSET
;
3463 dict_len
= M4_MAX_OFFSET
;
3465 dict_end
= dict
+ dict_len
;
3484 assert(t
> 0); NEED_OP(t
); NEED_IP(t
+1);
3485 do *op
++ = *ip
++; while (--t
> 0);
3486 goto first_literal_run
;
3489 while (TEST_IP
&& TEST_OP
)
3505 assert(t
> 0); NEED_OP(t
+3); NEED_IP(t
+4);
3506 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
3507 #if !defined(LZO_UNALIGNED_OK_4)
3508 if (PTR_ALIGNED2_4(op
,ip
))
3519 op
+= 4; ip
+= 4; t
-= 4;
3521 if (t
> 0) do *op
++ = *ip
++; while (--t
> 0);
3524 do *op
++ = *ip
++; while (--t
> 0);
3526 #if !defined(LZO_UNALIGNED_OK_4)
3531 #if !defined(LZO_UNALIGNED_OK_4)
3533 *op
++ = *ip
++; *op
++ = *ip
++; *op
++ = *ip
++;
3534 do *op
++ = *ip
++; while (--t
> 0);
3543 #if defined(COPY_DICT)
3545 m_off
= (1 + M2_MAX_OFFSET
) + (t
<< 6) + (*ip
++ >> 2);
3548 m_off
= (1 + M2_MAX_OFFSET
) + (t
>> 2) + (*ip
++ << 2);
3551 t
= 3; COPY_DICT(t
,m_off
)
3554 t
= (1 + M2_MAX_OFFSET
) + (t
<< 6) + (*ip
++ >> 2);
3558 m_pos
= op
- (1 + M2_MAX_OFFSET
);
3560 m_pos
-= *ip
++ << 2;
3562 TEST_LB(m_pos
); NEED_OP(3);
3563 *op
++ = *m_pos
++; *op
++ = *m_pos
++; *op
++ = *m_pos
;
3571 #if defined(COPY_DICT)
3573 m_off
= 1 + ((t
>> 2) & 7) + (*ip
++ << 3);
3575 #elif defined(LZO1Y)
3576 m_off
= 1 + ((t
>> 2) & 3) + (*ip
++ << 2);
3578 #elif defined(LZO1Z)
3584 m_off
= 1 + (m_off
<< 6) + (*ip
++ >> 2);
3592 m_pos
-= (t
>> 2) & 7;
3593 m_pos
-= *ip
++ << 3;
3595 #elif defined(LZO1Y)
3597 m_pos
-= (t
>> 2) & 3;
3598 m_pos
-= *ip
++ << 2;
3600 #elif defined(LZO1Z)
3602 lzo_uint off
= t
& 0x1f;
3606 assert(last_m_off
> 0);
3607 m_pos
-= last_m_off
;
3611 off
= 1 + (off
<< 6) + (*ip
++ >> 2);
3618 TEST_LB(m_pos
); assert(t
> 0); NEED_OP(t
+3-1);
3636 #if defined(COPY_DICT)
3638 m_off
= 1 + (ip
[0] << 6) + (ip
[1] >> 2);
3641 m_off
= 1 + (ip
[0] >> 2) + (ip
[1] << 6);
3646 lzo_uint off
= 1 + (ip
[0] << 6) + (ip
[1] >> 2);
3650 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
3652 m_pos
-= (* (const lzo_ushortp
) ip
) >> 2;
3655 m_pos
-= (ip
[0] >> 2) + (ip
[1] << 6);
3662 #if defined(COPY_DICT)
3663 m_off
= (t
& 8) << 11;
3666 m_pos
-= (t
& 8) << 11;
3680 #if defined(COPY_DICT)
3682 m_off
+= (ip
[0] << 6) + (ip
[1] >> 2);
3684 m_off
+= (ip
[0] >> 2) + (ip
[1] << 6);
3695 m_pos
-= (ip
[0] << 6) + (ip
[1] >> 2);
3696 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
3697 m_pos
-= (* (const lzo_ushortp
) ip
) >> 2;
3699 m_pos
-= (ip
[0] >> 2) + (ip
[1] << 6);
3706 last_m_off
= pd((const lzo_bytep
)op
, m_pos
);
3712 #if defined(COPY_DICT)
3714 m_off
= 1 + (t
<< 6) + (*ip
++ >> 2);
3717 m_off
= 1 + (t
>> 2) + (*ip
++ << 2);
3720 t
= 2; COPY_DICT(t
,m_off
)
3723 t
= 1 + (t
<< 6) + (*ip
++ >> 2);
3729 m_pos
-= *ip
++ << 2;
3731 TEST_LB(m_pos
); NEED_OP(2);
3732 *op
++ = *m_pos
++; *op
++ = *m_pos
;
3737 #if defined(COPY_DICT)
3740 t
+= 3-1; COPY_DICT(t
,m_off
)
3744 TEST_LB(m_pos
); assert(t
> 0); NEED_OP(t
+3-1);
3745 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
3746 #if !defined(LZO_UNALIGNED_OK_4)
3747 if (t
>= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op
,m_pos
))
3749 assert((op
- m_pos
) >= 4);
3751 if (t
>= 2 * 4 - (3 - 1) && (op
- m_pos
) >= 4)
3755 op
+= 4; m_pos
+= 4; t
-= 4 - (3 - 1);
3758 op
+= 4; m_pos
+= 4; t
-= 4;
3760 if (t
> 0) do *op
++ = *m_pos
++; while (--t
> 0);
3766 *op
++ = *m_pos
++; *op
++ = *m_pos
++;
3767 do *op
++ = *m_pos
++; while (--t
> 0);
3782 assert(t
> 0); assert(t
< 4); NEED_OP(t
); NEED_IP(t
+1);
3784 do *op
++ = *ip
++; while (--t
> 0);
3787 if (t
> 1) { *op
++ = *ip
++; if (t
> 2) { *op
++ = *ip
++; } }
3790 } while (TEST_IP
&& TEST_OP
);
3793 #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
3794 *out_len
= pd(op
, out
);
3795 return LZO_E_EOF_NOT_FOUND
;
3800 *out_len
= pd(op
, out
);
3801 return (ip
== ip_end
? LZO_E_OK
:
3802 (ip
< ip_end
? LZO_E_INPUT_NOT_CONSUMED
: LZO_E_INPUT_OVERRUN
));
3804 #if defined(HAVE_NEED_IP)
3806 *out_len
= pd(op
, out
);
3807 return LZO_E_INPUT_OVERRUN
;
3810 #if defined(HAVE_NEED_OP)
3812 *out_len
= pd(op
, out
);
3813 return LZO_E_OUTPUT_OVERRUN
;
3816 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
3818 *out_len
= pd(op
, out
);
3819 return LZO_E_LOOKBEHIND_OVERRUN
;
3825 /***** End of minilzo.c *****/