From c53f54fe2005ee56c0c51c950cb9c1ec2760b764 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 23 Aug 2004 18:21:09 +0000 Subject: [PATCH] Changed from LZO to GZ compression --- amxmodx/amxxfile.cpp | 34 +- amxmodx/minilzo/lzoconf.h | 451 ------ amxmodx/minilzo/minilzo.c | 2935 ----------------------------------- amxmodx/minilzo/minilzo.h | 100 -- amxmodx/msvc/amxmodx.vcproj | 5 +- amxmodx/zlib/zconf.h | 323 ++++ amxmodx/zlib/zlib.h | 1200 ++++++++++++++ amxmodx/zlib/zlib.lib | Bin 0 -> 221206 bytes 8 files changed, 1541 insertions(+), 3507 deletions(-) delete mode 100755 amxmodx/minilzo/lzoconf.h delete mode 100755 amxmodx/minilzo/minilzo.c delete mode 100755 amxmodx/minilzo/minilzo.h create mode 100755 amxmodx/zlib/zconf.h create mode 100755 amxmodx/zlib/zlib.h create mode 100755 amxmodx/zlib/zlib.lib diff --git a/amxmodx/amxxfile.cpp b/amxmodx/amxxfile.cpp index 642adf70..8053fb12 100755 --- a/amxmodx/amxxfile.cpp +++ b/amxmodx/amxxfile.cpp @@ -31,7 +31,7 @@ #include "amxmodx.h" #include "amxxfile.h" -#include "minilzo/minilzo.h" +#include "zlib/zlib.h" /********************** ****** AMXXFILE ****** @@ -51,7 +51,7 @@ #endif #endif -typedef lzo_byte mint8_t; +typedef char mint8_t; typedef int16_t mint16_t; typedef int32_t mint32_t; @@ -85,13 +85,6 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize) m_Status = Err_None; m_CellSize = cellsize; - // Make sure the decompressor runs - if (lzo_init() != LZO_E_OK) - { - m_Status = Err_DecompressorInit; - return; - } - m_pFile = fopen(filename, "rb"); if (!m_pFile) { @@ -103,7 +96,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize) DATAREAD(&magic, sizeof(magic), 1); m_OldFile = false; - if (magic != 0x524C4542) + if (magic != 0x414D5842) { // check for old file AMX_HEADER hdr; @@ -205,11 +198,15 @@ size_t CAmxxReader::GetBufferSize() if (!m_pFile) return 0; + + long save = ftell(m_pFile); + if (m_OldFile) { rewind(m_pFile); AMX_HEADER hdr; DATAREAD(&hdr, sizeof(hdr), 1); + fseek(m_pFile, save, SEEK_SET); return hdr.stp; } @@ -217,6 +214,7 @@ size_t CAmxxReader::GetBufferSize() TableEntry entry; DATAREAD(&entry, sizeof(entry), 1); + fseek(m_pFile, save, SEEK_SET); return entry.origSize + 1; // +1 : safe } @@ -255,16 +253,18 @@ CAmxxReader::Error CAmxxReader::GetSection(void *buffer) TableEntry entry; DATAREAD(&entry, sizeof(entry), 1); fseek(m_pFile, entry.offset, SEEK_SET); - +// AMXXLOG_Log("|||| Offset needed: %d At: %d", entry.offset, ftell(m_pFile)); + uLongf destLen = GetBufferSize(); // read the data to a temporary buffer - lzo_byte *tempBuffer = new lzo_byte[m_SectionLength + 1]; + char *tempBuffer = new char[m_SectionLength + 1]; + //fread(tempBuffer, sizeof(char), m_SectionLength, m_pFile); DATAREAD((void*)tempBuffer, 1, m_SectionLength); // decompress - lzo_uint destLen = GetBufferSize(); - int result = lzo1x_decompress_safe(tempBuffer, m_SectionLength, - (lzo_byte*)buffer, &destLen, - NULL /*unused*/ ); - if (result != LZO_E_OK) +// AMXXLOG_Log("|||| First Bytes: %d %d %d %d", tempBuffer[0], tempBuffer[1], tempBuffer[2], tempBuffer[3]); + int result = uncompress((Bytef *)buffer, &destLen, + (Bytef *)tempBuffer, m_SectionLength); +// AMXXLOG_Log("|||| Result: %d, m_SectionLength=%d, destLen=%d", result, m_SectionLength, destLen); + if (result != Z_OK) { m_Status = Err_Decompress; return Err_Decompress; diff --git a/amxmodx/minilzo/lzoconf.h b/amxmodx/minilzo/lzoconf.h deleted file mode 100755 index 96db1805..00000000 --- a/amxmodx/minilzo/lzoconf.h +++ /dev/null @@ -1,451 +0,0 @@ -/* lzoconf.h -- configuration for the LZO real-time data compression library - - This file is part of the LZO real-time data compression library. - - Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer - All Rights Reserved. - - The LZO library is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. - - The LZO library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the LZO library; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - Markus F.X.J. Oberhumer - - http://www.oberhumer.com/opensource/lzo/ - */ - - -#ifndef __LZOCONF_H -#define __LZOCONF_H - -#define LZO_VERSION 0x1080 -#define LZO_VERSION_STRING "1.08" -#define LZO_VERSION_DATE "Jul 12 2002" - -/* internal Autoconf configuration file - only used when building LZO */ -#if defined(LZO_HAVE_CONFIG_H) -# include -#endif -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/*********************************************************************** -// LZO requires a conforming -************************************************************************/ - -#if !defined(CHAR_BIT) || (CHAR_BIT != 8) -# error "invalid CHAR_BIT" -#endif -#if !defined(UCHAR_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX) -# error "check your compiler installation" -#endif -#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1) -# error "your limits.h macros are broken" -#endif - -/* workaround a cpp bug under hpux 10.20 */ -#define LZO_0xffffffffL 4294967295ul - -#if !defined(LZO_UINT32_C) -# if (UINT_MAX < LZO_0xffffffffL) -# define LZO_UINT32_C(c) c ## UL -# else -# define LZO_UINT32_C(c) c ## U -# endif -#endif - - -/*********************************************************************** -// architecture defines -************************************************************************/ - -#if !defined(__LZO_WIN) && !defined(__LZO_DOS) && !defined(__LZO_OS2) -# if defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) -# define __LZO_WIN -# elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) -# define __LZO_WIN -# elif defined(__NT__) || defined(__NT_DLL__) || defined(__WINDOWS_386__) -# define __LZO_WIN -# elif defined(__DOS__) || defined(__MSDOS__) || defined(MSDOS) -# define __LZO_DOS -# elif defined(__OS2__) || defined(__OS2V2__) || defined(OS2) -# define __LZO_OS2 -# elif defined(__palmos__) -# define __LZO_PALMOS -# elif defined(__TOS__) || defined(__atarist__) -# define __LZO_TOS -# endif -#endif - -#if (UINT_MAX < LZO_0xffffffffL) -# if defined(__LZO_WIN) -# define __LZO_WIN16 -# elif defined(__LZO_DOS) -# define __LZO_DOS16 -# elif defined(__LZO_PALMOS) -# define __LZO_PALMOS16 -# elif defined(__LZO_TOS) -# define __LZO_TOS16 -# elif defined(__C166__) -# else - /* porting hint: for pure 16-bit architectures try compiling - * everything with -D__LZO_STRICT_16BIT */ -# error "16-bit target not supported - contact me for porting hints" -# endif -#endif - -#if !defined(__LZO_i386) -# if defined(__LZO_DOS) || defined(__LZO_WIN16) -# define __LZO_i386 -# elif defined(__i386__) || defined(__386__) || defined(_M_IX86) -# define __LZO_i386 -# endif -#endif - -#if defined(__LZO_STRICT_16BIT) -# if (UINT_MAX < LZO_0xffffffffL) -# include -# endif -#endif - -/* memory checkers */ -#if !defined(__LZO_CHECKER) -# if defined(__BOUNDS_CHECKING_ON) -# define __LZO_CHECKER -# elif defined(__CHECKER__) -# define __LZO_CHECKER -# elif defined(__INSURE__) -# define __LZO_CHECKER -# elif defined(__PURIFY__) -# define __LZO_CHECKER -# endif -#endif - - -/*********************************************************************** -// integral and pointer types -************************************************************************/ - -/* Integral types with 32 bits or more */ -#if !defined(LZO_UINT32_MAX) -# if (UINT_MAX >= LZO_0xffffffffL) - typedef unsigned int lzo_uint32; - typedef int lzo_int32; -# define LZO_UINT32_MAX UINT_MAX -# define LZO_INT32_MAX INT_MAX -# define LZO_INT32_MIN INT_MIN -# elif (ULONG_MAX >= LZO_0xffffffffL) - typedef unsigned long lzo_uint32; - typedef long lzo_int32; -# define LZO_UINT32_MAX ULONG_MAX -# define LZO_INT32_MAX LONG_MAX -# define LZO_INT32_MIN LONG_MIN -# else -# error "lzo_uint32" -# endif -#endif - -/* lzo_uint is used like size_t */ -#if !defined(LZO_UINT_MAX) -# if (UINT_MAX >= LZO_0xffffffffL) - typedef unsigned int lzo_uint; - typedef int lzo_int; -# define LZO_UINT_MAX UINT_MAX -# define LZO_INT_MAX INT_MAX -# define LZO_INT_MIN INT_MIN -# elif (ULONG_MAX >= LZO_0xffffffffL) - typedef unsigned long lzo_uint; - typedef long lzo_int; -# define LZO_UINT_MAX ULONG_MAX -# define LZO_INT_MAX LONG_MAX -# define LZO_INT_MIN LONG_MIN -# else -# error "lzo_uint" -# endif -#endif - -typedef int lzo_bool; - - -/*********************************************************************** -// memory models -************************************************************************/ - -/* Memory model for the public code segment. */ -#if !defined(__LZO_CMODEL) -# if defined(__LZO_DOS16) || defined(__LZO_WIN16) -# define __LZO_CMODEL __far -# elif defined(__LZO_i386) && defined(__WATCOMC__) -# define __LZO_CMODEL __near -# else -# define __LZO_CMODEL -# endif -#endif - -/* Memory model for the public data segment. */ -#if !defined(__LZO_DMODEL) -# if defined(__LZO_DOS16) || defined(__LZO_WIN16) -# define __LZO_DMODEL __far -# elif defined(__LZO_i386) && defined(__WATCOMC__) -# define __LZO_DMODEL __near -# else -# define __LZO_DMODEL -# endif -#endif - -/* Memory model that allows to access memory at offsets of lzo_uint. */ -#if !defined(__LZO_MMODEL) -# if (LZO_UINT_MAX <= UINT_MAX) -# define __LZO_MMODEL -# elif defined(__LZO_DOS16) || defined(__LZO_WIN16) -# define __LZO_MMODEL __huge -# define LZO_999_UNSUPPORTED -# elif defined(__LZO_PALMOS16) || defined(__LZO_TOS16) -# define __LZO_MMODEL -# else -# error "__LZO_MMODEL" -# endif -#endif - -/* no typedef here because of const-pointer issues */ -#define lzo_byte unsigned char __LZO_MMODEL -#define lzo_bytep unsigned char __LZO_MMODEL * -#define lzo_charp char __LZO_MMODEL * -#define lzo_voidp void __LZO_MMODEL * -#define lzo_shortp short __LZO_MMODEL * -#define lzo_ushortp unsigned short __LZO_MMODEL * -#define lzo_uint32p lzo_uint32 __LZO_MMODEL * -#define lzo_int32p lzo_int32 __LZO_MMODEL * -#define lzo_uintp lzo_uint __LZO_MMODEL * -#define lzo_intp lzo_int __LZO_MMODEL * -#define lzo_voidpp lzo_voidp __LZO_MMODEL * -#define lzo_bytepp lzo_bytep __LZO_MMODEL * - -#ifndef lzo_sizeof_dict_t -# define lzo_sizeof_dict_t sizeof(lzo_bytep) -#endif - - -/*********************************************************************** -// calling conventions and function types -************************************************************************/ - -/* linkage */ -#if !defined(__LZO_EXTERN_C) -# ifdef __cplusplus -# define __LZO_EXTERN_C extern "C" -# else -# define __LZO_EXTERN_C extern -# endif -#endif - -/* calling convention */ -#if !defined(__LZO_CDECL) -# if defined(__LZO_DOS16) || defined(__LZO_WIN16) -# define __LZO_CDECL __LZO_CMODEL __cdecl -# elif defined(__LZO_i386) && defined(_MSC_VER) -# define __LZO_CDECL __LZO_CMODEL __cdecl -# elif defined(__LZO_i386) && defined(__WATCOMC__) -# define __LZO_CDECL __LZO_CMODEL __cdecl -# else -# define __LZO_CDECL __LZO_CMODEL -# endif -#endif -#if !defined(__LZO_ENTRY) -# define __LZO_ENTRY __LZO_CDECL -#endif - -/* C++ exception specification for extern "C" function types */ -#if !defined(__cplusplus) -# undef LZO_NOTHROW -# define LZO_NOTHROW -#elif !defined(LZO_NOTHROW) -# define LZO_NOTHROW -#endif - - -typedef int -(__LZO_ENTRY *lzo_compress_t) ( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem ); - -typedef int -(__LZO_ENTRY *lzo_decompress_t) ( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem ); - -typedef int -(__LZO_ENTRY *lzo_optimize_t) ( lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem ); - -typedef int -(__LZO_ENTRY *lzo_compress_dict_t)(const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem, - const lzo_byte *dict, lzo_uint dict_len ); - -typedef int -(__LZO_ENTRY *lzo_decompress_dict_t)(const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem, - const lzo_byte *dict, lzo_uint dict_len ); - - -/* assembler versions always use __cdecl */ -typedef int -(__LZO_CDECL *lzo_compress_asm_t)( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem ); - -typedef int -(__LZO_CDECL *lzo_decompress_asm_t)( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem ); - - -/* a progress indicator callback function */ -typedef void (__LZO_ENTRY *lzo_progress_callback_t) (lzo_uint, lzo_uint); - - -/*********************************************************************** -// export information -************************************************************************/ - -/* DLL export information */ -#if !defined(__LZO_EXPORT1) -# define __LZO_EXPORT1 -#endif -#if !defined(__LZO_EXPORT2) -# define __LZO_EXPORT2 -#endif - -/* exported calling convention for C functions */ -#if !defined(LZO_PUBLIC) -# define LZO_PUBLIC(_rettype) \ - __LZO_EXPORT1 _rettype __LZO_EXPORT2 __LZO_ENTRY -#endif -#if !defined(LZO_EXTERN) -# define LZO_EXTERN(_rettype) __LZO_EXTERN_C LZO_PUBLIC(_rettype) -#endif -#if !defined(LZO_PRIVATE) -# define LZO_PRIVATE(_rettype) static _rettype __LZO_ENTRY -#endif - -/* exported __cdecl calling convention for assembler functions */ -#if !defined(LZO_PUBLIC_CDECL) -# define LZO_PUBLIC_CDECL(_rettype) \ - __LZO_EXPORT1 _rettype __LZO_EXPORT2 __LZO_CDECL -#endif -#if !defined(LZO_EXTERN_CDECL) -# define LZO_EXTERN_CDECL(_rettype) __LZO_EXTERN_C LZO_PUBLIC_CDECL(_rettype) -#endif - -/* exported global variables (LZO currently uses no static variables and - * is fully thread safe) */ -#if !defined(LZO_PUBLIC_VAR) -# define LZO_PUBLIC_VAR(_type) \ - __LZO_EXPORT1 _type __LZO_EXPORT2 __LZO_DMODEL -#endif -#if !defined(LZO_EXTERN_VAR) -# define LZO_EXTERN_VAR(_type) extern LZO_PUBLIC_VAR(_type) -#endif - - -/*********************************************************************** -// error codes and prototypes -************************************************************************/ - -/* Error codes for the compression/decompression functions. Negative - * values are errors, positive values will be used for special but - * normal events. - */ -#define LZO_E_OK 0 -#define LZO_E_ERROR (-1) -#define LZO_E_OUT_OF_MEMORY (-2) /* not used right now */ -#define LZO_E_NOT_COMPRESSIBLE (-3) /* not used right now */ -#define LZO_E_INPUT_OVERRUN (-4) -#define LZO_E_OUTPUT_OVERRUN (-5) -#define LZO_E_LOOKBEHIND_OVERRUN (-6) -#define LZO_E_EOF_NOT_FOUND (-7) -#define LZO_E_INPUT_NOT_CONSUMED (-8) - - -/* lzo_init() should be the first function you call. - * Check the return code ! - * - * lzo_init() is a macro to allow checking that the library and the - * compiler's view of various types are consistent. - */ -#define lzo_init() __lzo_init2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\ - (int)sizeof(long),(int)sizeof(lzo_uint32),(int)sizeof(lzo_uint),\ - (int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\ - (int)sizeof(lzo_compress_t)) -LZO_EXTERN(int) __lzo_init2(unsigned,int,int,int,int,int,int,int,int,int); - -/* version functions (useful for shared libraries) */ -LZO_EXTERN(unsigned) lzo_version(void); -LZO_EXTERN(const char *) lzo_version_string(void); -LZO_EXTERN(const char *) lzo_version_date(void); -LZO_EXTERN(const lzo_charp) _lzo_version_string(void); -LZO_EXTERN(const lzo_charp) _lzo_version_date(void); - -/* string functions */ -LZO_EXTERN(int) -lzo_memcmp(const lzo_voidp _s1, const lzo_voidp _s2, lzo_uint _len); -LZO_EXTERN(lzo_voidp) -lzo_memcpy(lzo_voidp _dest, const lzo_voidp _src, lzo_uint _len); -LZO_EXTERN(lzo_voidp) -lzo_memmove(lzo_voidp _dest, const lzo_voidp _src, lzo_uint _len); -LZO_EXTERN(lzo_voidp) -lzo_memset(lzo_voidp _s, int _c, lzo_uint _len); - -/* checksum functions */ -LZO_EXTERN(lzo_uint32) -lzo_adler32(lzo_uint32 _adler, const lzo_byte *_buf, lzo_uint _len); -LZO_EXTERN(lzo_uint32) -lzo_crc32(lzo_uint32 _c, const lzo_byte *_buf, lzo_uint _len); - -/* misc. */ -LZO_EXTERN(lzo_bool) lzo_assert(int _expr); -LZO_EXTERN(int) _lzo_config_check(void); -typedef union { lzo_bytep p; lzo_uint u; } __lzo_pu_u; -typedef union { lzo_bytep p; lzo_uint32 u32; } __lzo_pu32_u; -typedef union { void *vp; lzo_bytep bp; lzo_uint32 u32; long l; } lzo_align_t; - -/* align a char pointer on a boundary that is a multiple of `size' */ -LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp _ptr, lzo_uint _size); -#define LZO_PTR_ALIGN_UP(_ptr,_size) \ - ((_ptr) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(_ptr),(lzo_uint)(_size))) - -/* deprecated - only for backward compatibility */ -#define LZO_ALIGN(_ptr,_size) LZO_PTR_ALIGN_UP(_ptr,_size) - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* already included */ - diff --git a/amxmodx/minilzo/minilzo.c b/amxmodx/minilzo/minilzo.c deleted file mode 100755 index 85771eb4..00000000 --- a/amxmodx/minilzo/minilzo.c +++ /dev/null @@ -1,2935 +0,0 @@ -/* minilzo.c -- mini subset of the LZO real-time data compression library - - This file is part of the LZO real-time data compression library. - - Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer - All Rights Reserved. - - The LZO library is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. - - The LZO library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the LZO library; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - Markus F.X.J. Oberhumer - - http://www.oberhumer.com/opensource/lzo/ - */ - -/* - * NOTE: - * the full LZO package can be found at - * http://www.oberhumer.com/opensource/lzo/ - */ - -#define __LZO_IN_MINILZO -#define LZO_BUILD - -#ifdef MINILZO_HAVE_CONFIG_H -# include -#endif - -#undef LZO_HAVE_CONFIG_H -#include "minilzo.h" - -#if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x1080) -# error "version mismatch in miniLZO source files" -#endif - -#ifdef MINILZO_HAVE_CONFIG_H -# define LZO_HAVE_CONFIG_H -#endif - -#if !defined(LZO_NO_SYS_TYPES_H) -# include -#endif -#include - -#ifndef __LZO_CONF_H -#define __LZO_CONF_H - -#if !defined(__LZO_IN_MINILZO) -# ifndef __LZOCONF_H -# include -# endif -#endif - -#if defined(__BOUNDS_CHECKING_ON) -# include -#else -# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt -# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) -#endif - -#if !defined(LZO_HAVE_CONFIG_H) -# include -# include -# if !defined(NO_STDLIB_H) -# include -# endif -# define HAVE_MEMCMP -# define HAVE_MEMCPY -# define HAVE_MEMMOVE -# define HAVE_MEMSET -#else -# include -# if defined(HAVE_STDDEF_H) -# include -# endif -# if defined(STDC_HEADERS) -# include -# include -# endif -#endif - -#if defined(__LZO_DOS16) || defined(__LZO_WIN16) -# define HAVE_MALLOC_H -# define HAVE_HALLOC -#endif - -#undef NDEBUG -#if !defined(LZO_DEBUG) -# define NDEBUG -#endif -#if defined(LZO_DEBUG) || !defined(NDEBUG) -# if !defined(NO_STDIO_H) -# include -# endif -#endif -#include - -#if !defined(LZO_COMPILE_TIME_ASSERT) -# define LZO_COMPILE_TIME_ASSERT(expr) \ - { typedef int __lzo_compile_time_assert_fail[1 - 2 * !(expr)]; } -#endif - -#if !defined(LZO_UNUSED) -# if 1 -# define LZO_UNUSED(var) ((void)&var) -# elif 0 -# define LZO_UNUSED(var) { typedef int __lzo_unused[sizeof(var) ? 2 : 1]; } -# else -# define LZO_UNUSED(parm) (parm = parm) -# endif -#endif - -#if !defined(__inline__) && !defined(__GNUC__) -# if defined(__cplusplus) -# define __inline__ inline -# else -# define __inline__ -# endif -#endif - -#if defined(NO_MEMCMP) -# undef HAVE_MEMCMP -#endif - -#if !defined(HAVE_MEMCMP) -# undef memcmp -# define memcmp lzo_memcmp -#endif -#if !defined(HAVE_MEMCPY) -# undef memcpy -# define memcpy lzo_memcpy -#endif -#if !defined(HAVE_MEMMOVE) -# undef memmove -# define memmove lzo_memmove -#endif -#if !defined(HAVE_MEMSET) -# undef memset -# define memset lzo_memset -#endif - -#if 0 -# define LZO_BYTE(x) ((unsigned char) (x)) -#else -# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) -#endif - -#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) -#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) -#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) -#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) - -#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) - -#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) - -#define LZO_SIZE(bits) (1u << (bits)) -#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) - -#define LZO_LSIZE(bits) (1ul << (bits)) -#define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1) - -#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) -#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) - -#define LZO_STYPE_MAX(b) (((1l << (8*(b)-2)) - 1l) + (1l << (8*(b)-2))) -#define LZO_UTYPE_MAX(b) (((1ul << (8*(b)-1)) - 1ul) + (1ul << (8*(b)-1))) - -#if !defined(SIZEOF_UNSIGNED) -# if (UINT_MAX == 0xffff) -# define SIZEOF_UNSIGNED 2 -# elif (UINT_MAX == LZO_0xffffffffL) -# define SIZEOF_UNSIGNED 4 -# elif (UINT_MAX >= LZO_0xffffffffL) -# define SIZEOF_UNSIGNED 8 -# else -# error "SIZEOF_UNSIGNED" -# endif -#endif - -#if !defined(SIZEOF_UNSIGNED_LONG) -# if (ULONG_MAX == LZO_0xffffffffL) -# define SIZEOF_UNSIGNED_LONG 4 -# elif (ULONG_MAX >= LZO_0xffffffffL) -# define SIZEOF_UNSIGNED_LONG 8 -# else -# error "SIZEOF_UNSIGNED_LONG" -# endif -#endif - -#if !defined(SIZEOF_SIZE_T) -# define SIZEOF_SIZE_T SIZEOF_UNSIGNED -#endif -#if !defined(SIZE_T_MAX) -# define SIZE_T_MAX LZO_UTYPE_MAX(SIZEOF_SIZE_T) -#endif - -#if 1 && defined(__LZO_i386) && (UINT_MAX == LZO_0xffffffffL) -# if !defined(LZO_UNALIGNED_OK_2) && (USHRT_MAX == 0xffff) -# define LZO_UNALIGNED_OK_2 -# endif -# if !defined(LZO_UNALIGNED_OK_4) && (LZO_UINT32_MAX == LZO_0xffffffffL) -# define LZO_UNALIGNED_OK_4 -# endif -#endif - -#if defined(LZO_UNALIGNED_OK_2) || defined(LZO_UNALIGNED_OK_4) -# if !defined(LZO_UNALIGNED_OK) -# define LZO_UNALIGNED_OK -# endif -#endif - -#if defined(__LZO_NO_UNALIGNED) -# undef LZO_UNALIGNED_OK -# undef LZO_UNALIGNED_OK_2 -# undef LZO_UNALIGNED_OK_4 -#endif - -#if defined(LZO_UNALIGNED_OK_2) && (USHRT_MAX != 0xffff) -# error "LZO_UNALIGNED_OK_2 must not be defined on this system" -#endif -#if defined(LZO_UNALIGNED_OK_4) && (LZO_UINT32_MAX != LZO_0xffffffffL) -# error "LZO_UNALIGNED_OK_4 must not be defined on this system" -#endif - -#if defined(__LZO_NO_ALIGNED) -# undef LZO_ALIGNED_OK_4 -#endif - -#if defined(LZO_ALIGNED_OK_4) && (LZO_UINT32_MAX != LZO_0xffffffffL) -# error "LZO_ALIGNED_OK_4 must not be defined on this system" -#endif - -#define LZO_LITTLE_ENDIAN 1234 -#define LZO_BIG_ENDIAN 4321 -#define LZO_PDP_ENDIAN 3412 - -#if !defined(LZO_BYTE_ORDER) -# if defined(MFX_BYTE_ORDER) -# define LZO_BYTE_ORDER MFX_BYTE_ORDER -# elif defined(__LZO_i386) -# define LZO_BYTE_ORDER LZO_LITTLE_ENDIAN -# elif defined(BYTE_ORDER) -# define LZO_BYTE_ORDER BYTE_ORDER -# elif defined(__BYTE_ORDER) -# define LZO_BYTE_ORDER __BYTE_ORDER -# endif -#endif - -#if defined(LZO_BYTE_ORDER) -# if (LZO_BYTE_ORDER != LZO_LITTLE_ENDIAN) && \ - (LZO_BYTE_ORDER != LZO_BIG_ENDIAN) -# error "invalid LZO_BYTE_ORDER" -# endif -#endif - -#if defined(LZO_UNALIGNED_OK) && !defined(LZO_BYTE_ORDER) -# error "LZO_BYTE_ORDER is not defined" -#endif - -#define LZO_OPTIMIZE_GNUC_i386_IS_BUGGY - -#if defined(NDEBUG) && !defined(LZO_DEBUG) && !defined(__LZO_CHECKER) -# if defined(__GNUC__) && defined(__i386__) -# if !defined(LZO_OPTIMIZE_GNUC_i386_IS_BUGGY) -# define LZO_OPTIMIZE_GNUC_i386 -# endif -# endif -#endif - -__LZO_EXTERN_C int __lzo_init_done; -__LZO_EXTERN_C const lzo_byte __lzo_copyright[]; -LZO_EXTERN(const lzo_byte *) lzo_copyright(void); -__LZO_EXTERN_C const lzo_uint32 _lzo_crc32_table[256]; - -#define _LZO_STRINGIZE(x) #x -#define _LZO_MEXPAND(x) _LZO_STRINGIZE(x) - -#define _LZO_CONCAT2(a,b) a ## b -#define _LZO_CONCAT3(a,b,c) a ## b ## c -#define _LZO_CONCAT4(a,b,c,d) a ## b ## c ## d -#define _LZO_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e - -#define _LZO_ECONCAT2(a,b) _LZO_CONCAT2(a,b) -#define _LZO_ECONCAT3(a,b,c) _LZO_CONCAT3(a,b,c) -#define _LZO_ECONCAT4(a,b,c,d) _LZO_CONCAT4(a,b,c,d) -#define _LZO_ECONCAT5(a,b,c,d,e) _LZO_CONCAT5(a,b,c,d,e) - -#if 0 - -#define __LZO_IS_COMPRESS_QUERY(i,il,o,ol,w) ((lzo_voidp)(o) == (w)) -#define __LZO_QUERY_COMPRESS(i,il,o,ol,w,n,s) \ - (*ol = (n)*(s), LZO_E_OK) - -#define __LZO_IS_DECOMPRESS_QUERY(i,il,o,ol,w) ((lzo_voidp)(o) == (w)) -#define __LZO_QUERY_DECOMPRESS(i,il,o,ol,w,n,s) \ - (*ol = (n)*(s), LZO_E_OK) - -#define __LZO_IS_OPTIMIZE_QUERY(i,il,o,ol,w) ((lzo_voidp)(o) == (w)) -#define __LZO_QUERY_OPTIMIZE(i,il,o,ol,w,n,s) \ - (*ol = (n)*(s), LZO_E_OK) - -#endif - -#ifndef __LZO_PTR_H -#define __LZO_PTR_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__LZO_DOS16) || defined(__LZO_WIN16) -# include -# if 1 && defined(__WATCOMC__) -# include - __LZO_EXTERN_C unsigned char _HShift; -# define __LZO_HShift _HShift -# elif 1 && defined(_MSC_VER) - __LZO_EXTERN_C unsigned short __near _AHSHIFT; -# define __LZO_HShift ((unsigned) &_AHSHIFT) -# elif defined(__LZO_WIN16) -# define __LZO_HShift 3 -# else -# define __LZO_HShift 12 -# endif -# if !defined(_FP_SEG) && defined(FP_SEG) -# define _FP_SEG FP_SEG -# endif -# if !defined(_FP_OFF) && defined(FP_OFF) -# define _FP_OFF FP_OFF -# endif -#endif - -#if !defined(lzo_ptrdiff_t) -# if (UINT_MAX >= LZO_0xffffffffL) - typedef ptrdiff_t lzo_ptrdiff_t; -# else - typedef long lzo_ptrdiff_t; -# endif -#endif - -#if !defined(__LZO_HAVE_PTR_T) -# if defined(lzo_ptr_t) -# define __LZO_HAVE_PTR_T -# endif -#endif -#if !defined(__LZO_HAVE_PTR_T) -# if defined(SIZEOF_CHAR_P) && defined(SIZEOF_UNSIGNED_LONG) -# if (SIZEOF_CHAR_P == SIZEOF_UNSIGNED_LONG) - typedef unsigned long lzo_ptr_t; - typedef long lzo_sptr_t; -# define __LZO_HAVE_PTR_T -# endif -# endif -#endif -#if !defined(__LZO_HAVE_PTR_T) -# if defined(SIZEOF_CHAR_P) && defined(SIZEOF_UNSIGNED) -# if (SIZEOF_CHAR_P == SIZEOF_UNSIGNED) - typedef unsigned int lzo_ptr_t; - typedef int lzo_sptr_t; -# define __LZO_HAVE_PTR_T -# endif -# endif -#endif -#if !defined(__LZO_HAVE_PTR_T) -# if defined(SIZEOF_CHAR_P) && defined(SIZEOF_UNSIGNED_SHORT) -# if (SIZEOF_CHAR_P == SIZEOF_UNSIGNED_SHORT) - typedef unsigned short lzo_ptr_t; - typedef short lzo_sptr_t; -# define __LZO_HAVE_PTR_T -# endif -# endif -#endif -#if !defined(__LZO_HAVE_PTR_T) -# if defined(LZO_HAVE_CONFIG_H) || defined(SIZEOF_CHAR_P) -# error "no suitable type for lzo_ptr_t" -# else - typedef unsigned long lzo_ptr_t; - typedef long lzo_sptr_t; -# define __LZO_HAVE_PTR_T -# endif -#endif - -#if defined(__LZO_DOS16) || defined(__LZO_WIN16) -#define PTR(a) ((lzo_bytep) (a)) -#define PTR_ALIGNED_4(a) ((_FP_OFF(a) & 3) == 0) -#define PTR_ALIGNED2_4(a,b) (((_FP_OFF(a) | _FP_OFF(b)) & 3) == 0) -#else -#define PTR(a) ((lzo_ptr_t) (a)) -#define PTR_LINEAR(a) PTR(a) -#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) -#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) -#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) -#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) -#endif - -#define PTR_LT(a,b) (PTR(a) < PTR(b)) -#define PTR_GE(a,b) (PTR(a) >= PTR(b)) -#define PTR_DIFF(a,b) ((lzo_ptrdiff_t) (PTR(a) - PTR(b))) -#define pd(a,b) ((lzo_uint) ((a)-(b))) - -LZO_EXTERN(lzo_ptr_t) -__lzo_ptr_linear(const lzo_voidp ptr); - -typedef union -{ - char a_char; - unsigned char a_uchar; - short a_short; - unsigned short a_ushort; - int a_int; - unsigned int a_uint; - long a_long; - unsigned long a_ulong; - lzo_int a_lzo_int; - lzo_uint a_lzo_uint; - lzo_int32 a_lzo_int32; - lzo_uint32 a_lzo_uint32; - ptrdiff_t a_ptrdiff_t; - lzo_ptrdiff_t a_lzo_ptrdiff_t; - lzo_ptr_t a_lzo_ptr_t; - lzo_voidp a_lzo_voidp; - void * a_void_p; - lzo_bytep a_lzo_bytep; - lzo_bytepp a_lzo_bytepp; - lzo_uintp a_lzo_uintp; - lzo_uint * a_lzo_uint_p; - lzo_uint32p a_lzo_uint32p; - lzo_uint32 * a_lzo_uint32_p; - unsigned char * a_uchar_p; - char * a_char_p; -} -lzo_full_align_t; - -#ifdef __cplusplus -} -#endif - -#endif - -#define LZO_DETERMINISTIC - -#define LZO_DICT_USE_PTR -#if defined(__LZO_DOS16) || defined(__LZO_WIN16) || defined(__LZO_STRICT_16BIT) -# undef LZO_DICT_USE_PTR -#endif - -#if defined(LZO_DICT_USE_PTR) -# define lzo_dict_t const lzo_bytep -# define lzo_dict_p lzo_dict_t __LZO_MMODEL * -#else -# define lzo_dict_t lzo_uint -# define lzo_dict_p lzo_dict_t __LZO_MMODEL * -#endif - -#if !defined(lzo_moff_t) -#define lzo_moff_t lzo_uint -#endif - -#endif - -LZO_PUBLIC(lzo_ptr_t) -__lzo_ptr_linear(const lzo_voidp ptr) -{ - lzo_ptr_t p; - -#if defined(__LZO_DOS16) || defined(__LZO_WIN16) - p = (((lzo_ptr_t)(_FP_SEG(ptr))) << (16 - __LZO_HShift)) + (_FP_OFF(ptr)); -#else - p = PTR_LINEAR(ptr); -#endif - - return p; -} - -LZO_PUBLIC(unsigned) -__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) -{ - lzo_ptr_t p, s, n; - - assert(size > 0); - - p = __lzo_ptr_linear(ptr); - s = (lzo_ptr_t) (size - 1); -#if 0 - assert((size & (size - 1)) == 0); - n = ((p + s) & ~s) - p; -#else - n = (((p + s) / size) * size) - p; -#endif - - assert((long)n >= 0); - assert(n <= s); - - return (unsigned)n; -} - -#ifndef __LZO_UTIL_H -#define __LZO_UTIL_H - -#ifndef __LZO_CONF_H -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if 1 && defined(HAVE_MEMCPY) -#if !defined(__LZO_DOS16) && !defined(__LZO_WIN16) - -#define MEMCPY8_DS(dest,src,len) \ - memcpy(dest,src,len); \ - dest += len; \ - src += len - -#endif -#endif - -#if 0 && !defined(MEMCPY8_DS) - -#define MEMCPY8_DS(dest,src,len) \ - { do { \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - len -= 8; \ - } while (len > 0); } - -#endif - -#if !defined(MEMCPY8_DS) - -#define MEMCPY8_DS(dest,src,len) \ - { register lzo_uint __l = (len) / 8; \ - do { \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - *dest++ = *src++; \ - } while (--__l > 0); } - -#endif - -#define MEMCPY_DS(dest,src,len) \ - do *dest++ = *src++; \ - while (--len > 0) - -#define MEMMOVE_DS(dest,src,len) \ - do *dest++ = *src++; \ - while (--len > 0) - -#if 0 && defined(LZO_OPTIMIZE_GNUC_i386) - -#define BZERO8_PTR(s,l,n) \ -__asm__ __volatile__( \ - "movl %0,%%eax \n" \ - "movl %1,%%edi \n" \ - "movl %2,%%ecx \n" \ - "cld \n" \ - "rep \n" \ - "stosl %%eax,(%%edi) \n" \ - : \ - :"g" (0),"g" (s),"g" (n) \ - :"eax","edi","ecx", "memory", "cc" \ -) - -#elif (LZO_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMSET) - -#if 1 -#define BZERO8_PTR(s,l,n) memset((s),0,(lzo_uint)(l)*(n)) -#else -#define BZERO8_PTR(s,l,n) memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) -#endif - -#else - -#define BZERO8_PTR(s,l,n) \ - lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) - -#endif - -#if 0 -#if defined(__GNUC__) && defined(__i386__) - -unsigned char lzo_rotr8(unsigned char value, int shift); -extern __inline__ unsigned char lzo_rotr8(unsigned char value, int shift) -{ - unsigned char result; - - __asm__ __volatile__ ("movb %b1, %b0; rorb %b2, %b0" - : "=a"(result) : "g"(value), "c"(shift)); - return result; -} - -unsigned short lzo_rotr16(unsigned short value, int shift); -extern __inline__ unsigned short lzo_rotr16(unsigned short value, int shift) -{ - unsigned short result; - - __asm__ __volatile__ ("movw %b1, %b0; rorw %b2, %b0" - : "=a"(result) : "g"(value), "c"(shift)); - return result; -} - -#endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -LZO_PUBLIC(lzo_bool) -lzo_assert(int expr) -{ - return (expr) ? 1 : 0; -} - -/* If you use the LZO library in a product, you *must* keep this - * copyright string in the executable of your product. - */ - -const lzo_byte __lzo_copyright[] = -#if !defined(__LZO_IN_MINLZO) - LZO_VERSION_STRING; -#else - "\n\n\n" - "LZO real-time data compression library.\n" - "Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Markus Franz Xaver Johannes Oberhumer\n" - "\n" - "http://www.oberhumer.com/opensource/lzo/\n" - "\n" - "LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE "\n" - "LZO build date: " __DATE__ " " __TIME__ "\n\n" - "LZO special compilation options:\n" -#ifdef __cplusplus - " __cplusplus\n" -#endif -#if defined(__PIC__) - " __PIC__\n" -#elif defined(__pic__) - " __pic__\n" -#endif -#if (UINT_MAX < LZO_0xffffffffL) - " 16BIT\n" -#endif -#if defined(__LZO_STRICT_16BIT) - " __LZO_STRICT_16BIT\n" -#endif -#if (UINT_MAX > LZO_0xffffffffL) - " UINT_MAX=" _LZO_MEXPAND(UINT_MAX) "\n" -#endif -#if (ULONG_MAX > LZO_0xffffffffL) - " ULONG_MAX=" _LZO_MEXPAND(ULONG_MAX) "\n" -#endif -#if defined(LZO_BYTE_ORDER) - " LZO_BYTE_ORDER=" _LZO_MEXPAND(LZO_BYTE_ORDER) "\n" -#endif -#if defined(LZO_UNALIGNED_OK_2) - " LZO_UNALIGNED_OK_2\n" -#endif -#if defined(LZO_UNALIGNED_OK_4) - " LZO_UNALIGNED_OK_4\n" -#endif -#if defined(LZO_ALIGNED_OK_4) - " LZO_ALIGNED_OK_4\n" -#endif -#if defined(LZO_DICT_USE_PTR) - " LZO_DICT_USE_PTR\n" -#endif -#if defined(__LZO_QUERY_COMPRESS) - " __LZO_QUERY_COMPRESS\n" -#endif -#if defined(__LZO_QUERY_DECOMPRESS) - " __LZO_QUERY_DECOMPRESS\n" -#endif -#if defined(__LZO_IN_MINILZO) - " __LZO_IN_MINILZO\n" -#endif - "\n\n" - "$Id: LZO " LZO_VERSION_STRING " built " __DATE__ " " __TIME__ -#if defined(__GNUC__) && defined(__VERSION__) - " by gcc " __VERSION__ -#elif defined(__BORLANDC__) - " by Borland C " _LZO_MEXPAND(__BORLANDC__) -#elif defined(_MSC_VER) - " by Microsoft C " _LZO_MEXPAND(_MSC_VER) -#elif defined(__PUREC__) - " by Pure C " _LZO_MEXPAND(__PUREC__) -#elif defined(__SC__) - " by Symantec C " _LZO_MEXPAND(__SC__) -#elif defined(__TURBOC__) - " by Turbo C " _LZO_MEXPAND(__TURBOC__) -#elif defined(__WATCOMC__) - " by Watcom C " _LZO_MEXPAND(__WATCOMC__) -#endif - " $\n" - "$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Markus Franz Xaver Johannes Oberhumer $\n"; -#endif - -LZO_PUBLIC(const lzo_byte *) -lzo_copyright(void) -{ - return __lzo_copyright; -} - -LZO_PUBLIC(unsigned) -lzo_version(void) -{ - return LZO_VERSION; -} - -LZO_PUBLIC(const char *) -lzo_version_string(void) -{ - return LZO_VERSION_STRING; -} - -LZO_PUBLIC(const char *) -lzo_version_date(void) -{ - return LZO_VERSION_DATE; -} - -LZO_PUBLIC(const lzo_charp) -_lzo_version_string(void) -{ - return LZO_VERSION_STRING; -} - -LZO_PUBLIC(const lzo_charp) -_lzo_version_date(void) -{ - return LZO_VERSION_DATE; -} - -#define LZO_BASE 65521u -#define LZO_NMAX 5552 - -#define LZO_DO1(buf,i) {s1 += buf[i]; s2 += s1;} -#define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); -#define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); -#define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); -#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); - -LZO_PUBLIC(lzo_uint32) -lzo_adler32(lzo_uint32 adler, const lzo_byte *buf, lzo_uint len) -{ - lzo_uint32 s1 = adler & 0xffff; - lzo_uint32 s2 = (adler >> 16) & 0xffff; - int k; - - if (buf == NULL) - return 1; - - while (len > 0) - { - k = len < LZO_NMAX ? (int) len : LZO_NMAX; - len -= k; - if (k >= 16) do - { - LZO_DO16(buf,0); - buf += 16; - k -= 16; - } while (k >= 16); - if (k != 0) do - { - s1 += *buf++; - s2 += s1; - } while (--k > 0); - s1 %= LZO_BASE; - s2 %= LZO_BASE; - } - return (s2 << 16) | s1; -} - -LZO_PUBLIC(int) -lzo_memcmp(const lzo_voidp s1, const lzo_voidp s2, lzo_uint len) -{ -#if (LZO_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMCMP) - return memcmp(s1,s2,len); -#else - const lzo_byte *p1 = (const lzo_byte *) s1; - const lzo_byte *p2 = (const lzo_byte *) s2; - int d; - - if (len > 0) do - { - d = *p1 - *p2; - if (d != 0) - return d; - p1++; - p2++; - } - while (--len > 0); - return 0; -#endif -} - -LZO_PUBLIC(lzo_voidp) -lzo_memcpy(lzo_voidp dest, const lzo_voidp src, lzo_uint len) -{ -#if (LZO_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMCPY) - return memcpy(dest,src,len); -#else - lzo_byte *p1 = (lzo_byte *) dest; - const lzo_byte *p2 = (const lzo_byte *) src; - - if (len <= 0 || p1 == p2) - return dest; - do - *p1++ = *p2++; - while (--len > 0); - return dest; -#endif -} - -LZO_PUBLIC(lzo_voidp) -lzo_memmove(lzo_voidp dest, const lzo_voidp src, lzo_uint len) -{ -#if (LZO_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMMOVE) - return memmove(dest,src,len); -#else - lzo_byte *p1 = (lzo_byte *) dest; - const lzo_byte *p2 = (const lzo_byte *) src; - - if (len <= 0 || p1 == p2) - return dest; - - if (p1 < p2) - { - do - *p1++ = *p2++; - while (--len > 0); - } - else - { - p1 += len; - p2 += len; - do - *--p1 = *--p2; - while (--len > 0); - } - return dest; -#endif -} - -LZO_PUBLIC(lzo_voidp) -lzo_memset(lzo_voidp s, int c, lzo_uint len) -{ -#if (LZO_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMSET) - return memset(s,c,len); -#else - lzo_byte *p = (lzo_byte *) s; - - if (len > 0) do - *p++ = LZO_BYTE(c); - while (--len > 0); - return s; -#endif -} - -#if 0 -# define IS_SIGNED(type) (((type) (1ul << (8 * sizeof(type) - 1))) < 0) -# define IS_UNSIGNED(type) (((type) (1ul << (8 * sizeof(type) - 1))) > 0) -#else -# define IS_SIGNED(type) (((type) (-1)) < ((type) 0)) -# define IS_UNSIGNED(type) (((type) (-1)) > ((type) 0)) -#endif - -#define IS_POWER_OF_2(x) (((x) & ((x) - 1)) == 0) - -static lzo_bool schedule_insns_bug(void); -static lzo_bool strength_reduce_bug(int *); - -#if 0 || defined(LZO_DEBUG) -#include -static lzo_bool __lzo_assert_fail(const char *s, unsigned line) -{ -#if defined(__palmos__) - printf("LZO assertion failed in line %u: '%s'\n",line,s); -#else - fprintf(stderr,"LZO assertion failed in line %u: '%s'\n",line,s); -#endif - return 0; -} -# define __lzo_assert(x) ((x) ? 1 : __lzo_assert_fail(#x,__LINE__)) -#else -# define __lzo_assert(x) ((x) ? 1 : 0) -#endif - -#undef COMPILE_TIME_ASSERT -#if 0 -# define COMPILE_TIME_ASSERT(expr) r &= __lzo_assert(expr) -#else -# define COMPILE_TIME_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) -#endif - -static lzo_bool basic_integral_check(void) -{ - lzo_bool r = 1; - - COMPILE_TIME_ASSERT(CHAR_BIT == 8); - COMPILE_TIME_ASSERT(sizeof(char) == 1); - COMPILE_TIME_ASSERT(sizeof(short) >= 2); - COMPILE_TIME_ASSERT(sizeof(long) >= 4); - COMPILE_TIME_ASSERT(sizeof(int) >= sizeof(short)); - COMPILE_TIME_ASSERT(sizeof(long) >= sizeof(int)); - - COMPILE_TIME_ASSERT(sizeof(lzo_uint) == sizeof(lzo_int)); - COMPILE_TIME_ASSERT(sizeof(lzo_uint32) == sizeof(lzo_int32)); - - COMPILE_TIME_ASSERT(sizeof(lzo_uint32) >= 4); - COMPILE_TIME_ASSERT(sizeof(lzo_uint32) >= sizeof(unsigned)); -#if defined(__LZO_STRICT_16BIT) - COMPILE_TIME_ASSERT(sizeof(lzo_uint) == 2); -#else - COMPILE_TIME_ASSERT(sizeof(lzo_uint) >= 4); - COMPILE_TIME_ASSERT(sizeof(lzo_uint) >= sizeof(unsigned)); -#endif - -#if (USHRT_MAX == 65535u) - COMPILE_TIME_ASSERT(sizeof(short) == 2); -#elif (USHRT_MAX == LZO_0xffffffffL) - COMPILE_TIME_ASSERT(sizeof(short) == 4); -#elif (USHRT_MAX >= LZO_0xffffffffL) - COMPILE_TIME_ASSERT(sizeof(short) > 4); -#endif -#if (UINT_MAX == 65535u) - COMPILE_TIME_ASSERT(sizeof(int) == 2); -#elif (UINT_MAX == LZO_0xffffffffL) - COMPILE_TIME_ASSERT(sizeof(int) == 4); -#elif (UINT_MAX >= LZO_0xffffffffL) - COMPILE_TIME_ASSERT(sizeof(int) > 4); -#endif -#if (ULONG_MAX == 65535ul) - COMPILE_TIME_ASSERT(sizeof(long) == 2); -#elif (ULONG_MAX == LZO_0xffffffffL) - COMPILE_TIME_ASSERT(sizeof(long) == 4); -#elif (ULONG_MAX >= LZO_0xffffffffL) - COMPILE_TIME_ASSERT(sizeof(long) > 4); -#endif - -#if defined(SIZEOF_UNSIGNED) - COMPILE_TIME_ASSERT(SIZEOF_UNSIGNED == sizeof(unsigned)); -#endif -#if defined(SIZEOF_UNSIGNED_LONG) - COMPILE_TIME_ASSERT(SIZEOF_UNSIGNED_LONG == sizeof(unsigned long)); -#endif -#if defined(SIZEOF_UNSIGNED_SHORT) - COMPILE_TIME_ASSERT(SIZEOF_UNSIGNED_SHORT == sizeof(unsigned short)); -#endif -#if !defined(__LZO_IN_MINILZO) -#if defined(SIZEOF_SIZE_T) - COMPILE_TIME_ASSERT(SIZEOF_SIZE_T == sizeof(size_t)); -#endif -#endif - - COMPILE_TIME_ASSERT(IS_UNSIGNED(unsigned char)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(unsigned short)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(unsigned)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(unsigned long)); - COMPILE_TIME_ASSERT(IS_SIGNED(short)); - COMPILE_TIME_ASSERT(IS_SIGNED(int)); - COMPILE_TIME_ASSERT(IS_SIGNED(long)); - - COMPILE_TIME_ASSERT(IS_UNSIGNED(lzo_uint32)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(lzo_uint)); - COMPILE_TIME_ASSERT(IS_SIGNED(lzo_int32)); - COMPILE_TIME_ASSERT(IS_SIGNED(lzo_int)); - - COMPILE_TIME_ASSERT(INT_MAX == LZO_STYPE_MAX(sizeof(int))); - COMPILE_TIME_ASSERT(UINT_MAX == LZO_UTYPE_MAX(sizeof(unsigned))); - COMPILE_TIME_ASSERT(LONG_MAX == LZO_STYPE_MAX(sizeof(long))); - COMPILE_TIME_ASSERT(ULONG_MAX == LZO_UTYPE_MAX(sizeof(unsigned long))); - COMPILE_TIME_ASSERT(SHRT_MAX == LZO_STYPE_MAX(sizeof(short))); - COMPILE_TIME_ASSERT(USHRT_MAX == LZO_UTYPE_MAX(sizeof(unsigned short))); - COMPILE_TIME_ASSERT(LZO_UINT32_MAX == LZO_UTYPE_MAX(sizeof(lzo_uint32))); - COMPILE_TIME_ASSERT(LZO_UINT_MAX == LZO_UTYPE_MAX(sizeof(lzo_uint))); -#if !defined(__LZO_IN_MINILZO) - COMPILE_TIME_ASSERT(SIZE_T_MAX == LZO_UTYPE_MAX(sizeof(size_t))); -#endif - - r &= __lzo_assert(LZO_BYTE(257) == 1); - - return r; -} - -static lzo_bool basic_ptr_check(void) -{ - lzo_bool r = 1; - - COMPILE_TIME_ASSERT(sizeof(char *) >= sizeof(int)); - COMPILE_TIME_ASSERT(sizeof(lzo_byte *) >= sizeof(char *)); - - COMPILE_TIME_ASSERT(sizeof(lzo_voidp) == sizeof(lzo_byte *)); - COMPILE_TIME_ASSERT(sizeof(lzo_voidp) == sizeof(lzo_voidpp)); - COMPILE_TIME_ASSERT(sizeof(lzo_voidp) == sizeof(lzo_bytepp)); - COMPILE_TIME_ASSERT(sizeof(lzo_voidp) >= sizeof(lzo_uint)); - - COMPILE_TIME_ASSERT(sizeof(lzo_ptr_t) == sizeof(lzo_voidp)); - COMPILE_TIME_ASSERT(sizeof(lzo_ptr_t) == sizeof(lzo_sptr_t)); - COMPILE_TIME_ASSERT(sizeof(lzo_ptr_t) >= sizeof(lzo_uint)); - - COMPILE_TIME_ASSERT(sizeof(lzo_ptrdiff_t) >= 4); - COMPILE_TIME_ASSERT(sizeof(lzo_ptrdiff_t) >= sizeof(ptrdiff_t)); - - COMPILE_TIME_ASSERT(sizeof(ptrdiff_t) >= sizeof(size_t)); - COMPILE_TIME_ASSERT(sizeof(lzo_ptrdiff_t) >= sizeof(lzo_uint)); - -#if defined(SIZEOF_CHAR_P) - COMPILE_TIME_ASSERT(SIZEOF_CHAR_P == sizeof(char *)); -#endif -#if defined(SIZEOF_PTRDIFF_T) - COMPILE_TIME_ASSERT(SIZEOF_PTRDIFF_T == sizeof(ptrdiff_t)); -#endif - - COMPILE_TIME_ASSERT(IS_SIGNED(ptrdiff_t)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(size_t)); - COMPILE_TIME_ASSERT(IS_SIGNED(lzo_ptrdiff_t)); - COMPILE_TIME_ASSERT(IS_SIGNED(lzo_sptr_t)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(lzo_ptr_t)); - COMPILE_TIME_ASSERT(IS_UNSIGNED(lzo_moff_t)); - - return r; -} - -static lzo_bool ptr_check(void) -{ - lzo_bool r = 1; - int i; - char _wrkmem[10 * sizeof(lzo_byte *) + sizeof(lzo_full_align_t)]; - lzo_bytep wrkmem; - lzo_bytepp dict; - unsigned char x[4 * sizeof(lzo_full_align_t)]; - long d; - lzo_full_align_t a; - lzo_full_align_t u; - - for (i = 0; i < (int) sizeof(x); i++) - x[i] = LZO_BYTE(i); - - wrkmem = LZO_PTR_ALIGN_UP((lzo_byte *)_wrkmem,sizeof(lzo_full_align_t)); - -#if 0 - dict = (lzo_bytepp) wrkmem; -#else - - u.a_lzo_bytep = wrkmem; dict = u.a_lzo_bytepp; -#endif - - d = (long) ((const lzo_bytep) dict - (const lzo_bytep) _wrkmem); - r &= __lzo_assert(d >= 0); - r &= __lzo_assert(d < (long) sizeof(lzo_full_align_t)); - - memset(&a,0,sizeof(a)); - r &= __lzo_assert(a.a_lzo_voidp == NULL); - - memset(&a,0xff,sizeof(a)); - r &= __lzo_assert(a.a_ushort == USHRT_MAX); - r &= __lzo_assert(a.a_uint == UINT_MAX); - r &= __lzo_assert(a.a_ulong == ULONG_MAX); - r &= __lzo_assert(a.a_lzo_uint == LZO_UINT_MAX); - r &= __lzo_assert(a.a_lzo_uint32 == LZO_UINT32_MAX); - - if (r == 1) - { - for (i = 0; i < 8; i++) - r &= __lzo_assert((const lzo_voidp) (&dict[i]) == (const lzo_voidp) (&wrkmem[i * sizeof(lzo_byte *)])); - } - - memset(&a,0,sizeof(a)); - r &= __lzo_assert(a.a_char_p == NULL); - r &= __lzo_assert(a.a_lzo_bytep == NULL); - r &= __lzo_assert(NULL == (void *)0); - if (r == 1) - { - for (i = 0; i < 10; i++) - dict[i] = wrkmem; - BZERO8_PTR(dict+1,sizeof(dict[0]),8); - r &= __lzo_assert(dict[0] == wrkmem); - for (i = 1; i < 9; i++) - r &= __lzo_assert(dict[i] == NULL); - r &= __lzo_assert(dict[9] == wrkmem); - } - - if (r == 1) - { - unsigned k = 1; - const unsigned n = (unsigned) sizeof(lzo_uint32); - lzo_byte *p0; - lzo_byte *p1; - - k += __lzo_align_gap(&x[k],n); - p0 = (lzo_bytep) &x[k]; -#if defined(PTR_LINEAR) - r &= __lzo_assert((PTR_LINEAR(p0) & (n-1)) == 0); -#else - r &= __lzo_assert(n == 4); - r &= __lzo_assert(PTR_ALIGNED_4(p0)); -#endif - - r &= __lzo_assert(k >= 1); - p1 = (lzo_bytep) &x[1]; - r &= __lzo_assert(PTR_GE(p0,p1)); - - r &= __lzo_assert(k < 1+n); - p1 = (lzo_bytep) &x[1+n]; - r &= __lzo_assert(PTR_LT(p0,p1)); - - if (r == 1) - { - lzo_uint32 v0, v1; -#if 0 - v0 = * (lzo_uint32 *) &x[k]; - v1 = * (lzo_uint32 *) &x[k+n]; -#else - - u.a_uchar_p = &x[k]; - v0 = *u.a_lzo_uint32_p; - u.a_uchar_p = &x[k+n]; - v1 = *u.a_lzo_uint32_p; -#endif - r &= __lzo_assert(v0 > 0); - r &= __lzo_assert(v1 > 0); - } - } - - return r; -} - -LZO_PUBLIC(int) -_lzo_config_check(void) -{ - lzo_bool r = 1; - int i; - union { - lzo_uint32 a; - unsigned short b; - lzo_uint32 aa[4]; - unsigned char x[4*sizeof(lzo_full_align_t)]; - } u; - - COMPILE_TIME_ASSERT( (int) ((unsigned char) ((signed char) -1)) == 255); - COMPILE_TIME_ASSERT( (((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0); - -#if 0 - r &= __lzo_assert((const void *)&u == (const void *)&u.a); - r &= __lzo_assert((const void *)&u == (const void *)&u.b); - r &= __lzo_assert((const void *)&u == (const void *)&u.x[0]); - r &= __lzo_assert((const void *)&u == (const void *)&u.aa[0]); -#endif - - r &= basic_integral_check(); - r &= basic_ptr_check(); - if (r != 1) - return LZO_E_ERROR; - - u.a = 0; u.b = 0; - for (i = 0; i < (int) sizeof(u.x); i++) - u.x[i] = LZO_BYTE(i); - -#if defined(LZO_BYTE_ORDER) - if (r == 1) - { -# if (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - lzo_uint32 a = (lzo_uint32) (u.a & LZO_0xffffffffL); - unsigned short b = (unsigned short) (u.b & 0xffff); - r &= __lzo_assert(a == 0x03020100L); - r &= __lzo_assert(b == 0x0100); -# elif (LZO_BYTE_ORDER == LZO_BIG_ENDIAN) - lzo_uint32 a = u.a >> (8 * sizeof(u.a) - 32); - unsigned short b = u.b >> (8 * sizeof(u.b) - 16); - r &= __lzo_assert(a == 0x00010203L); - r &= __lzo_assert(b == 0x0001); -# else -# error "invalid LZO_BYTE_ORDER" -# endif - } -#endif - -#if defined(LZO_UNALIGNED_OK_2) - COMPILE_TIME_ASSERT(sizeof(short) == 2); - if (r == 1) - { - unsigned short b[4]; - - for (i = 0; i < 4; i++) - b[i] = * (const unsigned short *) &u.x[i]; - -# if (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - r &= __lzo_assert(b[0] == 0x0100); - r &= __lzo_assert(b[1] == 0x0201); - r &= __lzo_assert(b[2] == 0x0302); - r &= __lzo_assert(b[3] == 0x0403); -# elif (LZO_BYTE_ORDER == LZO_BIG_ENDIAN) - r &= __lzo_assert(b[0] == 0x0001); - r &= __lzo_assert(b[1] == 0x0102); - r &= __lzo_assert(b[2] == 0x0203); - r &= __lzo_assert(b[3] == 0x0304); -# endif - } -#endif - -#if defined(LZO_UNALIGNED_OK_4) - COMPILE_TIME_ASSERT(sizeof(lzo_uint32) == 4); - if (r == 1) - { - lzo_uint32 a[4]; - - for (i = 0; i < 4; i++) - a[i] = * (const lzo_uint32 *) &u.x[i]; - -# if (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - r &= __lzo_assert(a[0] == 0x03020100L); - r &= __lzo_assert(a[1] == 0x04030201L); - r &= __lzo_assert(a[2] == 0x05040302L); - r &= __lzo_assert(a[3] == 0x06050403L); -# elif (LZO_BYTE_ORDER == LZO_BIG_ENDIAN) - r &= __lzo_assert(a[0] == 0x00010203L); - r &= __lzo_assert(a[1] == 0x01020304L); - r &= __lzo_assert(a[2] == 0x02030405L); - r &= __lzo_assert(a[3] == 0x03040506L); -# endif - } -#endif - -#if defined(LZO_ALIGNED_OK_4) - COMPILE_TIME_ASSERT(sizeof(lzo_uint32) == 4); -#endif - - COMPILE_TIME_ASSERT(lzo_sizeof_dict_t == sizeof(lzo_dict_t)); - -#if defined(__LZO_IN_MINLZO) - if (r == 1) - { - lzo_uint32 adler; - adler = lzo_adler32(0, NULL, 0); - adler = lzo_adler32(adler, lzo_copyright(), 200); - r &= __lzo_assert(adler == 0xc76f1751L); - } -#endif - - if (r == 1) - { - r &= __lzo_assert(!schedule_insns_bug()); - } - - if (r == 1) - { - static int x[3]; - static unsigned xn = 3; - register unsigned j; - - for (j = 0; j < xn; j++) - x[j] = (int)j - 3; - r &= __lzo_assert(!strength_reduce_bug(x)); - } - - if (r == 1) - { - r &= ptr_check(); - } - - return r == 1 ? LZO_E_OK : LZO_E_ERROR; -} - -static lzo_bool schedule_insns_bug(void) -{ -#if defined(__LZO_CHECKER) - return 0; -#else - const int clone[] = {1, 2, 0}; - const int *q; - q = clone; - return (*q) ? 0 : 1; -#endif -} - -static lzo_bool strength_reduce_bug(int *x) -{ - return x[0] != -3 || x[1] != -2 || x[2] != -1; -} - -#undef COMPILE_TIME_ASSERT - -int __lzo_init_done = 0; - -LZO_PUBLIC(int) -__lzo_init2(unsigned v, int s1, int s2, int s3, int s4, int s5, - int s6, int s7, int s8, int s9) -{ - int r; - - __lzo_init_done = 1; - - if (v == 0) - return LZO_E_ERROR; - - r = (s1 == -1 || s1 == (int) sizeof(short)) && - (s2 == -1 || s2 == (int) sizeof(int)) && - (s3 == -1 || s3 == (int) sizeof(long)) && - (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) && - (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && - (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && - (s7 == -1 || s7 == (int) sizeof(char *)) && - (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && - (s9 == -1 || s9 == (int) sizeof(lzo_compress_t)); - if (!r) - return LZO_E_ERROR; - - r = _lzo_config_check(); - if (r != LZO_E_OK) - return r; - - return r; -} - -#if !defined(__LZO_IN_MINILZO) - -LZO_EXTERN(int) -__lzo_init(unsigned v,int s1,int s2,int s3,int s4,int s5,int s6,int s7); - -LZO_PUBLIC(int) -__lzo_init(unsigned v,int s1,int s2,int s3,int s4,int s5,int s6,int s7) -{ - if (v == 0 || v > 0x1010) - return LZO_E_ERROR; - return __lzo_init2(v,s1,s2,s3,s4,s5,-1,-1,s6,s7); -} - -#endif - -#define do_compress _lzo1x_1_do_compress - -#define LZO_NEED_DICT_H -#define D_BITS 14 -#define D_INDEX1(d,p) d = DM((0x21*DX3(p,5,5,6)) >> 5) -#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) - -#ifndef __LZO_CONFIG1X_H -#define __LZO_CONFIG1X_H - -#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) -# define LZO1X -#endif - -#if !defined(__LZO_IN_MINILZO) -#include -#endif - -#define LZO_EOF_CODE -#undef LZO_DETERMINISTIC - -#define M1_MAX_OFFSET 0x0400 -#ifndef M2_MAX_OFFSET -#define M2_MAX_OFFSET 0x0800 -#endif -#define M3_MAX_OFFSET 0x4000 -#define M4_MAX_OFFSET 0xbfff - -#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) - -#define M1_MIN_LEN 2 -#define M1_MAX_LEN 2 -#define M2_MIN_LEN 3 -#ifndef M2_MAX_LEN -#define M2_MAX_LEN 8 -#endif -#define M3_MIN_LEN 3 -#define M3_MAX_LEN 33 -#define M4_MIN_LEN 3 -#define M4_MAX_LEN 9 - -#define M1_MARKER 0 -#define M2_MARKER 64 -#define M3_MARKER 32 -#define M4_MARKER 16 - -#ifndef MIN_LOOKAHEAD -#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) -#endif - -#if defined(LZO_NEED_DICT_H) - -#ifndef LZO_HASH -#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B -#endif -#define DL_MIN_LEN M2_MIN_LEN - -#ifndef __LZO_DICT_H -#define __LZO_DICT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(D_BITS) && defined(DBITS) -# define D_BITS DBITS -#endif -#if !defined(D_BITS) -# error "D_BITS is not defined" -#endif -#if (D_BITS < 16) -# define D_SIZE LZO_SIZE(D_BITS) -# define D_MASK LZO_MASK(D_BITS) -#else -# define D_SIZE LZO_USIZE(D_BITS) -# define D_MASK LZO_UMASK(D_BITS) -#endif -#define D_HIGH ((D_MASK >> 1) + 1) - -#if !defined(DD_BITS) -# define DD_BITS 0 -#endif -#define DD_SIZE LZO_SIZE(DD_BITS) -#define DD_MASK LZO_MASK(DD_BITS) - -#if !defined(DL_BITS) -# define DL_BITS (D_BITS - DD_BITS) -#endif -#if (DL_BITS < 16) -# define DL_SIZE LZO_SIZE(DL_BITS) -# define DL_MASK LZO_MASK(DL_BITS) -#else -# define DL_SIZE LZO_USIZE(DL_BITS) -# define DL_MASK LZO_UMASK(DL_BITS) -#endif - -#if (D_BITS != DL_BITS + DD_BITS) -# error "D_BITS does not match" -#endif -#if (D_BITS < 8 || D_BITS > 18) -# error "invalid D_BITS" -#endif -#if (DL_BITS < 8 || DL_BITS > 20) -# error "invalid DL_BITS" -#endif -#if (DD_BITS < 0 || DD_BITS > 6) -# error "invalid DD_BITS" -#endif - -#if !defined(DL_MIN_LEN) -# define DL_MIN_LEN 3 -#endif -#if !defined(DL_SHIFT) -# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) -#endif - -#define LZO_HASH_GZIP 1 -#define LZO_HASH_GZIP_INCREMENTAL 2 -#define LZO_HASH_LZO_INCREMENTAL_A 3 -#define LZO_HASH_LZO_INCREMENTAL_B 4 - -#if !defined(LZO_HASH) -# error "choose a hashing strategy" -#endif - -#if (DL_MIN_LEN == 3) -# define _DV2_A(p,shift1,shift2) \ - (((( (lzo_uint32)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) -# define _DV2_B(p,shift1,shift2) \ - (((( (lzo_uint32)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) -# define _DV3_B(p,shift1,shift2,shift3) \ - ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) -#elif (DL_MIN_LEN == 2) -# define _DV2_A(p,shift1,shift2) \ - (( (lzo_uint32)(p[0]) << shift1) ^ p[1]) -# define _DV2_B(p,shift1,shift2) \ - (( (lzo_uint32)(p[1]) << shift1) ^ p[2]) -#else -# error "invalid DL_MIN_LEN" -#endif -#define _DV_A(p,shift) _DV2_A(p,shift,shift) -#define _DV_B(p,shift) _DV2_B(p,shift,shift) -#define DA2(p,s1,s2) \ - (((((lzo_uint32)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) -#define DS2(p,s1,s2) \ - (((((lzo_uint32)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) -#define DX2(p,s1,s2) \ - (((((lzo_uint32)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) -#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) -#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) -#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) -#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) -#define DM(v) DMS(v,0) - -#if (LZO_HASH == LZO_HASH_GZIP) -# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) - -#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) -# define __LZO_HASH_INCREMENTAL -# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) -# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) -# define _DINDEX(dv,p) (dv) -# define DVAL_LOOKAHEAD DL_MIN_LEN - -#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) -# define __LZO_HASH_INCREMENTAL -# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) -# define DVAL_NEXT(dv,p) \ - dv ^= (lzo_uint32)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) -# define _DINDEX(dv,p) ((0x9f5f * (dv)) >> 5) -# define DVAL_LOOKAHEAD DL_MIN_LEN - -#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) -# define __LZO_HASH_INCREMENTAL -# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) -# define DVAL_NEXT(dv,p) \ - dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_uint32)(p[2]) << (2*5))) -# define _DINDEX(dv,p) ((0x9f5f * (dv)) >> 5) -# define DVAL_LOOKAHEAD DL_MIN_LEN - -#else -# error "choose a hashing strategy" -#endif - -#ifndef DINDEX -#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) -#endif -#if !defined(DINDEX1) && defined(D_INDEX1) -#define DINDEX1 D_INDEX1 -#endif -#if !defined(DINDEX2) && defined(D_INDEX2) -#define DINDEX2 D_INDEX2 -#endif - -#if !defined(__LZO_HASH_INCREMENTAL) -# define DVAL_FIRST(dv,p) ((void) 0) -# define DVAL_NEXT(dv,p) ((void) 0) -# define DVAL_LOOKAHEAD 0 -#endif - -#if !defined(DVAL_ASSERT) -#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) -static void DVAL_ASSERT(lzo_uint32 dv, const lzo_byte *p) -{ - lzo_uint32 df; - DVAL_FIRST(df,(p)); - assert(DINDEX(dv,p) == DINDEX(df,p)); -} -#else -# define DVAL_ASSERT(dv,p) ((void) 0) -#endif -#endif - -#if defined(LZO_DICT_USE_PTR) -# define DENTRY(p,in) (p) -# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] -#else -# define DENTRY(p,in) ((lzo_uint) ((p)-(in))) -# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] -#endif - -#if (DD_BITS == 0) - -# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) -# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) -# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) - -#else - -# define UPDATE_D(dict,drun,dv,p,in) \ - dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK -# define UPDATE_I(dict,drun,index,p,in) \ - dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK -# define UPDATE_P(ptr,drun,p,in) \ - (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK - -#endif - -#if defined(LZO_DICT_USE_PTR) - -#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ - (m_pos == NULL || (m_off = (lzo_moff_t) (ip - m_pos)) > max_offset) - -#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ - (BOUNDS_CHECKING_OFF_IN_EXPR( \ - (PTR_LT(m_pos,in) || \ - (m_off = (lzo_moff_t) PTR_DIFF(ip,m_pos)) <= 0 || \ - m_off > max_offset) )) - -#else - -#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ - (m_off == 0 || \ - ((m_off = (lzo_moff_t) ((ip)-(in)) - m_off) > max_offset) || \ - (m_pos = (ip) - (m_off), 0) ) - -#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ - ((lzo_moff_t) ((ip)-(in)) <= m_off || \ - ((m_off = (lzo_moff_t) ((ip)-(in)) - m_off) > max_offset) || \ - (m_pos = (ip) - (m_off), 0) ) - -#endif - -#if defined(LZO_DETERMINISTIC) -# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET -#else -# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -#endif - -#endif - -#define DO_COMPRESS lzo1x_1_compress - -static -lzo_uint do_compress ( const lzo_byte *in , lzo_uint in_len, - lzo_byte *out, lzo_uintp out_len, - lzo_voidp wrkmem ) -{ -#if 0 && defined(__GNUC__) && defined(__i386__) - register const lzo_byte *ip __asm__("%esi"); -#else - register const lzo_byte *ip; -#endif - lzo_byte *op; - const lzo_byte * const in_end = in + in_len; - const lzo_byte * const ip_end = in + in_len - M2_MAX_LEN - 5; - const lzo_byte *ii; - lzo_dict_p const dict = (lzo_dict_p) wrkmem; - - op = out; - ip = in; - ii = ip; - - ip += 4; - for (;;) - { -#if 0 && defined(__GNUC__) && defined(__i386__) - register const lzo_byte *m_pos __asm__("%edi"); -#else - register const lzo_byte *m_pos; -#endif - lzo_moff_t m_off; - lzo_uint m_len; - lzo_uint dindex; - - DINDEX1(dindex,ip); - GINDEX(m_pos,m_off,dict,dindex,in); - if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) - goto literal; -#if 1 - if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) - goto try_match; - DINDEX2(dindex,ip); -#endif - GINDEX(m_pos,m_off,dict,dindex,in); - if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) - goto literal; - if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) - goto try_match; - goto literal; - -try_match: -#if 1 && defined(LZO_UNALIGNED_OK_2) - if (* (const lzo_ushortp) m_pos != * (const lzo_ushortp) ip) -#else - if (m_pos[0] != ip[0] || m_pos[1] != ip[1]) -#endif - { - } - else - { - if (m_pos[2] == ip[2]) - { -#if 0 - if (m_off <= M2_MAX_OFFSET) - goto match; - if (lit <= 3) - goto match; - if (lit == 3) - { - assert(op - 2 > out); op[-2] |= LZO_BYTE(3); - *op++ = *ii++; *op++ = *ii++; *op++ = *ii++; - goto code_match; - } - if (m_pos[3] == ip[3]) -#endif - goto match; - } - else - { -#if 0 -#if 0 - if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3) -#else - if (m_off <= M1_MAX_OFFSET && lit == 3) -#endif - { - register lzo_uint t; - - t = lit; - assert(op - 2 > out); op[-2] |= LZO_BYTE(t); - do *op++ = *ii++; while (--t > 0); - assert(ii == ip); - m_off -= 1; - *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2)); - *op++ = LZO_BYTE(m_off >> 2); - ip += 2; - goto match_done; - } -#endif - } - } - -literal: - UPDATE_I(dict,0,dindex,ip,in); - ++ip; - if (ip >= ip_end) - break; - continue; - -match: - UPDATE_I(dict,0,dindex,ip,in); - if (pd(ip,ii) > 0) - { - register lzo_uint t = pd(ip,ii); - - if (t <= 3) - { - assert(op - 2 > out); - op[-2] |= LZO_BYTE(t); - } - else if (t <= 18) - *op++ = LZO_BYTE(t - 3); - else - { - register lzo_uint tt = t - 18; - - *op++ = 0; - while (tt > 255) - { - tt -= 255; - *op++ = 0; - } - assert(tt > 0); - *op++ = LZO_BYTE(tt); - } - do *op++ = *ii++; while (--t > 0); - } - - assert(ii == ip); - ip += 3; - if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ || - m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++ -#ifdef LZO1Y - || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++ - || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++ -#endif - ) - { - --ip; - m_len = ip - ii; - assert(m_len >= 3); assert(m_len <= M2_MAX_LEN); - - if (m_off <= M2_MAX_OFFSET) - { - m_off -= 1; -#if defined(LZO1X) - *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); - *op++ = LZO_BYTE(m_off >> 3); -#elif defined(LZO1Y) - *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); - *op++ = LZO_BYTE(m_off >> 2); -#endif - } - else if (m_off <= M3_MAX_OFFSET) - { - m_off -= 1; - *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); - goto m3_m4_offset; - } - else -#if defined(LZO1X) - { - m_off -= 0x4000; - assert(m_off > 0); assert(m_off <= 0x7fff); - *op++ = LZO_BYTE(M4_MARKER | - ((m_off & 0x4000) >> 11) | (m_len - 2)); - goto m3_m4_offset; - } -#elif defined(LZO1Y) - goto m4_match; -#endif - } - else - { - { - const lzo_byte *end = in_end; - const lzo_byte *m = m_pos + M2_MAX_LEN + 1; - while (ip < end && *m == *ip) - m++, ip++; - m_len = (ip - ii); - } - assert(m_len > M2_MAX_LEN); - - if (m_off <= M3_MAX_OFFSET) - { - m_off -= 1; - if (m_len <= 33) - *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); - else - { - m_len -= 33; - *op++ = M3_MARKER | 0; - goto m3_m4_len; - } - } - else - { -#if defined(LZO1Y) -m4_match: -#endif - m_off -= 0x4000; - assert(m_off > 0); assert(m_off <= 0x7fff); - if (m_len <= M4_MAX_LEN) - *op++ = LZO_BYTE(M4_MARKER | - ((m_off & 0x4000) >> 11) | (m_len - 2)); - else - { - m_len -= M4_MAX_LEN; - *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11)); -m3_m4_len: - while (m_len > 255) - { - m_len -= 255; - *op++ = 0; - } - assert(m_len > 0); - *op++ = LZO_BYTE(m_len); - } - } - -m3_m4_offset: - *op++ = LZO_BYTE((m_off & 63) << 2); - *op++ = LZO_BYTE(m_off >> 6); - } - -#if 0 -match_done: -#endif - ii = ip; - if (ip >= ip_end) - break; - } - - *out_len = op - out; - return pd(in_end,ii); -} - -LZO_PUBLIC(int) -DO_COMPRESS ( const lzo_byte *in , lzo_uint in_len, - lzo_byte *out, lzo_uintp out_len, - lzo_voidp wrkmem ) -{ - lzo_byte *op = out; - lzo_uint t; - -#if defined(__LZO_QUERY_COMPRESS) - if (__LZO_IS_COMPRESS_QUERY(in,in_len,out,out_len,wrkmem)) - return __LZO_QUERY_COMPRESS(in,in_len,out,out_len,wrkmem,D_SIZE,lzo_sizeof(lzo_dict_t)); -#endif - - if (in_len <= M2_MAX_LEN + 5) - t = in_len; - else - { - t = do_compress(in,in_len,op,out_len,wrkmem); - op += *out_len; - } - - if (t > 0) - { - const lzo_byte *ii = in + in_len - t; - - if (op == out && t <= 238) - *op++ = LZO_BYTE(17 + t); - else if (t <= 3) - op[-2] |= LZO_BYTE(t); - else if (t <= 18) - *op++ = LZO_BYTE(t - 3); - else - { - lzo_uint tt = t - 18; - - *op++ = 0; - while (tt > 255) - { - tt -= 255; - *op++ = 0; - } - assert(tt > 0); - *op++ = LZO_BYTE(tt); - } - do *op++ = *ii++; while (--t > 0); - } - - *op++ = M4_MARKER | 1; - *op++ = 0; - *op++ = 0; - - *out_len = op - out; - return LZO_E_OK; -} - -#undef do_compress -#undef DO_COMPRESS -#undef LZO_HASH - -#undef LZO_TEST_DECOMPRESS_OVERRUN -#undef LZO_TEST_DECOMPRESS_OVERRUN_INPUT -#undef LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT -#undef LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND -#undef DO_DECOMPRESS -#define DO_DECOMPRESS lzo1x_decompress - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN) -# if !defined(LZO_TEST_DECOMPRESS_OVERRUN_INPUT) -# define LZO_TEST_DECOMPRESS_OVERRUN_INPUT 2 -# endif -# if !defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT) -# define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT 2 -# endif -# if !defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND) -# define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND -# endif -#endif - -#undef TEST_IP -#undef TEST_OP -#undef TEST_LOOKBEHIND -#undef NEED_IP -#undef NEED_OP -#undef HAVE_TEST_IP -#undef HAVE_TEST_OP -#undef HAVE_NEED_IP -#undef HAVE_NEED_OP -#undef HAVE_ANY_IP -#undef HAVE_ANY_OP - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_INPUT) -# if (LZO_TEST_DECOMPRESS_OVERRUN_INPUT >= 1) -# define TEST_IP (ip < ip_end) -# endif -# if (LZO_TEST_DECOMPRESS_OVERRUN_INPUT >= 2) -# define NEED_IP(x) \ - if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun -# endif -#endif - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT) -# if (LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT >= 1) -# define TEST_OP (op <= op_end) -# endif -# if (LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT >= 2) -# undef TEST_OP -# define NEED_OP(x) \ - if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun -# endif -#endif - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND) -# define TEST_LOOKBEHIND(m_pos,out) if (m_pos < out) goto lookbehind_overrun -#else -# define TEST_LOOKBEHIND(m_pos,op) ((void) 0) -#endif - -#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) -# define TEST_IP (ip < ip_end) -#endif - -#if defined(TEST_IP) -# define HAVE_TEST_IP -#else -# define TEST_IP 1 -#endif -#if defined(TEST_OP) -# define HAVE_TEST_OP -#else -# define TEST_OP 1 -#endif - -#if defined(NEED_IP) -# define HAVE_NEED_IP -#else -# define NEED_IP(x) ((void) 0) -#endif -#if defined(NEED_OP) -# define HAVE_NEED_OP -#else -# define NEED_OP(x) ((void) 0) -#endif - -#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) -# define HAVE_ANY_IP -#endif -#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) -# define HAVE_ANY_OP -#endif - -#undef __COPY4 -#define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src) - -#undef COPY4 -#if defined(LZO_UNALIGNED_OK_4) -# define COPY4(dst,src) __COPY4(dst,src) -#elif defined(LZO_ALIGNED_OK_4) -# define COPY4(dst,src) __COPY4((lzo_ptr_t)(dst),(lzo_ptr_t)(src)) -#endif - -#if defined(DO_DECOMPRESS) -LZO_PUBLIC(int) -DO_DECOMPRESS ( const lzo_byte *in , lzo_uint in_len, - lzo_byte *out, lzo_uintp out_len, - lzo_voidp wrkmem ) -#endif -{ - register lzo_byte *op; - register const lzo_byte *ip; - register lzo_uint t; -#if defined(COPY_DICT) - lzo_uint m_off; - const lzo_byte *dict_end; -#else - register const lzo_byte *m_pos; -#endif - - const lzo_byte * const ip_end = in + in_len; -#if defined(HAVE_ANY_OP) - lzo_byte * const op_end = out + *out_len; -#endif -#if defined(LZO1Z) - lzo_uint last_m_off = 0; -#endif - - LZO_UNUSED(wrkmem); - -#if defined(__LZO_QUERY_DECOMPRESS) - if (__LZO_IS_DECOMPRESS_QUERY(in,in_len,out,out_len,wrkmem)) - return __LZO_QUERY_DECOMPRESS(in,in_len,out,out_len,wrkmem,0,0); -#endif - -#if defined(COPY_DICT) - if (dict) - { - if (dict_len > M4_MAX_OFFSET) - { - dict += dict_len - M4_MAX_OFFSET; - dict_len = M4_MAX_OFFSET; - } - dict_end = dict + dict_len; - } - else - { - dict_len = 0; - dict_end = NULL; - } -#endif - - *out_len = 0; - - op = out; - ip = in; - - if (*ip > 17) - { - t = *ip++ - 17; - if (t < 4) - goto match_next; - assert(t > 0); NEED_OP(t); NEED_IP(t+1); - do *op++ = *ip++; while (--t > 0); - goto first_literal_run; - } - - while (TEST_IP && TEST_OP) - { - t = *ip++; - if (t >= 16) - goto match; - if (t == 0) - { - NEED_IP(1); - while (*ip == 0) - { - t += 255; - ip++; - NEED_IP(1); - } - t += 15 + *ip++; - } - assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); -#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) -#if !defined(LZO_UNALIGNED_OK_4) - if (PTR_ALIGNED2_4(op,ip)) - { -#endif - COPY4(op,ip); - op += 4; ip += 4; - if (--t > 0) - { - if (t >= 4) - { - do { - COPY4(op,ip); - op += 4; ip += 4; t -= 4; - } while (t >= 4); - if (t > 0) do *op++ = *ip++; while (--t > 0); - } - else - do *op++ = *ip++; while (--t > 0); - } -#if !defined(LZO_UNALIGNED_OK_4) - } - else -#endif -#endif -#if !defined(LZO_UNALIGNED_OK_4) - { - *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; - do *op++ = *ip++; while (--t > 0); - } -#endif - -first_literal_run: - - t = *ip++; - if (t >= 16) - goto match; -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); - last_m_off = m_off; -#else - m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); -#endif - NEED_OP(3); - t = 3; COPY_DICT(t,m_off) -#else -#if defined(LZO1Z) - t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); - m_pos = op - t; - last_m_off = t; -#else - m_pos = op - (1 + M2_MAX_OFFSET); - m_pos -= t >> 2; - m_pos -= *ip++ << 2; -#endif - TEST_LOOKBEHIND(m_pos,out); NEED_OP(3); - *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; -#endif - goto match_done; - - while (TEST_IP && TEST_OP) - { -match: - if (t >= 64) - { -#if defined(COPY_DICT) -#if defined(LZO1X) - m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); - t = (t >> 5) - 1; -#elif defined(LZO1Y) - m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); - t = (t >> 4) - 3; -#elif defined(LZO1Z) - m_off = t & 0x1f; - if (m_off >= 0x1c) - m_off = last_m_off; - else - { - m_off = 1 + (m_off << 6) + (*ip++ >> 2); - last_m_off = m_off; - } - t = (t >> 5) - 1; -#endif -#else -#if defined(LZO1X) - m_pos = op - 1; - m_pos -= (t >> 2) & 7; - m_pos -= *ip++ << 3; - t = (t >> 5) - 1; -#elif defined(LZO1Y) - m_pos = op - 1; - m_pos -= (t >> 2) & 3; - m_pos -= *ip++ << 2; - t = (t >> 4) - 3; -#elif defined(LZO1Z) - { - lzo_uint off = t & 0x1f; - m_pos = op; - if (off >= 0x1c) - { - assert(last_m_off > 0); - m_pos -= last_m_off; - } - else - { - off = 1 + (off << 6) + (*ip++ >> 2); - m_pos -= off; - last_m_off = off; - } - } - t = (t >> 5) - 1; -#endif - TEST_LOOKBEHIND(m_pos,out); assert(t > 0); NEED_OP(t+3-1); - goto copy_match; -#endif - } - else if (t >= 32) - { - t &= 31; - if (t == 0) - { - NEED_IP(1); - while (*ip == 0) - { - t += 255; - ip++; - NEED_IP(1); - } - t += 31 + *ip++; - } -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); - last_m_off = m_off; -#else - m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); -#endif -#else -#if defined(LZO1Z) - { - lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); - m_pos = op - off; - last_m_off = off; - } -#elif defined(LZO_UNALIGNED_OK_2) && (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - m_pos = op - 1; - m_pos -= (* (const lzo_ushortp) ip) >> 2; -#else - m_pos = op - 1; - m_pos -= (ip[0] >> 2) + (ip[1] << 6); -#endif -#endif - ip += 2; - } - else if (t >= 16) - { -#if defined(COPY_DICT) - m_off = (t & 8) << 11; -#else - m_pos = op; - m_pos -= (t & 8) << 11; -#endif - t &= 7; - if (t == 0) - { - NEED_IP(1); - while (*ip == 0) - { - t += 255; - ip++; - NEED_IP(1); - } - t += 7 + *ip++; - } -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off += (ip[0] << 6) + (ip[1] >> 2); -#else - m_off += (ip[0] >> 2) + (ip[1] << 6); -#endif - ip += 2; - if (m_off == 0) - goto eof_found; - m_off += 0x4000; -#if defined(LZO1Z) - last_m_off = m_off; -#endif -#else -#if defined(LZO1Z) - m_pos -= (ip[0] << 6) + (ip[1] >> 2); -#elif defined(LZO_UNALIGNED_OK_2) && (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - m_pos -= (* (const lzo_ushortp) ip) >> 2; -#else - m_pos -= (ip[0] >> 2) + (ip[1] << 6); -#endif - ip += 2; - if (m_pos == op) - goto eof_found; - m_pos -= 0x4000; -#if defined(LZO1Z) - last_m_off = op - m_pos; -#endif -#endif - } - else - { -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off = 1 + (t << 6) + (*ip++ >> 2); - last_m_off = m_off; -#else - m_off = 1 + (t >> 2) + (*ip++ << 2); -#endif - NEED_OP(2); - t = 2; COPY_DICT(t,m_off) -#else -#if defined(LZO1Z) - t = 1 + (t << 6) + (*ip++ >> 2); - m_pos = op - t; - last_m_off = t; -#else - m_pos = op - 1; - m_pos -= t >> 2; - m_pos -= *ip++ << 2; -#endif - TEST_LOOKBEHIND(m_pos,out); NEED_OP(2); - *op++ = *m_pos++; *op++ = *m_pos; -#endif - goto match_done; - } - -#if defined(COPY_DICT) - - NEED_OP(t+3-1); - t += 3-1; COPY_DICT(t,m_off) - -#else - - TEST_LOOKBEHIND(m_pos,out); assert(t > 0); NEED_OP(t+3-1); -#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) -#if !defined(LZO_UNALIGNED_OK_4) - if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) - { - assert((op - m_pos) >= 4); -#else - if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) - { -#endif - COPY4(op,m_pos); - op += 4; m_pos += 4; t -= 4 - (3 - 1); - do { - COPY4(op,m_pos); - op += 4; m_pos += 4; t -= 4; - } while (t >= 4); - if (t > 0) do *op++ = *m_pos++; while (--t > 0); - } - else -#endif - { -copy_match: - *op++ = *m_pos++; *op++ = *m_pos++; - do *op++ = *m_pos++; while (--t > 0); - } - -#endif - -match_done: -#if defined(LZO1Z) - t = ip[-1] & 3; -#else - t = ip[-2] & 3; -#endif - if (t == 0) - break; - -match_next: - assert(t > 0); NEED_OP(t); NEED_IP(t+1); - do *op++ = *ip++; while (--t > 0); - t = *ip++; - } - } - -#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) - *out_len = op - out; - return LZO_E_EOF_NOT_FOUND; -#endif - -eof_found: - assert(t == 1); - *out_len = op - out; - return (ip == ip_end ? LZO_E_OK : - (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); - -#if defined(HAVE_NEED_IP) -input_overrun: - *out_len = op - out; - return LZO_E_INPUT_OVERRUN; -#endif - -#if defined(HAVE_NEED_OP) -output_overrun: - *out_len = op - out; - return LZO_E_OUTPUT_OVERRUN; -#endif - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND) -lookbehind_overrun: - *out_len = op - out; - return LZO_E_LOOKBEHIND_OVERRUN; -#endif -} - -#define LZO_TEST_DECOMPRESS_OVERRUN -#undef DO_DECOMPRESS -#define DO_DECOMPRESS lzo1x_decompress_safe - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN) -# if !defined(LZO_TEST_DECOMPRESS_OVERRUN_INPUT) -# define LZO_TEST_DECOMPRESS_OVERRUN_INPUT 2 -# endif -# if !defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT) -# define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT 2 -# endif -# if !defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND) -# define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND -# endif -#endif - -#undef TEST_IP -#undef TEST_OP -#undef TEST_LOOKBEHIND -#undef NEED_IP -#undef NEED_OP -#undef HAVE_TEST_IP -#undef HAVE_TEST_OP -#undef HAVE_NEED_IP -#undef HAVE_NEED_OP -#undef HAVE_ANY_IP -#undef HAVE_ANY_OP - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_INPUT) -# if (LZO_TEST_DECOMPRESS_OVERRUN_INPUT >= 1) -# define TEST_IP (ip < ip_end) -# endif -# if (LZO_TEST_DECOMPRESS_OVERRUN_INPUT >= 2) -# define NEED_IP(x) \ - if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun -# endif -#endif - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT) -# if (LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT >= 1) -# define TEST_OP (op <= op_end) -# endif -# if (LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT >= 2) -# undef TEST_OP -# define NEED_OP(x) \ - if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun -# endif -#endif - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND) -# define TEST_LOOKBEHIND(m_pos,out) if (m_pos < out) goto lookbehind_overrun -#else -# define TEST_LOOKBEHIND(m_pos,op) ((void) 0) -#endif - -#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) -# define TEST_IP (ip < ip_end) -#endif - -#if defined(TEST_IP) -# define HAVE_TEST_IP -#else -# define TEST_IP 1 -#endif -#if defined(TEST_OP) -# define HAVE_TEST_OP -#else -# define TEST_OP 1 -#endif - -#if defined(NEED_IP) -# define HAVE_NEED_IP -#else -# define NEED_IP(x) ((void) 0) -#endif -#if defined(NEED_OP) -# define HAVE_NEED_OP -#else -# define NEED_OP(x) ((void) 0) -#endif - -#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) -# define HAVE_ANY_IP -#endif -#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) -# define HAVE_ANY_OP -#endif - -#undef __COPY4 -#define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src) - -#undef COPY4 -#if defined(LZO_UNALIGNED_OK_4) -# define COPY4(dst,src) __COPY4(dst,src) -#elif defined(LZO_ALIGNED_OK_4) -# define COPY4(dst,src) __COPY4((lzo_ptr_t)(dst),(lzo_ptr_t)(src)) -#endif - -#if defined(DO_DECOMPRESS) -LZO_PUBLIC(int) -DO_DECOMPRESS ( const lzo_byte *in , lzo_uint in_len, - lzo_byte *out, lzo_uintp out_len, - lzo_voidp wrkmem ) -#endif -{ - register lzo_byte *op; - register const lzo_byte *ip; - register lzo_uint t; -#if defined(COPY_DICT) - lzo_uint m_off; - const lzo_byte *dict_end; -#else - register const lzo_byte *m_pos; -#endif - - const lzo_byte * const ip_end = in + in_len; -#if defined(HAVE_ANY_OP) - lzo_byte * const op_end = out + *out_len; -#endif -#if defined(LZO1Z) - lzo_uint last_m_off = 0; -#endif - - LZO_UNUSED(wrkmem); - -#if defined(__LZO_QUERY_DECOMPRESS) - if (__LZO_IS_DECOMPRESS_QUERY(in,in_len,out,out_len,wrkmem)) - return __LZO_QUERY_DECOMPRESS(in,in_len,out,out_len,wrkmem,0,0); -#endif - -#if defined(COPY_DICT) - if (dict) - { - if (dict_len > M4_MAX_OFFSET) - { - dict += dict_len - M4_MAX_OFFSET; - dict_len = M4_MAX_OFFSET; - } - dict_end = dict + dict_len; - } - else - { - dict_len = 0; - dict_end = NULL; - } -#endif - - *out_len = 0; - - op = out; - ip = in; - - if (*ip > 17) - { - t = *ip++ - 17; - if (t < 4) - goto match_next; - assert(t > 0); NEED_OP(t); NEED_IP(t+1); - do *op++ = *ip++; while (--t > 0); - goto first_literal_run; - } - - while (TEST_IP && TEST_OP) - { - t = *ip++; - if (t >= 16) - goto match; - if (t == 0) - { - NEED_IP(1); - while (*ip == 0) - { - t += 255; - ip++; - NEED_IP(1); - } - t += 15 + *ip++; - } - assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); -#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) -#if !defined(LZO_UNALIGNED_OK_4) - if (PTR_ALIGNED2_4(op,ip)) - { -#endif - COPY4(op,ip); - op += 4; ip += 4; - if (--t > 0) - { - if (t >= 4) - { - do { - COPY4(op,ip); - op += 4; ip += 4; t -= 4; - } while (t >= 4); - if (t > 0) do *op++ = *ip++; while (--t > 0); - } - else - do *op++ = *ip++; while (--t > 0); - } -#if !defined(LZO_UNALIGNED_OK_4) - } - else -#endif -#endif -#if !defined(LZO_UNALIGNED_OK_4) - { - *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; - do *op++ = *ip++; while (--t > 0); - } -#endif - -first_literal_run: - - t = *ip++; - if (t >= 16) - goto match; -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); - last_m_off = m_off; -#else - m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); -#endif - NEED_OP(3); - t = 3; COPY_DICT(t,m_off) -#else -#if defined(LZO1Z) - t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); - m_pos = op - t; - last_m_off = t; -#else - m_pos = op - (1 + M2_MAX_OFFSET); - m_pos -= t >> 2; - m_pos -= *ip++ << 2; -#endif - TEST_LOOKBEHIND(m_pos,out); NEED_OP(3); - *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; -#endif - goto match_done; - - while (TEST_IP && TEST_OP) - { -match: - if (t >= 64) - { -#if defined(COPY_DICT) -#if defined(LZO1X) - m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); - t = (t >> 5) - 1; -#elif defined(LZO1Y) - m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); - t = (t >> 4) - 3; -#elif defined(LZO1Z) - m_off = t & 0x1f; - if (m_off >= 0x1c) - m_off = last_m_off; - else - { - m_off = 1 + (m_off << 6) + (*ip++ >> 2); - last_m_off = m_off; - } - t = (t >> 5) - 1; -#endif -#else -#if defined(LZO1X) - m_pos = op - 1; - m_pos -= (t >> 2) & 7; - m_pos -= *ip++ << 3; - t = (t >> 5) - 1; -#elif defined(LZO1Y) - m_pos = op - 1; - m_pos -= (t >> 2) & 3; - m_pos -= *ip++ << 2; - t = (t >> 4) - 3; -#elif defined(LZO1Z) - { - lzo_uint off = t & 0x1f; - m_pos = op; - if (off >= 0x1c) - { - assert(last_m_off > 0); - m_pos -= last_m_off; - } - else - { - off = 1 + (off << 6) + (*ip++ >> 2); - m_pos -= off; - last_m_off = off; - } - } - t = (t >> 5) - 1; -#endif - TEST_LOOKBEHIND(m_pos,out); assert(t > 0); NEED_OP(t+3-1); - goto copy_match; -#endif - } - else if (t >= 32) - { - t &= 31; - if (t == 0) - { - NEED_IP(1); - while (*ip == 0) - { - t += 255; - ip++; - NEED_IP(1); - } - t += 31 + *ip++; - } -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); - last_m_off = m_off; -#else - m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); -#endif -#else -#if defined(LZO1Z) - { - lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); - m_pos = op - off; - last_m_off = off; - } -#elif defined(LZO_UNALIGNED_OK_2) && (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - m_pos = op - 1; - m_pos -= (* (const lzo_ushortp) ip) >> 2; -#else - m_pos = op - 1; - m_pos -= (ip[0] >> 2) + (ip[1] << 6); -#endif -#endif - ip += 2; - } - else if (t >= 16) - { -#if defined(COPY_DICT) - m_off = (t & 8) << 11; -#else - m_pos = op; - m_pos -= (t & 8) << 11; -#endif - t &= 7; - if (t == 0) - { - NEED_IP(1); - while (*ip == 0) - { - t += 255; - ip++; - NEED_IP(1); - } - t += 7 + *ip++; - } -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off += (ip[0] << 6) + (ip[1] >> 2); -#else - m_off += (ip[0] >> 2) + (ip[1] << 6); -#endif - ip += 2; - if (m_off == 0) - goto eof_found; - m_off += 0x4000; -#if defined(LZO1Z) - last_m_off = m_off; -#endif -#else -#if defined(LZO1Z) - m_pos -= (ip[0] << 6) + (ip[1] >> 2); -#elif defined(LZO_UNALIGNED_OK_2) && (LZO_BYTE_ORDER == LZO_LITTLE_ENDIAN) - m_pos -= (* (const lzo_ushortp) ip) >> 2; -#else - m_pos -= (ip[0] >> 2) + (ip[1] << 6); -#endif - ip += 2; - if (m_pos == op) - goto eof_found; - m_pos -= 0x4000; -#if defined(LZO1Z) - last_m_off = op - m_pos; -#endif -#endif - } - else - { -#if defined(COPY_DICT) -#if defined(LZO1Z) - m_off = 1 + (t << 6) + (*ip++ >> 2); - last_m_off = m_off; -#else - m_off = 1 + (t >> 2) + (*ip++ << 2); -#endif - NEED_OP(2); - t = 2; COPY_DICT(t,m_off) -#else -#if defined(LZO1Z) - t = 1 + (t << 6) + (*ip++ >> 2); - m_pos = op - t; - last_m_off = t; -#else - m_pos = op - 1; - m_pos -= t >> 2; - m_pos -= *ip++ << 2; -#endif - TEST_LOOKBEHIND(m_pos,out); NEED_OP(2); - *op++ = *m_pos++; *op++ = *m_pos; -#endif - goto match_done; - } - -#if defined(COPY_DICT) - - NEED_OP(t+3-1); - t += 3-1; COPY_DICT(t,m_off) - -#else - - TEST_LOOKBEHIND(m_pos,out); assert(t > 0); NEED_OP(t+3-1); -#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) -#if !defined(LZO_UNALIGNED_OK_4) - if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) - { - assert((op - m_pos) >= 4); -#else - if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) - { -#endif - COPY4(op,m_pos); - op += 4; m_pos += 4; t -= 4 - (3 - 1); - do { - COPY4(op,m_pos); - op += 4; m_pos += 4; t -= 4; - } while (t >= 4); - if (t > 0) do *op++ = *m_pos++; while (--t > 0); - } - else -#endif - { -copy_match: - *op++ = *m_pos++; *op++ = *m_pos++; - do *op++ = *m_pos++; while (--t > 0); - } - -#endif - -match_done: -#if defined(LZO1Z) - t = ip[-1] & 3; -#else - t = ip[-2] & 3; -#endif - if (t == 0) - break; - -match_next: - assert(t > 0); NEED_OP(t); NEED_IP(t+1); - do *op++ = *ip++; while (--t > 0); - t = *ip++; - } - } - -#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) - *out_len = op - out; - return LZO_E_EOF_NOT_FOUND; -#endif - -eof_found: - assert(t == 1); - *out_len = op - out; - return (ip == ip_end ? LZO_E_OK : - (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); - -#if defined(HAVE_NEED_IP) -input_overrun: - *out_len = op - out; - return LZO_E_INPUT_OVERRUN; -#endif - -#if defined(HAVE_NEED_OP) -output_overrun: - *out_len = op - out; - return LZO_E_OUTPUT_OVERRUN; -#endif - -#if defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND) -lookbehind_overrun: - *out_len = op - out; - return LZO_E_LOOKBEHIND_OVERRUN; -#endif -} - -/***** End of minilzo.c *****/ - diff --git a/amxmodx/minilzo/minilzo.h b/amxmodx/minilzo/minilzo.h deleted file mode 100755 index e3270f9a..00000000 --- a/amxmodx/minilzo/minilzo.h +++ /dev/null @@ -1,100 +0,0 @@ -/* minilzo.h -- mini subset of the LZO real-time data compression library - - This file is part of the LZO real-time data compression library. - - Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer - Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer - All Rights Reserved. - - The LZO library is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. - - The LZO library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the LZO library; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - Markus F.X.J. Oberhumer - - http://www.oberhumer.com/opensource/lzo/ - */ - -/* - * NOTE: - * the full LZO package can be found at - * http://www.oberhumer.com/opensource/lzo/ - */ - - -#ifndef __MINILZO_H -#define __MINILZO_H - -#define MINILZO_VERSION 0x1080 - -#ifdef __LZOCONF_H -# error "you cannot use both LZO and miniLZO" -#endif - -#undef LZO_HAVE_CONFIG_H -#include "lzoconf.h" - -#if !defined(LZO_VERSION) || (LZO_VERSION != MINILZO_VERSION) -# error "version mismatch in header files" -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - - -/*********************************************************************** -// -************************************************************************/ - -/* Memory required for the wrkmem parameter. - * When the required size is 0, you can also pass a NULL pointer. - */ - -#define LZO1X_MEM_COMPRESS LZO1X_1_MEM_COMPRESS -#define LZO1X_1_MEM_COMPRESS ((lzo_uint32) (16384L * lzo_sizeof_dict_t)) -#define LZO1X_MEM_DECOMPRESS (0) - - -/* compression */ -LZO_EXTERN(int) -lzo1x_1_compress ( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem ); - -/* decompression */ -LZO_EXTERN(int) -lzo1x_decompress ( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem /* NOT USED */ ); - -/* safe decompression with overrun testing */ -LZO_EXTERN(int) -lzo1x_decompress_safe ( const lzo_byte *src, lzo_uint src_len, - lzo_byte *dst, lzo_uintp dst_len, - lzo_voidp wrkmem /* NOT USED */ ); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* already included */ - diff --git a/amxmodx/msvc/amxmodx.vcproj b/amxmodx/msvc/amxmodx.vcproj index 4ac19d4b..30e69af3 100755 --- a/amxmodx/msvc/amxmodx.vcproj +++ b/amxmodx/msvc/amxmodx.vcproj @@ -386,7 +386,7 @@ - - diff --git a/amxmodx/zlib/zconf.h b/amxmodx/zlib/zconf.h new file mode 100755 index 00000000..3cea897e --- /dev/null +++ b/amxmodx/zlib/zconf.h @@ -0,0 +1,323 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflatePrime z_deflatePrime +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table + +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +# define WIN32 +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +#define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/amxmodx/zlib/zlib.h b/amxmodx/zlib/zlib.h new file mode 100755 index 00000000..92edf96f --- /dev/null +++ b/amxmodx/zlib/zlib.h @@ -0,0 +1,1200 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.1, November 17th, 2003 + + Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.1" +#define ZLIB_VERNUM 0x1210 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by the in-memory functions is the zlib + format, which is a zlib wrapper documented in RFC 1950, wrapped around a + deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + This library does not provide any functions to write gzip files in memory. + However such functions could be easily written using zlib's deflate function, + the documentation in the gzip RFC, and the examples in gzio.c. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: ascii or binary */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_ASCII 1 +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + the compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update data_type if it can make a good guess about + the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it get to the next deflate block boundary. When decoding the zlib + or gzip format, this will cause inflate() to return immediately after the + header and before the first block. When doing a raw inflate, inflate() will + go ahead and process the first block, and will return when it gets to the end + of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm-adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative + memLevel). msg is set to null if there is no error message. inflateInit2 + does not perform any decompression apart from reading the zlib header if + present: this will be done by inflate(). (So next_in and avail_in may be + modified, but next_out and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate + if this call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by this call of + inflate. The compressor and decompressor must use exactly the same + dictionary (see deflateSetDictionary). + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_stream FAR *strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_stream FAR *strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_stream FAR *strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); + +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running crc with the bytes buf[0..len-1] and return the updated + crc. If buf is NULL, this function returns the required initial value + for the crc. Pre- and post-conditioning (one's complement) is performed + within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_stream FAR *strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int err)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/amxmodx/zlib/zlib.lib b/amxmodx/zlib/zlib.lib new file mode 100755 index 0000000000000000000000000000000000000000..d5348407fc90c3a723bfc1a223e0b3baf671eef4 GIT binary patch literal 221206 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�W%|Hfsh^p&&d_bF;g9A!ibp> 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 literal 0 HcmV?d00001