Merge pull request #195 from Arkshine/feature/zlib-static-lib

Unifiy zlib linkage by compiling it as static library and linking it to concerned projects
This commit is contained in:
Vincent Herbet 2015-03-10 00:25:47 +01:00
commit f49c9c87d4
49 changed files with 12772 additions and 12254 deletions

View File

@ -15,6 +15,7 @@ class AMXXConfig(object):
self.mysql_path = None self.mysql_path = None
self.generated_headers = [] self.generated_headers = []
self.versionlib = None self.versionlib = None
self.zlib = None
self.csx_app = None self.csx_app = None
self.stdcxx_path = None self.stdcxx_path = None
@ -356,6 +357,10 @@ if AMXX.use_auto_versioning():
{ 'AMXX': AMXX } { 'AMXX': AMXX }
) )
AMXX.zlib = builder.RunScript(
'public/zlib/AMBuilder'
)
builder.RunBuildScripts( builder.RunBuildScripts(
[ [
'amxmodx/AMBuilder', 'amxmodx/AMBuilder',

View File

@ -32,13 +32,7 @@ elif builder.target_platform == 'windows':
] ]
binary.compiler.linkflags += jit_objects binary.compiler.linkflags += jit_objects
binary.compiler.linkflags += [AMXX.zlib.binary]
if builder.target_platform == 'linux':
binary.compiler.linkflags += [binary.Dep('zlib/libz.a')]
elif builder.target_platform == 'mac':
binary.compiler.linkflags += [binary.Dep('zlib/libz-darwin.a')]
elif builder.target_platform == 'windows':
binary.compiler.linkflags += [binary.Dep('zlib\\zlib.lib')]
if builder.target_platform == 'mac': if builder.target_platform == 'mac':
binary.compiler.postlink += [ binary.compiler.postlink += [

View File

@ -121,7 +121,7 @@
</ResourceCompile> </ResourceCompile>
<Link> <Link>
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
<Version>0.1</Version> <Version>0.1</Version>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@ -176,7 +176,7 @@
</ResourceCompile> </ResourceCompile>
<Link> <Link>
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> <IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
@ -225,7 +225,7 @@
</ResourceCompile> </ResourceCompile>
<Link> <Link>
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
<Version>0.1</Version> <Version>0.1</Version>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@ -278,7 +278,7 @@
</ResourceCompile> </ResourceCompile>
<Link> <Link>
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> <IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
@ -301,6 +301,21 @@
<ClCompile Include="..\..\public\hashing\hashers\sha256.cpp" /> <ClCompile Include="..\..\public\hashing\hashers\sha256.cpp" />
<ClCompile Include="..\..\public\hashing\hashers\sha3.cpp" /> <ClCompile Include="..\..\public\hashing\hashers\sha3.cpp" />
<ClCompile Include="..\..\public\hashing\hashers\keccak.cpp" /> <ClCompile Include="..\..\public\hashing\hashers\keccak.cpp" />
<ClCompile Include="..\..\public\zlib\adler32.c" />
<ClCompile Include="..\..\public\zlib\compress.c" />
<ClCompile Include="..\..\public\zlib\crc32.c" />
<ClCompile Include="..\..\public\zlib\deflate.c" />
<ClCompile Include="..\..\public\zlib\gzclose.c" />
<ClCompile Include="..\..\public\zlib\gzlib.c" />
<ClCompile Include="..\..\public\zlib\gzread.c" />
<ClCompile Include="..\..\public\zlib\gzwrite.c" />
<ClCompile Include="..\..\public\zlib\infback.c" />
<ClCompile Include="..\..\public\zlib\inffast.c" />
<ClCompile Include="..\..\public\zlib\inflate.c" />
<ClCompile Include="..\..\public\zlib\inftrees.c" />
<ClCompile Include="..\..\public\zlib\trees.c" />
<ClCompile Include="..\..\public\zlib\uncompr.c" />
<ClCompile Include="..\..\public\zlib\zutil.c" />
<ClCompile Include="..\amx.cpp" /> <ClCompile Include="..\amx.cpp" />
<ClCompile Include="..\amxcore.cpp" /> <ClCompile Include="..\amxcore.cpp" />
<ClCompile Include="..\amxdbg.cpp" /> <ClCompile Include="..\amxdbg.cpp" />

View File

@ -39,6 +39,8 @@
</Filter> </Filter>
<Filter Include="Hashing\Hashers"> <Filter Include="Hashing\Hashers">
<UniqueIdentifier>{v3248ea1-a53v-5ax5-b2d1-f3gh53d2fg43}</UniqueIdentifier> <UniqueIdentifier>{v3248ea1-a53v-5ax5-b2d1-f3gh53d2fg43}</UniqueIdentifier>
<Filter Include="Source Files\zlib">
<UniqueIdentifier>{2b925879-cb15-4a3d-9236-cf43eaf6b3cf}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -227,6 +229,50 @@
</ClCompile> </ClCompile>
<ClCompile Include="..\..\public\hashing\hashers\keccak.cpp"> <ClCompile Include="..\..\public\hashing\hashers\keccak.cpp">
<Filter>Hashing\Hashers</Filter> <Filter>Hashing\Hashers</Filter>
<ClCompile Include="..\..\public\zlib\adler32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\compress.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\crc32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\deflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\infback.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\inffast.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\inflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\inftrees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\trees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\uncompr.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\zutil.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzclose.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzlib.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzread.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzwrite.c">
<Filter>Source Files\zlib</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -20,22 +20,12 @@ elif builder.target_platform == 'windows':
binary.compiler.linkflags.remove('/SUBSYSTEM:WINDOWS') binary.compiler.linkflags.remove('/SUBSYSTEM:WINDOWS')
binary.compiler.linkflags.append('/SUBSYSTEM:CONSOLE') binary.compiler.linkflags.append('/SUBSYSTEM:CONSOLE')
binary.compiler.linkflags += [AMXX.zlib.binary]
binary.sources = [ binary.sources = [
'amx.cpp', 'amx.cpp',
'amxxpc.cpp', 'amxxpc.cpp',
'Binary.cpp', 'Binary.cpp',
'zlib/adler32.c',
'zlib/compress.c',
'zlib/crc32.c',
'zlib/deflate.c',
'zlib/gzio.c',
'zlib/infback.c',
'zlib/inffast.c',
'zlib/inflate.c',
'zlib/inftrees.c',
'zlib/trees.c',
'zlib/uncompr.c',
'zlib/zutil.c',
] ]
if builder.target_platform == 'windows': if builder.target_platform == 'windows':

View File

@ -64,7 +64,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat> <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\public;..\..\amxmodx\;C:\Program Files (x86)\Visual Leak Detector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\public;..\..\public\zlib;..\..\amxmodx\;C:\Program Files (x86)\Visual Leak Detector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
@ -85,7 +85,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\public;..\..\amxmodx\;C:\Program Files (x86)\Visual Leak Detector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\public;..\..\public\zlib;..\..\amxmodx\;C:\Program Files (x86)\Visual Leak Detector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
@ -97,21 +97,24 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\public\zlib\adler32.c" />
<ClCompile Include="..\..\public\zlib\compress.c" />
<ClCompile Include="..\..\public\zlib\crc32.c" />
<ClCompile Include="..\..\public\zlib\deflate.c" />
<ClCompile Include="..\..\public\zlib\gzclose.c" />
<ClCompile Include="..\..\public\zlib\gzlib.c" />
<ClCompile Include="..\..\public\zlib\gzread.c" />
<ClCompile Include="..\..\public\zlib\gzwrite.c" />
<ClCompile Include="..\..\public\zlib\infback.c" />
<ClCompile Include="..\..\public\zlib\inffast.c" />
<ClCompile Include="..\..\public\zlib\inflate.c" />
<ClCompile Include="..\..\public\zlib\inftrees.c" />
<ClCompile Include="..\..\public\zlib\trees.c" />
<ClCompile Include="..\..\public\zlib\uncompr.c" />
<ClCompile Include="..\..\public\zlib\zutil.c" />
<ClCompile Include="amx.cpp" /> <ClCompile Include="amx.cpp" />
<ClCompile Include="amxxpc.cpp" /> <ClCompile Include="amxxpc.cpp" />
<ClCompile Include="Binary.cpp" /> <ClCompile Include="Binary.cpp" />
<ClCompile Include="zlib\adler32.c" />
<ClCompile Include="zlib\compress.c" />
<ClCompile Include="zlib\crc32.c" />
<ClCompile Include="zlib\deflate.c" />
<ClCompile Include="zlib\gzio.c" />
<ClCompile Include="zlib\infback.c" />
<ClCompile Include="zlib\inffast.c" />
<ClCompile Include="zlib\inflate.c" />
<ClCompile Include="zlib\inftrees.c" />
<ClCompile Include="zlib\trees.c" />
<ClCompile Include="zlib\uncompr.c" />
<ClCompile Include="zlib\zutil.c" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="amx.h" /> <ClInclude Include="amx.h" />
@ -124,16 +127,6 @@
<ClInclude Include="sclinux.h" /> <ClInclude Include="sclinux.h" />
<ClInclude Include="zconf.h" /> <ClInclude Include="zconf.h" />
<ClInclude Include="zlib.h" /> <ClInclude Include="zlib.h" />
<ClInclude Include="zlib\crc32.h" />
<ClInclude Include="zlib\deflate.h" />
<ClInclude Include="zlib\inffast.h" />
<ClInclude Include="zlib\inffixed.h" />
<ClInclude Include="zlib\inflate.h" />
<ClInclude Include="zlib\inftrees.h" />
<ClInclude Include="zlib\trees.h" />
<ClInclude Include="zlib\zconf.h" />
<ClInclude Include="zlib\zlib.h" />
<ClInclude Include="zlib\zutil.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="amxxpc1.rc"> <ResourceCompile Include="amxxpc1.rc">

View File

@ -14,7 +14,7 @@
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
</Filter> </Filter>
<Filter Include="zlib"> <Filter Include="zlib">
<UniqueIdentifier>{95894152-d509-4905-9205-97a44db61085}</UniqueIdentifier> <UniqueIdentifier>{dc85e679-8bc3-49f7-8823-b761223c8e8e}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -27,40 +27,49 @@
<ClCompile Include="Binary.cpp"> <ClCompile Include="Binary.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\adler32.c"> <ClCompile Include="..\..\public\zlib\adler32.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\compress.c"> <ClCompile Include="..\..\public\zlib\compress.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\crc32.c"> <ClCompile Include="..\..\public\zlib\crc32.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\deflate.c"> <ClCompile Include="..\..\public\zlib\deflate.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\gzio.c"> <ClCompile Include="..\..\public\zlib\infback.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\infback.c"> <ClCompile Include="..\..\public\zlib\inffast.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\inffast.c"> <ClCompile Include="..\..\public\zlib\inflate.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\inflate.c"> <ClCompile Include="..\..\public\zlib\inftrees.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\inftrees.c"> <ClCompile Include="..\..\public\zlib\trees.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\trees.c"> <ClCompile Include="..\..\public\zlib\uncompr.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\uncompr.c"> <ClCompile Include="..\..\public\zlib\zutil.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zlib\zutil.c"> <ClCompile Include="..\..\public\zlib\gzclose.c">
<Filter>zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzlib.c">
<Filter>zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzread.c">
<Filter>zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\public\zlib\gzwrite.c">
<Filter>zlib</Filter> <Filter>zlib</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
@ -95,36 +104,6 @@
<ClInclude Include="zlib.h"> <ClInclude Include="zlib.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="zlib\crc32.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\deflate.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\inffast.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\inffixed.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\inflate.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\inftrees.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\trees.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\zconf.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\zlib.h">
<Filter>zlib</Filter>
</ClInclude>
<ClInclude Include="zlib\zutil.h">
<Filter>zlib</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="amxxpc1.rc"> <ResourceCompile Include="amxxpc1.rc">

File diff suppressed because it is too large Load Diff

View File

@ -1,281 +0,0 @@
/* zconf.h -- configuration of the zlib compression library
* Copyright (C) 1995-2005 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#ifndef ZCONF_H
#define ZCONF_H
#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_WCE) || defined(__WIN32__)
# ifndef WIN32
# define WIN32
# endif
#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 <windows.h>
/* 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 <sys/types.h> /* for off_t */
# include <unistd.h> /* for SEEK_* and off_t */
# ifdef VMS
# include <unixio.h> /* 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 */

File diff suppressed because it is too large Load Diff

View File

@ -146,7 +146,6 @@
<ClCompile Include="..\..\..\..\public\memtools\MemoryUtils.cpp" /> <ClCompile Include="..\..\..\..\public\memtools\MemoryUtils.cpp" />
<ClCompile Include="..\amxx_api.cpp" /> <ClCompile Include="..\amxx_api.cpp" />
<ClCompile Include="..\CstrikeHacks.cpp" /> <ClCompile Include="..\CstrikeHacks.cpp" />
<ClCompile Include="..\CstrikeHLTypeConversion.cpp" />
<ClCompile Include="..\CstrikeNatives.cpp" /> <ClCompile Include="..\CstrikeNatives.cpp" />
<ClCompile Include="..\CstrikePlayer.cpp" /> <ClCompile Include="..\CstrikePlayer.cpp" />
<ClCompile Include="..\CstrikeUtils.cpp" /> <ClCompile Include="..\CstrikeUtils.cpp" />

View File

@ -56,9 +56,6 @@
<ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp"> <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp">
<Filter>Module SDK\SDK Base</Filter> <Filter>Module SDK\SDK Base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\CstrikeHLTypeConversion.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\CstrikePlayer.h"> <ClInclude Include="..\CstrikePlayer.h">

View File

@ -98,7 +98,7 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\GeoIP2\maxminddb.c" /> <ClCompile Include="..\GeoIP2\maxminddb.cpp" />
<ClCompile Include="..\geoip_main.cpp" /> <ClCompile Include="..\geoip_main.cpp" />
<ClCompile Include="..\geoip_natives.cpp" /> <ClCompile Include="..\geoip_natives.cpp" />
<ClCompile Include="..\geoip_util.cpp" /> <ClCompile Include="..\geoip_util.cpp" />

View File

@ -23,7 +23,7 @@
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\GeoIP2\maxminddb.c"> <ClCompile Include="..\GeoIP2\maxminddb.cpp">
<Filter>GeoIP2</Filter> <Filter>GeoIP2</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\geoip_util.cpp"> <ClCompile Include="..\geoip_util.cpp">

View File

@ -19,17 +19,17 @@ if AMXX.mysql_path:
binary.compiler.defines += ['stricmp=strcasecmp'] binary.compiler.defines += ['stricmp=strcasecmp']
binary.compiler.linkflags += [ binary.compiler.linkflags += [
os.path.join(AMXX.mysql_path, 'lib', 'libmysqlclient_r.a'), os.path.join(AMXX.mysql_path, 'lib', 'libmysqlclient_r.a'),
'-lz',
'-lpthread', '-lpthread',
'-lm' '-lm'
] ]
elif builder.target_platform is 'windows': elif builder.target_platform is 'windows':
binary.compiler.linkflags += [ binary.compiler.linkflags += [
os.path.join(AMXX.mysql_path, 'lib', 'opt', 'mysqlclient.lib'), os.path.join(AMXX.mysql_path, 'lib', 'opt', 'mysqlclient.lib'),
os.path.join(AMXX.mysql_path, 'lib', 'opt', 'zlib.lib'),
'ws2_32.lib' 'ws2_32.lib'
] ]
binary.compiler.linkflags += [AMXX.zlib.binary]
binary.sources = [ binary.sources = [
'basic_sql.cpp', 'basic_sql.cpp',
'handles.cpp', 'handles.cpp',

View File

@ -99,6 +99,21 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\public\zlib\adler32.c" />
<ClCompile Include="..\..\..\public\zlib\compress.c" />
<ClCompile Include="..\..\..\public\zlib\crc32.c" />
<ClCompile Include="..\..\..\public\zlib\deflate.c" />
<ClCompile Include="..\..\..\public\zlib\gzclose.c" />
<ClCompile Include="..\..\..\public\zlib\gzlib.c" />
<ClCompile Include="..\..\..\public\zlib\gzread.c" />
<ClCompile Include="..\..\..\public\zlib\gzwrite.c" />
<ClCompile Include="..\..\..\public\zlib\infback.c" />
<ClCompile Include="..\..\..\public\zlib\inffast.c" />
<ClCompile Include="..\..\..\public\zlib\inflate.c" />
<ClCompile Include="..\..\..\public\zlib\inftrees.c" />
<ClCompile Include="..\..\..\public\zlib\trees.c" />
<ClCompile Include="..\..\..\public\zlib\uncompr.c" />
<ClCompile Include="..\..\..\public\zlib\zutil.c" />
<ClCompile Include="..\basic_sql.cpp" /> <ClCompile Include="..\basic_sql.cpp" />
<ClCompile Include="..\handles.cpp" /> <ClCompile Include="..\handles.cpp" />
<ClCompile Include="..\module.cpp" /> <ClCompile Include="..\module.cpp" />

View File

@ -36,6 +36,9 @@
<Filter Include="Pawn Includes"> <Filter Include="Pawn Includes">
<UniqueIdentifier>{05423057-6d62-454a-b5f8-b451d91be196}</UniqueIdentifier> <UniqueIdentifier>{05423057-6d62-454a-b5f8-b451d91be196}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source Files\zlib">
<UniqueIdentifier>{557b0e54-eb0e-488f-b8bc-3cee3f8ddfba}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\basic_sql.cpp"> <ClCompile Include="..\basic_sql.cpp">
@ -77,6 +80,51 @@
<ClCompile Include="..\..\..\public\sdk\amxxmodule.cpp"> <ClCompile Include="..\..\..\public\sdk\amxxmodule.cpp">
<Filter>Module SDK\SDK Base</Filter> <Filter>Module SDK\SDK Base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\public\zlib\adler32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\compress.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\crc32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\deflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\infback.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\inffast.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\inflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\inftrees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\trees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\uncompr.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\zutil.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\gzclose.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\gzlib.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\gzread.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="..\..\..\public\zlib\gzwrite.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\mysql2_header.h"> <ClInclude Include="..\mysql2_header.h">

28
public/zlib/AMBuilder Normal file
View File

@ -0,0 +1,28 @@
# vim: sts=2 ts=8 sw=2 tw=99 et ft=python:
import os, platform
lib = builder.compiler.StaticLibrary('zlib')
lib.compiler.includes += [
os.path.join(builder.sourcePath, 'public', 'zlib'),
]
lib.sources += [
'adler32.c',
'compress.c',
'crc32.c',
'deflate.c',
'gzclose.c',
'gzlib.c',
'gzread.c',
'gzwrite.c',
'infback.c',
'inffast.c',
'inflate.c',
'inftrees.c',
'trees.c',
'uncompr.c',
'zutil.c',
]
rvalue = builder.Add(lib)

View File

@ -1,149 +1,179 @@
/* adler32.c -- compute the Adler-32 checksum of a data stream /* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-2004 Mark Adler * Copyright (C) 1995-2011 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
#define ZLIB_INTERNAL #include "zutil.h"
#include "zlib.h"
#define local static
#define BASE 65521UL /* largest prime smaller than 65536 */
#define NMAX 5552 local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
#define BASE 65521 /* largest prime smaller than 65536 */
#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} #define NMAX 5552
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); #define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
#define DO16(buf) DO8(buf,0); DO8(buf,8); #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
/* use NO_DIVIDE if your processor does not do division in hardware */ #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#ifdef NO_DIVIDE #define DO16(buf) DO8(buf,0); DO8(buf,8);
# define MOD(a) \
do { \ /* use NO_DIVIDE if your processor does not do division in hardware --
if (a >= (BASE << 16)) a -= (BASE << 16); \ try it both ways to see which is faster */
if (a >= (BASE << 15)) a -= (BASE << 15); \ #ifdef NO_DIVIDE
if (a >= (BASE << 14)) a -= (BASE << 14); \ /* note that this assumes BASE is 65521, where 65536 % 65521 == 15
if (a >= (BASE << 13)) a -= (BASE << 13); \ (thank you to John Reiser for pointing this out) */
if (a >= (BASE << 12)) a -= (BASE << 12); \ # define CHOP(a) \
if (a >= (BASE << 11)) a -= (BASE << 11); \ do { \
if (a >= (BASE << 10)) a -= (BASE << 10); \ unsigned long tmp = a >> 16; \
if (a >= (BASE << 9)) a -= (BASE << 9); \ a &= 0xffffUL; \
if (a >= (BASE << 8)) a -= (BASE << 8); \ a += (tmp << 4) - tmp; \
if (a >= (BASE << 7)) a -= (BASE << 7); \ } while (0)
if (a >= (BASE << 6)) a -= (BASE << 6); \ # define MOD28(a) \
if (a >= (BASE << 5)) a -= (BASE << 5); \ do { \
if (a >= (BASE << 4)) a -= (BASE << 4); \ CHOP(a); \
if (a >= (BASE << 3)) a -= (BASE << 3); \ if (a >= BASE) a -= BASE; \
if (a >= (BASE << 2)) a -= (BASE << 2); \ } while (0)
if (a >= (BASE << 1)) a -= (BASE << 1); \ # define MOD(a) \
if (a >= BASE) a -= BASE; \ do { \
} while (0) CHOP(a); \
# define MOD4(a) \ MOD28(a); \
do { \ } while (0)
if (a >= (BASE << 4)) a -= (BASE << 4); \ # define MOD63(a) \
if (a >= (BASE << 3)) a -= (BASE << 3); \ do { /* this assumes a is not negative */ \
if (a >= (BASE << 2)) a -= (BASE << 2); \ z_off64_t tmp = a >> 32; \
if (a >= (BASE << 1)) a -= (BASE << 1); \ a &= 0xffffffffL; \
if (a >= BASE) a -= BASE; \ a += (tmp << 8) - (tmp << 5) + tmp; \
} while (0) tmp = a >> 16; \
#else a &= 0xffffL; \
# define MOD(a) a %= BASE a += (tmp << 4) - tmp; \
# define MOD4(a) a %= BASE tmp = a >> 16; \
#endif a &= 0xffffL; \
a += (tmp << 4) - tmp; \
/* ========================================================================= */ if (a >= BASE) a -= BASE; \
uLong ZEXPORT adler32(adler, buf, len) } while (0)
uLong adler; #else
const Bytef *buf; # define MOD(a) a %= BASE
uInt len; # define MOD28(a) a %= BASE
{ # define MOD63(a) a %= BASE
unsigned long sum2; #endif
unsigned n;
/* ========================================================================= */
/* split Adler-32 into component sums */ uLong ZEXPORT adler32(adler, buf, len)
sum2 = (adler >> 16) & 0xffff; uLong adler;
adler &= 0xffff; const Bytef *buf;
uInt len;
/* in case user likes doing a byte at a time, keep it fast */ {
if (len == 1) { unsigned long sum2;
adler += buf[0]; unsigned n;
if (adler >= BASE)
adler -= BASE; /* split Adler-32 into component sums */
sum2 += adler; sum2 = (adler >> 16) & 0xffff;
if (sum2 >= BASE) adler &= 0xffff;
sum2 -= BASE;
return adler | (sum2 << 16); /* in case user likes doing a byte at a time, keep it fast */
} if (len == 1) {
adler += buf[0];
/* initial Adler-32 value (deferred check for len == 1 speed) */ if (adler >= BASE)
if (buf == Z_NULL) adler -= BASE;
return 1L; sum2 += adler;
if (sum2 >= BASE)
/* in case short lengths are provided, keep it somewhat fast */ sum2 -= BASE;
if (len < 16) { return adler | (sum2 << 16);
while (len--) { }
adler += *buf++;
sum2 += adler; /* initial Adler-32 value (deferred check for len == 1 speed) */
} if (buf == Z_NULL)
if (adler >= BASE) return 1L;
adler -= BASE;
MOD4(sum2); /* only added so many BASE's */ /* in case short lengths are provided, keep it somewhat fast */
return adler | (sum2 << 16); if (len < 16) {
} while (len--) {
adler += *buf++;
/* do length NMAX blocks -- requires just one modulo operation */ sum2 += adler;
while (len >= NMAX) { }
len -= NMAX; if (adler >= BASE)
n = NMAX / 16; /* NMAX is divisible by 16 */ adler -= BASE;
do { MOD28(sum2); /* only added so many BASE's */
DO16(buf); /* 16 sums unrolled */ return adler | (sum2 << 16);
buf += 16; }
} while (--n);
MOD(adler); /* do length NMAX blocks -- requires just one modulo operation */
MOD(sum2); while (len >= NMAX) {
} len -= NMAX;
n = NMAX / 16; /* NMAX is divisible by 16 */
/* do remaining bytes (less than NMAX, still just one modulo) */ do {
if (len) { /* avoid modulos if none remaining */ DO16(buf); /* 16 sums unrolled */
while (len >= 16) { buf += 16;
len -= 16; } while (--n);
DO16(buf); MOD(adler);
buf += 16; MOD(sum2);
} }
while (len--) {
adler += *buf++; /* do remaining bytes (less than NMAX, still just one modulo) */
sum2 += adler; if (len) { /* avoid modulos if none remaining */
} while (len >= 16) {
MOD(adler); len -= 16;
MOD(sum2); DO16(buf);
} buf += 16;
}
/* return recombined sums */ while (len--) {
return adler | (sum2 << 16); adler += *buf++;
} sum2 += adler;
}
/* ========================================================================= */ MOD(adler);
uLong ZEXPORT adler32_combine(adler1, adler2, len2) MOD(sum2);
uLong adler1; }
uLong adler2;
z_off_t len2; /* return recombined sums */
{ return adler | (sum2 << 16);
unsigned long sum1; }
unsigned long sum2;
unsigned rem; /* ========================================================================= */
local uLong adler32_combine_(adler1, adler2, len2)
/* the derivation of this formula is left as an exercise for the reader */ uLong adler1;
rem = (unsigned)(len2 % BASE); uLong adler2;
sum1 = adler1 & 0xffff; z_off64_t len2;
sum2 = rem * sum1; {
MOD(sum2); unsigned long sum1;
sum1 += (adler2 & 0xffff) + BASE - 1; unsigned long sum2;
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; unsigned rem;
if (sum1 > BASE) sum1 -= BASE;
if (sum1 > BASE) sum1 -= BASE; /* for negative len, return invalid adler32 as a clue for debugging */
if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); if (len2 < 0)
if (sum2 > BASE) sum2 -= BASE; return 0xffffffffUL;
return sum1 | (sum2 << 16);
} /* the derivation of this formula is left as an exercise for the reader */
MOD63(len2); /* assumes len2 >= 0 */
rem = (unsigned)len2;
sum1 = adler1 & 0xffff;
sum2 = rem * sum1;
MOD(sum2);
sum1 += (adler2 & 0xffff) + BASE - 1;
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
if (sum1 >= BASE) sum1 -= BASE;
if (sum1 >= BASE) sum1 -= BASE;
if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
if (sum2 >= BASE) sum2 -= BASE;
return sum1 | (sum2 << 16);
}
/* ========================================================================= */
uLong ZEXPORT adler32_combine(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}
uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}

View File

@ -1,79 +1,80 @@
/* compress.c -- compress a memory buffer /* compress.c -- compress a memory buffer
* Copyright (C) 1995-2003 Jean-loup Gailly. * Copyright (C) 1995-2005 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
#define ZLIB_INTERNAL #define ZLIB_INTERNAL
#include "zlib.h" #include "zlib.h"
/* =========================================================================== /* ===========================================================================
Compresses the source buffer into the destination buffer. The level Compresses the source buffer into the destination buffer. The level
parameter has the same meaning as in deflateInit. sourceLen is the byte 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 length of the source buffer. Upon entry, destLen is the total size of the
destination buffer, which must be at least 0.1% larger than sourceLen plus destination buffer, which must be at least 0.1% larger than sourceLen plus
12 bytes. Upon exit, destLen is the actual size of the compressed buffer. 12 bytes. 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 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, memory, Z_BUF_ERROR if there was not enough room in the output buffer,
Z_STREAM_ERROR if the level parameter is invalid. Z_STREAM_ERROR if the level parameter is invalid.
*/ */
int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
Bytef *dest; Bytef *dest;
uLongf *destLen; uLongf *destLen;
const Bytef *source; const Bytef *source;
uLong sourceLen; uLong sourceLen;
int level; int level;
{ {
z_stream stream; z_stream stream;
int err; int err;
stream.next_in = (Bytef*)source; stream.next_in = (z_const Bytef *)source;
stream.avail_in = (uInt)sourceLen; stream.avail_in = (uInt)sourceLen;
#ifdef MAXSEG_64K #ifdef MAXSEG_64K
/* Check for source > 64K on 16-bit machine: */ /* Check for source > 64K on 16-bit machine: */
if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
#endif #endif
stream.next_out = dest; stream.next_out = dest;
stream.avail_out = (uInt)*destLen; stream.avail_out = (uInt)*destLen;
if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
stream.zalloc = (alloc_func)0; stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0; stream.zfree = (free_func)0;
stream.opaque = (voidpf)0; stream.opaque = (voidpf)0;
err = deflateInit(&stream, level); err = deflateInit(&stream, level);
if (err != Z_OK) return err; if (err != Z_OK) return err;
err = deflate(&stream, Z_FINISH); err = deflate(&stream, Z_FINISH);
if (err != Z_STREAM_END) { if (err != Z_STREAM_END) {
deflateEnd(&stream); deflateEnd(&stream);
return err == Z_OK ? Z_BUF_ERROR : err; return err == Z_OK ? Z_BUF_ERROR : err;
} }
*destLen = stream.total_out; *destLen = stream.total_out;
err = deflateEnd(&stream); err = deflateEnd(&stream);
return err; return err;
} }
/* =========================================================================== /* ===========================================================================
*/ */
int ZEXPORT compress (dest, destLen, source, sourceLen) int ZEXPORT compress (dest, destLen, source, sourceLen)
Bytef *dest; Bytef *dest;
uLongf *destLen; uLongf *destLen;
const Bytef *source; const Bytef *source;
uLong sourceLen; uLong sourceLen;
{ {
return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
} }
/* =========================================================================== /* ===========================================================================
If the default memLevel or windowBits for deflateInit() is changed, then If the default memLevel or windowBits for deflateInit() is changed, then
this function needs to be updated. this function needs to be updated.
*/ */
uLong ZEXPORT compressBound (sourceLen) uLong ZEXPORT compressBound (sourceLen)
uLong sourceLen; uLong sourceLen;
{ {
return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
} (sourceLen >> 25) + 13;
}

View File

@ -1,424 +1,425 @@
/* crc32.c -- compute the CRC-32 of a data stream /* crc32.c -- compute the CRC-32 of a data stream
* Copyright (C) 1995-2005 Mark Adler * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
* *
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
* CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
* tables for updating the shift register in one step with three exclusive-ors * tables for updating the shift register in one step with three exclusive-ors
* instead of four steps with four exclusive-ors. This results in about a * instead of four steps with four exclusive-ors. This results in about a
* factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
/* /*
Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
protection on the static variables used to control the first-use generation protection on the static variables used to control the first-use generation
of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
first call get_crc_table() to initialize the tables before allowing more than first call get_crc_table() to initialize the tables before allowing more than
one thread to use crc32(). one thread to use crc32().
*/
DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
#include <stdio.h> */
#ifdef MAKECRCH
# include <stdio.h> #ifdef MAKECRCH
# ifndef DYNAMIC_CRC_TABLE # include <stdio.h>
# define DYNAMIC_CRC_TABLE # ifndef DYNAMIC_CRC_TABLE
# endif /* !DYNAMIC_CRC_TABLE */ # define DYNAMIC_CRC_TABLE
#endif /* MAKECRCH */ # endif /* !DYNAMIC_CRC_TABLE */
#endif /* MAKECRCH */
#include "zutil.h" /* for STDC and FAR definitions */
#include "zutil.h" /* for STDC and FAR definitions */
#define local static
#define local static
/* Find a four-byte integer type for crc32_little() and crc32_big(). */
#ifndef NOBYFOUR /* Definitions for doing the crc four data bytes at a time. */
# ifdef STDC /* need ANSI C limits.h to determine sizes */ #if !defined(NOBYFOUR) && defined(Z_U4)
# include <limits.h> # define BYFOUR
# define BYFOUR #endif
# if (UINT_MAX == 0xffffffffUL) #ifdef BYFOUR
typedef unsigned int u4; local unsigned long crc32_little OF((unsigned long,
# else const unsigned char FAR *, unsigned));
# if (ULONG_MAX == 0xffffffffUL) local unsigned long crc32_big OF((unsigned long,
typedef unsigned long u4; const unsigned char FAR *, unsigned));
# else # define TBLS 8
# if (USHRT_MAX == 0xffffffffUL) #else
typedef unsigned short u4; # define TBLS 1
# else #endif /* BYFOUR */
# undef BYFOUR /* can't find a four-byte integer type! */
# endif /* Local functions for crc concatenation */
# endif local unsigned long gf2_matrix_times OF((unsigned long *mat,
# endif unsigned long vec));
# endif /* STDC */ local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
#endif /* !NOBYFOUR */ local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
/* Definitions for doing the crc four data bytes at a time. */
#ifdef BYFOUR #ifdef DYNAMIC_CRC_TABLE
# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \
(((w)&0xff00)<<8)+(((w)&0xff)<<24)) local volatile int crc_table_empty = 1;
local unsigned long crc32_little OF((unsigned long, local z_crc_t FAR crc_table[TBLS][256];
const unsigned char FAR *, unsigned)); local void make_crc_table OF((void));
local unsigned long crc32_big OF((unsigned long, #ifdef MAKECRCH
const unsigned char FAR *, unsigned)); local void write_table OF((FILE *, const z_crc_t FAR *));
# define TBLS 8 #endif /* MAKECRCH */
#else /*
# define TBLS 1 Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
#endif /* BYFOUR */ x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
/* Local functions for crc concatenation */ Polynomials over GF(2) are represented in binary, one bit per coefficient,
local unsigned long gf2_matrix_times OF((unsigned long *mat, with the lowest powers in the most significant bit. Then adding polynomials
unsigned long vec)); is just exclusive-or, and multiplying a polynomial by x is a right shift by
local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); one. If we call the above polynomial p, and represent a byte as the
polynomial q, also with the lowest power in the most significant bit (so the
#ifdef DYNAMIC_CRC_TABLE byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
where a mod b means the remainder after dividing a by b.
local volatile int crc_table_empty = 1;
local unsigned long FAR crc_table[TBLS][256]; This calculation is done using the shift-register method of multiplying and
local void make_crc_table OF((void)); taking the remainder. The register is initialized to zero, and for each
#ifdef MAKECRCH incoming bit, x^32 is added mod p to the register if the bit is a one (where
local void write_table OF((FILE *, const unsigned long FAR *)); x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
#endif /* MAKECRCH */ x (which is shifting right by one and adding x^32 mod p if the bit shifted
/* out is a one). We start with the highest power (least significant bit) of
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: q and repeat for all eight bits of q.
x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
The first table is simply the CRC of all possible eight bit values. This is
Polynomials over GF(2) are represented in binary, one bit per coefficient, all the information needed to generate CRCs on data a byte at a time for all
with the lowest powers in the most significant bit. Then adding polynomials combinations of CRC register values and incoming bytes. The remaining tables
is just exclusive-or, and multiplying a polynomial by x is a right shift by allow for word-at-a-time CRC calculation for both big-endian and little-
one. If we call the above polynomial p, and represent a byte as the endian machines, where a word is four bytes.
polynomial q, also with the lowest power in the most significant bit (so the */
byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, local void make_crc_table()
where a mod b means the remainder after dividing a by b. {
z_crc_t c;
This calculation is done using the shift-register method of multiplying and int n, k;
taking the remainder. The register is initialized to zero, and for each z_crc_t poly; /* polynomial exclusive-or pattern */
incoming bit, x^32 is added mod p to the register if the bit is a one (where /* terms of polynomial defining this crc (except x^32): */
x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by static volatile int first = 1; /* flag to limit concurrent making */
x (which is shifting right by one and adding x^32 mod p if the bit shifted static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
out is a one). We start with the highest power (least significant bit) of
q and repeat for all eight bits of q. /* See if another task is already doing this (not thread-safe, but better
than nothing -- significantly reduces duration of vulnerability in
The first table is simply the CRC of all possible eight bit values. This is case the advice about DYNAMIC_CRC_TABLE is ignored) */
all the information needed to generate CRCs on data a byte at a time for all if (first) {
combinations of CRC register values and incoming bytes. The remaining tables first = 0;
allow for word-at-a-time CRC calculation for both big-endian and little-
endian machines, where a word is four bytes. /* make exclusive-or pattern from polynomial (0xedb88320UL) */
*/ poly = 0;
local void make_crc_table() for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
{ poly |= (z_crc_t)1 << (31 - p[n]);
unsigned long c;
int n, k; /* generate a crc for every 8-bit value */
unsigned long poly; /* polynomial exclusive-or pattern */ for (n = 0; n < 256; n++) {
/* terms of polynomial defining this crc (except x^32): */ c = (z_crc_t)n;
static volatile int first = 1; /* flag to limit concurrent making */ for (k = 0; k < 8; k++)
static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; c = c & 1 ? poly ^ (c >> 1) : c >> 1;
crc_table[0][n] = c;
/* See if another task is already doing this (not thread-safe, but better }
than nothing -- significantly reduces duration of vulnerability in
case the advice about DYNAMIC_CRC_TABLE is ignored) */ #ifdef BYFOUR
if (first) { /* generate crc for each value followed by one, two, and three zeros,
first = 0; and then the byte reversal of those as well as the first table */
for (n = 0; n < 256; n++) {
/* make exclusive-or pattern from polynomial (0xedb88320UL) */ c = crc_table[0][n];
poly = 0UL; crc_table[4][n] = ZSWAP32(c);
for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) for (k = 1; k < 4; k++) {
poly |= 1UL << (31 - p[n]); c = crc_table[0][c & 0xff] ^ (c >> 8);
crc_table[k][n] = c;
/* generate a crc for every 8-bit value */ crc_table[k + 4][n] = ZSWAP32(c);
for (n = 0; n < 256; n++) { }
c = (unsigned long)n; }
for (k = 0; k < 8; k++) #endif /* BYFOUR */
c = c & 1 ? poly ^ (c >> 1) : c >> 1;
crc_table[0][n] = c; crc_table_empty = 0;
} }
else { /* not first */
#ifdef BYFOUR /* wait for the other guy to finish (not efficient, but rare) */
/* generate crc for each value followed by one, two, and three zeros, while (crc_table_empty)
and then the byte reversal of those as well as the first table */ ;
for (n = 0; n < 256; n++) { }
c = crc_table[0][n];
crc_table[4][n] = REV(c); #ifdef MAKECRCH
for (k = 1; k < 4; k++) { /* write out CRC tables to crc32.h */
c = crc_table[0][c & 0xff] ^ (c >> 8); {
crc_table[k][n] = c; FILE *out;
crc_table[k + 4][n] = REV(c);
} out = fopen("crc32.h", "w");
} if (out == NULL) return;
#endif /* BYFOUR */ fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
crc_table_empty = 0; fprintf(out, "local const z_crc_t FAR ");
} fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
else { /* not first */ write_table(out, crc_table[0]);
/* wait for the other guy to finish (not efficient, but rare) */ # ifdef BYFOUR
while (crc_table_empty) fprintf(out, "#ifdef BYFOUR\n");
; for (k = 1; k < 8; k++) {
} fprintf(out, " },\n {\n");
write_table(out, crc_table[k]);
#ifdef MAKECRCH }
/* write out CRC tables to crc32.h */ fprintf(out, "#endif\n");
{ # endif /* BYFOUR */
FILE *out; fprintf(out, " }\n};\n");
fclose(out);
out = fopen("crc32.h", "w"); }
if (out == NULL) return; #endif /* MAKECRCH */
fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); }
fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
fprintf(out, "local const unsigned long FAR "); #ifdef MAKECRCH
fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); local void write_table(out, table)
write_table(out, crc_table[0]); FILE *out;
# ifdef BYFOUR const z_crc_t FAR *table;
fprintf(out, "#ifdef BYFOUR\n"); {
for (k = 1; k < 8; k++) { int n;
fprintf(out, " },\n {\n");
write_table(out, crc_table[k]); for (n = 0; n < 256; n++)
} fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
fprintf(out, "#endif\n"); (unsigned long)(table[n]),
# endif /* BYFOUR */ n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
fprintf(out, " }\n};\n"); }
fclose(out); #endif /* MAKECRCH */
}
#endif /* MAKECRCH */ #else /* !DYNAMIC_CRC_TABLE */
} /* ========================================================================
* Tables of CRC-32s of all single-byte values, made by make_crc_table().
#ifdef MAKECRCH */
local void write_table(out, table) #include "crc32.h"
FILE *out; #endif /* DYNAMIC_CRC_TABLE */
const unsigned long FAR *table;
{ /* =========================================================================
int n; * This function can be used by asm versions of crc32()
*/
for (n = 0; n < 256; n++) const z_crc_t FAR * ZEXPORT get_crc_table()
fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], {
n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); #ifdef DYNAMIC_CRC_TABLE
} if (crc_table_empty)
#endif /* MAKECRCH */ make_crc_table();
#endif /* DYNAMIC_CRC_TABLE */
#else /* !DYNAMIC_CRC_TABLE */ return (const z_crc_t FAR *)crc_table;
/* ======================================================================== }
* Tables of CRC-32s of all single-byte values, made by make_crc_table().
*/ /* ========================================================================= */
#include "crc32.h" #define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
#endif /* DYNAMIC_CRC_TABLE */ #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
/* ========================================================================= /* ========================================================================= */
* This function can be used by asm versions of crc32() unsigned long ZEXPORT crc32(crc, buf, len)
*/ unsigned long crc;
const unsigned long FAR * ZEXPORT get_crc_table() const unsigned char FAR *buf;
{ uInt len;
#ifdef DYNAMIC_CRC_TABLE {
if (crc_table_empty) if (buf == Z_NULL) return 0UL;
make_crc_table();
#endif /* DYNAMIC_CRC_TABLE */ #ifdef DYNAMIC_CRC_TABLE
return (const unsigned long FAR *)crc_table; if (crc_table_empty)
} make_crc_table();
#endif /* DYNAMIC_CRC_TABLE */
/* ========================================================================= */
#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) #ifdef BYFOUR
#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 if (sizeof(void *) == sizeof(ptrdiff_t)) {
z_crc_t endian;
/* ========================================================================= */
unsigned long ZEXPORT crc32(crc, buf, len) endian = 1;
unsigned long crc; if (*((unsigned char *)(&endian)))
const unsigned char FAR *buf; return crc32_little(crc, buf, len);
unsigned len; else
{ return crc32_big(crc, buf, len);
if (buf == Z_NULL) return 0UL; }
#endif /* BYFOUR */
#ifdef DYNAMIC_CRC_TABLE crc = crc ^ 0xffffffffUL;
if (crc_table_empty) while (len >= 8) {
make_crc_table(); DO8;
#endif /* DYNAMIC_CRC_TABLE */ len -= 8;
}
#ifdef BYFOUR if (len) do {
if (sizeof(void *) == sizeof(ptrdiff_t)) { DO1;
u4 endian; } while (--len);
return crc ^ 0xffffffffUL;
endian = 1; }
if (*((unsigned char *)(&endian)))
return crc32_little(crc, buf, len); #ifdef BYFOUR
else
return crc32_big(crc, buf, len); /* ========================================================================= */
} #define DOLIT4 c ^= *buf4++; \
#endif /* BYFOUR */ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
crc = crc ^ 0xffffffffUL; crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
while (len >= 8) { #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
DO8;
len -= 8; /* ========================================================================= */
} local unsigned long crc32_little(crc, buf, len)
if (len) do { unsigned long crc;
DO1; const unsigned char FAR *buf;
} while (--len); unsigned len;
return crc ^ 0xffffffffUL; {
} register z_crc_t c;
register const z_crc_t FAR *buf4;
#ifdef BYFOUR
c = (z_crc_t)crc;
/* ========================================================================= */ c = ~c;
#define DOLIT4 c ^= *buf4++; \ while (len && ((ptrdiff_t)buf & 3)) {
c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] len--;
#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 }
/* ========================================================================= */ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
local unsigned long crc32_little(crc, buf, len) while (len >= 32) {
unsigned long crc; DOLIT32;
const unsigned char FAR *buf; len -= 32;
unsigned len; }
{ while (len >= 4) {
register u4 c; DOLIT4;
register const u4 FAR *buf4; len -= 4;
}
c = (u4)crc; buf = (const unsigned char FAR *)buf4;
c = ~c;
while (len && ((ptrdiff_t)buf & 3)) { if (len) do {
c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
len--; } while (--len);
} c = ~c;
return (unsigned long)c;
buf4 = (const u4 FAR *)(const void FAR *)buf; }
while (len >= 32) {
DOLIT32; /* ========================================================================= */
len -= 32; #define DOBIG4 c ^= *++buf4; \
} c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
while (len >= 4) { crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
DOLIT4; #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
len -= 4;
} /* ========================================================================= */
buf = (const unsigned char FAR *)buf4; local unsigned long crc32_big(crc, buf, len)
unsigned long crc;
if (len) do { const unsigned char FAR *buf;
c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); unsigned len;
} while (--len); {
c = ~c; register z_crc_t c;
return (unsigned long)c; register const z_crc_t FAR *buf4;
}
c = ZSWAP32((z_crc_t)crc);
/* ========================================================================= */ c = ~c;
#define DOBIG4 c ^= *++buf4; \ while (len && ((ptrdiff_t)buf & 3)) {
c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] len--;
#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 }
/* ========================================================================= */ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
local unsigned long crc32_big(crc, buf, len) buf4--;
unsigned long crc; while (len >= 32) {
const unsigned char FAR *buf; DOBIG32;
unsigned len; len -= 32;
{ }
register u4 c; while (len >= 4) {
register const u4 FAR *buf4; DOBIG4;
len -= 4;
c = REV((u4)crc); }
c = ~c; buf4++;
while (len && ((ptrdiff_t)buf & 3)) { buf = (const unsigned char FAR *)buf4;
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
len--; if (len) do {
} c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
} while (--len);
buf4 = (const u4 FAR *)(const void FAR *)buf; c = ~c;
buf4--; return (unsigned long)(ZSWAP32(c));
while (len >= 32) { }
DOBIG32;
len -= 32; #endif /* BYFOUR */
}
while (len >= 4) { #define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
DOBIG4;
len -= 4; /* ========================================================================= */
} local unsigned long gf2_matrix_times(mat, vec)
buf4++; unsigned long *mat;
buf = (const unsigned char FAR *)buf4; unsigned long vec;
{
if (len) do { unsigned long sum;
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
} while (--len); sum = 0;
c = ~c; while (vec) {
return (unsigned long)(REV(c)); if (vec & 1)
} sum ^= *mat;
vec >>= 1;
#endif /* BYFOUR */ mat++;
}
#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ return sum;
}
/* ========================================================================= */
local unsigned long gf2_matrix_times(mat, vec) /* ========================================================================= */
unsigned long *mat; local void gf2_matrix_square(square, mat)
unsigned long vec; unsigned long *square;
{ unsigned long *mat;
unsigned long sum; {
int n;
sum = 0;
while (vec) { for (n = 0; n < GF2_DIM; n++)
if (vec & 1) square[n] = gf2_matrix_times(mat, mat[n]);
sum ^= *mat; }
vec >>= 1;
mat++; /* ========================================================================= */
} local uLong crc32_combine_(crc1, crc2, len2)
return sum; uLong crc1;
} uLong crc2;
z_off64_t len2;
/* ========================================================================= */ {
local void gf2_matrix_square(square, mat) int n;
unsigned long *square; unsigned long row;
unsigned long *mat; unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
{ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
int n;
/* degenerate case (also disallow negative lengths) */
for (n = 0; n < GF2_DIM; n++) if (len2 <= 0)
square[n] = gf2_matrix_times(mat, mat[n]); return crc1;
}
/* put operator for one zero bit in odd */
/* ========================================================================= */ odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
uLong ZEXPORT crc32_combine(crc1, crc2, len2) row = 1;
uLong crc1; for (n = 1; n < GF2_DIM; n++) {
uLong crc2; odd[n] = row;
z_off_t len2; row <<= 1;
{ }
int n;
unsigned long row; /* put operator for two zero bits in even */
unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ gf2_matrix_square(even, odd);
unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
/* put operator for four zero bits in odd */
/* degenerate case */ gf2_matrix_square(odd, even);
if (len2 == 0)
return crc1; /* apply len2 zeros to crc1 (first square will put the operator for one
zero byte, eight zero bits, in even) */
/* put operator for one zero bit in odd */ do {
odd[0] = 0xedb88320L; /* CRC-32 polynomial */ /* apply zeros operator for this bit of len2 */
row = 1; gf2_matrix_square(even, odd);
for (n = 1; n < GF2_DIM; n++) { if (len2 & 1)
odd[n] = row; crc1 = gf2_matrix_times(even, crc1);
row <<= 1; len2 >>= 1;
}
/* if no more bits set, then done */
/* put operator for two zero bits in even */ if (len2 == 0)
gf2_matrix_square(even, odd); break;
/* put operator for four zero bits in odd */ /* another iteration of the loop with odd and even swapped */
gf2_matrix_square(odd, even); gf2_matrix_square(odd, even);
if (len2 & 1)
/* apply len2 zeros to crc1 (first square will put the operator for one crc1 = gf2_matrix_times(odd, crc1);
zero byte, eight zero bits, in even) */ len2 >>= 1;
do {
/* apply zeros operator for this bit of len2 */ /* if no more bits set, then done */
gf2_matrix_square(even, odd); } while (len2 != 0);
if (len2 & 1)
crc1 = gf2_matrix_times(even, crc1); /* return combined crc */
len2 >>= 1; crc1 ^= crc2;
return crc1;
/* if no more bits set, then done */ }
if (len2 == 0)
break; /* ========================================================================= */
uLong ZEXPORT crc32_combine(crc1, crc2, len2)
/* another iteration of the loop with odd and even swapped */ uLong crc1;
gf2_matrix_square(odd, even); uLong crc2;
if (len2 & 1) z_off_t len2;
crc1 = gf2_matrix_times(odd, crc1); {
len2 >>= 1; return crc32_combine_(crc1, crc2, len2);
}
/* if no more bits set, then done */
} while (len2 != 0); uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
uLong crc1;
/* return combined crc */ uLong crc2;
crc1 ^= crc2; z_off64_t len2;
return crc1; {
} return crc32_combine_(crc1, crc2, len2);
}

View File

@ -1,441 +1,441 @@
/* crc32.h -- tables for rapid CRC calculation /* crc32.h -- tables for rapid CRC calculation
* Generated automatically by crc32.c * Generated automatically by crc32.c
*/ */
local const unsigned long FAR crc_table[TBLS][256] = local const z_crc_t FAR crc_table[TBLS][256] =
{ {
{ {
0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
0x2d02ef8dUL 0x2d02ef8dUL
#ifdef BYFOUR #ifdef BYFOUR
}, },
{ {
0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
0x9324fd72UL 0x9324fd72UL
}, },
{ {
0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
0xbe9834edUL 0xbe9834edUL
}, },
{ {
0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
0xde0506f1UL 0xde0506f1UL
}, },
{ {
0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
0x8def022dUL 0x8def022dUL
}, },
{ {
0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
0x72fd2493UL 0x72fd2493UL
}, },
{ {
0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
0xed3498beUL 0xed3498beUL
}, },
{ {
0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
0xf10605deUL 0xf10605deUL
#endif #endif
} }
}; };

File diff suppressed because it is too large Load Diff

View File

@ -1,331 +1,346 @@
/* deflate.h -- internal compression state /* deflate.h -- internal compression state
* Copyright (C) 1995-2004 Jean-loup Gailly * Copyright (C) 1995-2012 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* WARNING: this file should *not* be used by applications. It is /* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h. subject to change. Applications should only use zlib.h.
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
#ifndef DEFLATE_H #ifndef DEFLATE_H
#define DEFLATE_H #define DEFLATE_H
#include "zutil.h" #include "zutil.h"
/* define NO_GZIP when compiling if you want to disable gzip header and /* define NO_GZIP when compiling if you want to disable gzip header and
trailer creation by deflate(). NO_GZIP would be used to avoid linking in trailer creation by deflate(). NO_GZIP would be used to avoid linking in
the crc code when it is not needed. For shared libraries, gzip encoding the crc code when it is not needed. For shared libraries, gzip encoding
should be left enabled. */ should be left enabled. */
#ifndef NO_GZIP #ifndef NO_GZIP
# define GZIP # define GZIP
#endif #endif
/* =========================================================================== /* ===========================================================================
* Internal compression state. * Internal compression state.
*/ */
#define LENGTH_CODES 29 #define LENGTH_CODES 29
/* number of length codes, not counting the special END_BLOCK code */ /* number of length codes, not counting the special END_BLOCK code */
#define LITERALS 256 #define LITERALS 256
/* number of literal bytes 0..255 */ /* number of literal bytes 0..255 */
#define L_CODES (LITERALS+1+LENGTH_CODES) #define L_CODES (LITERALS+1+LENGTH_CODES)
/* number of Literal or Length codes, including the END_BLOCK code */ /* number of Literal or Length codes, including the END_BLOCK code */
#define D_CODES 30 #define D_CODES 30
/* number of distance codes */ /* number of distance codes */
#define BL_CODES 19 #define BL_CODES 19
/* number of codes used to transfer the bit lengths */ /* number of codes used to transfer the bit lengths */
#define HEAP_SIZE (2*L_CODES+1) #define HEAP_SIZE (2*L_CODES+1)
/* maximum heap size */ /* maximum heap size */
#define MAX_BITS 15 #define MAX_BITS 15
/* All codes must not exceed MAX_BITS bits */ /* All codes must not exceed MAX_BITS bits */
#define INIT_STATE 42 #define Buf_size 16
#define EXTRA_STATE 69 /* size of bit buffer in bi_buf */
#define NAME_STATE 73
#define COMMENT_STATE 91 #define INIT_STATE 42
#define HCRC_STATE 103 #define EXTRA_STATE 69
#define BUSY_STATE 113 #define NAME_STATE 73
#define FINISH_STATE 666 #define COMMENT_STATE 91
/* Stream status */ #define HCRC_STATE 103
#define BUSY_STATE 113
#define FINISH_STATE 666
/* Data structure describing a single value and its code string. */ /* Stream status */
typedef struct ct_data_s {
union {
ush freq; /* frequency count */ /* Data structure describing a single value and its code string. */
ush code; /* bit string */ typedef struct ct_data_s {
} fc; union {
union { ush freq; /* frequency count */
ush dad; /* father node in Huffman tree */ ush code; /* bit string */
ush len; /* length of bit string */ } fc;
} dl; union {
} FAR ct_data; ush dad; /* father node in Huffman tree */
ush len; /* length of bit string */
#define Freq fc.freq } dl;
#define Code fc.code } FAR ct_data;
#define Dad dl.dad
#define Len dl.len #define Freq fc.freq
#define Code fc.code
typedef struct static_tree_desc_s static_tree_desc; #define Dad dl.dad
#define Len dl.len
typedef struct tree_desc_s {
ct_data *dyn_tree; /* the dynamic tree */ typedef struct static_tree_desc_s static_tree_desc;
int max_code; /* largest code with non zero frequency */
static_tree_desc *stat_desc; /* the corresponding static tree */ typedef struct tree_desc_s {
} FAR tree_desc; ct_data *dyn_tree; /* the dynamic tree */
int max_code; /* largest code with non zero frequency */
typedef ush Pos; static_tree_desc *stat_desc; /* the corresponding static tree */
typedef Pos FAR Posf; } FAR tree_desc;
typedef unsigned IPos;
typedef ush Pos;
/* A Pos is an index in the character window. We use short instead of int to typedef Pos FAR Posf;
* save space in the various tables. IPos is used only for parameter passing. typedef unsigned IPos;
*/
/* A Pos is an index in the character window. We use short instead of int to
typedef struct internal_state { * save space in the various tables. IPos is used only for parameter passing.
z_streamp strm; /* pointer back to this zlib stream */ */
int status; /* as the name implies */
Bytef *pending_buf; /* output still pending */ typedef struct internal_state {
ulg pending_buf_size; /* size of pending_buf */ z_streamp strm; /* pointer back to this zlib stream */
Bytef *pending_out; /* next pending byte to output to the stream */ int status; /* as the name implies */
uInt pending; /* nb of bytes in the pending buffer */ Bytef *pending_buf; /* output still pending */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ ulg pending_buf_size; /* size of pending_buf */
gz_headerp gzhead; /* gzip header information to write */ Bytef *pending_out; /* next pending byte to output to the stream */
uInt gzindex; /* where in extra, name, or comment */ uInt pending; /* nb of bytes in the pending buffer */
Byte method; /* STORED (for zip only) or DEFLATED */ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
int last_flush; /* value of flush param for previous deflate call */ gz_headerp gzhead; /* gzip header information to write */
uInt gzindex; /* where in extra, name, or comment */
/* used by deflate.c: */ Byte method; /* can only be DEFLATED */
int last_flush; /* value of flush param for previous deflate call */
uInt w_size; /* LZ77 window size (32K by default) */
uInt w_bits; /* log2(w_size) (8..16) */ /* used by deflate.c: */
uInt w_mask; /* w_size - 1 */
uInt w_size; /* LZ77 window size (32K by default) */
Bytef *window; uInt w_bits; /* log2(w_size) (8..16) */
/* Sliding window. Input bytes are read into the second half of the window, uInt w_mask; /* w_size - 1 */
* and move to the first half later to keep a dictionary of at least wSize
* bytes. With this organization, matches are limited to a distance of Bytef *window;
* wSize-MAX_MATCH bytes, but this ensures that IO is always /* Sliding window. Input bytes are read into the second half of the window,
* performed with a length multiple of the block size. Also, it limits * and move to the first half later to keep a dictionary of at least wSize
* the window size to 64K, which is quite useful on MSDOS. * bytes. With this organization, matches are limited to a distance of
* To do: use the user input buffer as sliding window. * wSize-MAX_MATCH bytes, but this ensures that IO is always
*/ * performed with a length multiple of the block size. Also, it limits
* the window size to 64K, which is quite useful on MSDOS.
ulg window_size; * To do: use the user input buffer as sliding window.
/* Actual size of window: 2*wSize, except when the user input buffer */
* is directly used as sliding window.
*/ ulg window_size;
/* Actual size of window: 2*wSize, except when the user input buffer
Posf *prev; * is directly used as sliding window.
/* Link to older string with same hash index. To limit the size of this */
* array to 64K, this link is maintained only for the last 32K strings.
* An index in this array is thus a window index modulo 32K. Posf *prev;
*/ /* Link to older string with same hash index. To limit the size of this
* array to 64K, this link is maintained only for the last 32K strings.
Posf *head; /* Heads of the hash chains or NIL. */ * An index in this array is thus a window index modulo 32K.
*/
uInt ins_h; /* hash index of string to be inserted */
uInt hash_size; /* number of elements in hash table */ Posf *head; /* Heads of the hash chains or NIL. */
uInt hash_bits; /* log2(hash_size) */
uInt hash_mask; /* hash_size-1 */ uInt ins_h; /* hash index of string to be inserted */
uInt hash_size; /* number of elements in hash table */
uInt hash_shift; uInt hash_bits; /* log2(hash_size) */
/* Number of bits by which ins_h must be shifted at each input uInt hash_mask; /* hash_size-1 */
* step. It must be such that after MIN_MATCH steps, the oldest
* byte no longer takes part in the hash key, that is: uInt hash_shift;
* hash_shift * MIN_MATCH >= hash_bits /* Number of bits by which ins_h must be shifted at each input
*/ * step. It must be such that after MIN_MATCH steps, the oldest
* byte no longer takes part in the hash key, that is:
long block_start; * hash_shift * MIN_MATCH >= hash_bits
/* Window position at the beginning of the current output block. Gets */
* negative when the window is moved backwards.
*/ long block_start;
/* Window position at the beginning of the current output block. Gets
uInt match_length; /* length of best match */ * negative when the window is moved backwards.
IPos prev_match; /* previous match */ */
int match_available; /* set if previous match exists */
uInt strstart; /* start of string to insert */ uInt match_length; /* length of best match */
uInt match_start; /* start of matching string */ IPos prev_match; /* previous match */
uInt lookahead; /* number of valid bytes ahead in window */ int match_available; /* set if previous match exists */
uInt strstart; /* start of string to insert */
uInt prev_length; uInt match_start; /* start of matching string */
/* Length of the best match at previous step. Matches not greater than this uInt lookahead; /* number of valid bytes ahead in window */
* are discarded. This is used in the lazy match evaluation.
*/ uInt prev_length;
/* Length of the best match at previous step. Matches not greater than this
uInt max_chain_length; * are discarded. This is used in the lazy match evaluation.
/* To speed up deflation, hash chains are never searched beyond this */
* length. A higher limit improves compression ratio but degrades the
* speed. uInt max_chain_length;
*/ /* To speed up deflation, hash chains are never searched beyond this
* length. A higher limit improves compression ratio but degrades the
uInt max_lazy_match; * speed.
/* Attempt to find a better match only when the current match is strictly */
* smaller than this value. This mechanism is used only for compression
* levels >= 4. uInt max_lazy_match;
*/ /* Attempt to find a better match only when the current match is strictly
# define max_insert_length max_lazy_match * smaller than this value. This mechanism is used only for compression
/* Insert new strings in the hash table only if the match length is not * levels >= 4.
* greater than this length. This saves time but degrades compression. */
* max_insert_length is used only for compression levels <= 3. # define max_insert_length max_lazy_match
*/ /* Insert new strings in the hash table only if the match length is not
* greater than this length. This saves time but degrades compression.
int level; /* compression level (1..9) */ * max_insert_length is used only for compression levels <= 3.
int strategy; /* favor or force Huffman coding*/ */
uInt good_match; int level; /* compression level (1..9) */
/* Use a faster search when the previous match is longer than this */ int strategy; /* favor or force Huffman coding*/
int nice_match; /* Stop searching when current match exceeds this */ uInt good_match;
/* Use a faster search when the previous match is longer than this */
/* used by trees.c: */
/* Didn't use ct_data typedef below to supress compiler warning */ int nice_match; /* Stop searching when current match exceeds this */
struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ /* used by trees.c: */
struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ /* Didn't use ct_data typedef below to suppress compiler warning */
struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
struct tree_desc_s l_desc; /* desc. for literal tree */ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
struct tree_desc_s d_desc; /* desc. for distance tree */ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
struct tree_desc_s bl_desc; /* desc. for bit length tree */
struct tree_desc_s l_desc; /* desc. for literal tree */
ush bl_count[MAX_BITS+1]; struct tree_desc_s d_desc; /* desc. for distance tree */
/* number of codes at each bit length for an optimal tree */ struct tree_desc_s bl_desc; /* desc. for bit length tree */
int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ ush bl_count[MAX_BITS+1];
int heap_len; /* number of elements in the heap */ /* number of codes at each bit length for an optimal tree */
int heap_max; /* element of largest frequency */
/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
* The same heap array is used to build all trees. int heap_len; /* number of elements in the heap */
*/ int heap_max; /* element of largest frequency */
/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
uch depth[2*L_CODES+1]; * The same heap array is used to build all trees.
/* Depth of each subtree used as tie breaker for trees of equal frequency */
*/
uch depth[2*L_CODES+1];
uchf *l_buf; /* buffer for literals or lengths */ /* Depth of each subtree used as tie breaker for trees of equal frequency
*/
uInt lit_bufsize;
/* Size of match buffer for literals/lengths. There are 4 reasons for uchf *l_buf; /* buffer for literals or lengths */
* limiting lit_bufsize to 64K:
* - frequencies can be kept in 16 bit counters uInt lit_bufsize;
* - if compression is not successful for the first block, all input /* Size of match buffer for literals/lengths. There are 4 reasons for
* data is still in the window so we can still emit a stored block even * limiting lit_bufsize to 64K:
* when input comes from standard input. (This can also be done for * - frequencies can be kept in 16 bit counters
* all blocks if lit_bufsize is not greater than 32K.) * - if compression is not successful for the first block, all input
* - if compression is not successful for a file smaller than 64K, we can * data is still in the window so we can still emit a stored block even
* even emit a stored file instead of a stored block (saving 5 bytes). * when input comes from standard input. (This can also be done for
* This is applicable only for zip (not gzip or zlib). * all blocks if lit_bufsize is not greater than 32K.)
* - creating new Huffman trees less frequently may not provide fast * - if compression is not successful for a file smaller than 64K, we can
* adaptation to changes in the input data statistics. (Take for * even emit a stored file instead of a stored block (saving 5 bytes).
* example a binary file with poorly compressible code followed by * This is applicable only for zip (not gzip or zlib).
* a highly compressible string table.) Smaller buffer sizes give * - creating new Huffman trees less frequently may not provide fast
* fast adaptation but have of course the overhead of transmitting * adaptation to changes in the input data statistics. (Take for
* trees more frequently. * example a binary file with poorly compressible code followed by
* - I can't count above 4 * a highly compressible string table.) Smaller buffer sizes give
*/ * fast adaptation but have of course the overhead of transmitting
* trees more frequently.
uInt last_lit; /* running index in l_buf */ * - I can't count above 4
*/
ushf *d_buf;
/* Buffer for distances. To simplify the code, d_buf and l_buf have uInt last_lit; /* running index in l_buf */
* the same number of elements. To use different lengths, an extra flag
* array would be necessary. ushf *d_buf;
*/ /* Buffer for distances. To simplify the code, d_buf and l_buf have
* the same number of elements. To use different lengths, an extra flag
ulg opt_len; /* bit length of current block with optimal trees */ * array would be necessary.
ulg static_len; /* bit length of current block with static trees */ */
uInt matches; /* number of string matches in current block */
int last_eob_len; /* bit length of EOB code for last block */ ulg opt_len; /* bit length of current block with optimal trees */
ulg static_len; /* bit length of current block with static trees */
#ifdef DEBUG uInt matches; /* number of string matches in current block */
ulg compressed_len; /* total bit length of compressed file mod 2^32 */ uInt insert; /* bytes at end of window left to insert */
ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
#endif #ifdef DEBUG
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
ush bi_buf; ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
/* Output buffer. bits are inserted starting at the bottom (least #endif
* significant bits).
*/ ush bi_buf;
int bi_valid; /* Output buffer. bits are inserted starting at the bottom (least
/* Number of valid bits in bi_buf. All bits above the last valid bit * significant bits).
* are always zero. */
*/ int bi_valid;
/* Number of valid bits in bi_buf. All bits above the last valid bit
} FAR deflate_state; * are always zero.
*/
/* Output a byte on the stream.
* IN assertion: there is enough room in pending_buf. ulg high_water;
*/ /* High water mark offset in window for initialized bytes -- bytes above
#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} * this are set to zero in order to avoid memory check warnings when
* longest match routines access bytes past the input. This is then
* updated to the new high water mark.
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) */
/* Minimum amount of lookahead, except at the end of the input file.
* See deflate.c for comments about the MIN_MATCH+1. } FAR deflate_state;
*/
/* Output a byte on the stream.
#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) * IN assertion: there is enough room in pending_buf.
/* In order to simplify the code, particularly on 16 bit machines, match */
* distances are limited to MAX_DIST instead of WSIZE. #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
*/
/* in trees.c */ #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
void _tr_init OF((deflate_state *s)); /* Minimum amount of lookahead, except at the end of the input file.
int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); * See deflate.c for comments about the MIN_MATCH+1.
void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, */
int eof));
void _tr_align OF((deflate_state *s)); #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, /* In order to simplify the code, particularly on 16 bit machines, match
int eof)); * distances are limited to MAX_DIST instead of WSIZE.
*/
#define d_code(dist) \
((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) #define WIN_INIT MAX_MATCH
/* Mapping from a distance to a distance code. dist is the distance - 1 and /* Number of bytes after end of data in window to initialize in order to avoid
* must not have side effects. _dist_code[256] and _dist_code[257] are never memory checker errors from longest match routines */
* used.
*/ /* in trees.c */
void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
#ifndef DEBUG int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
/* Inline versions of _tr_tally for speed: */ void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
ulg stored_len, int last));
#if defined(GEN_TREES_H) || !defined(STDC) void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
extern uch _length_code[]; void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
extern uch _dist_code[]; void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
#else ulg stored_len, int last));
extern const uch _length_code[];
extern const uch _dist_code[]; #define d_code(dist) \
#endif ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
/* Mapping from a distance to a distance code. dist is the distance - 1 and
# define _tr_tally_lit(s, c, flush) \ * must not have side effects. _dist_code[256] and _dist_code[257] are never
{ uch cc = (c); \ * used.
s->d_buf[s->last_lit] = 0; \ */
s->l_buf[s->last_lit++] = cc; \
s->dyn_ltree[cc].Freq++; \ #ifndef DEBUG
flush = (s->last_lit == s->lit_bufsize-1); \ /* Inline versions of _tr_tally for speed: */
}
# define _tr_tally_dist(s, distance, length, flush) \ #if defined(GEN_TREES_H) || !defined(STDC)
{ uch len = (length); \ extern uch ZLIB_INTERNAL _length_code[];
ush dist = (distance); \ extern uch ZLIB_INTERNAL _dist_code[];
s->d_buf[s->last_lit] = dist; \ #else
s->l_buf[s->last_lit++] = len; \ extern const uch ZLIB_INTERNAL _length_code[];
dist--; \ extern const uch ZLIB_INTERNAL _dist_code[];
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ #endif
s->dyn_dtree[d_code(dist)].Freq++; \
flush = (s->last_lit == s->lit_bufsize-1); \ # define _tr_tally_lit(s, c, flush) \
} { uch cc = (c); \
#else s->d_buf[s->last_lit] = 0; \
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) s->l_buf[s->last_lit++] = cc; \
# define _tr_tally_dist(s, distance, length, flush) \ s->dyn_ltree[cc].Freq++; \
flush = _tr_tally(s, distance, length) flush = (s->last_lit == s->lit_bufsize-1); \
#endif }
# define _tr_tally_dist(s, distance, length, flush) \
#endif /* DEFLATE_H */ { uch len = (length); \
ush dist = (distance); \
s->d_buf[s->last_lit] = dist; \
s->l_buf[s->last_lit++] = len; \
dist--; \
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
s->dyn_dtree[d_code(dist)].Freq++; \
flush = (s->last_lit == s->lit_bufsize-1); \
}
#else
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
# define _tr_tally_dist(s, distance, length, flush) \
flush = _tr_tally(s, distance, length)
#endif
#endif /* DEFLATE_H */

25
public/zlib/gzclose.c Normal file
View File

@ -0,0 +1,25 @@
/* gzclose.c -- zlib gzclose() function
* Copyright (C) 2004, 2010 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
/* gzclose() is in a separate file so that it is linked in only if it is used.
That way the other gzclose functions can be used instead to avoid linking in
unneeded compression or decompression routines. */
int ZEXPORT gzclose(file)
gzFile file;
{
#ifndef NO_GZCOMPRESS
gz_statep state;
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
#else
return gzclose_r(file);
#endif
}

211
public/zlib/gzguts.h Normal file
View File

@ -0,0 +1,211 @@
/* gzguts.h -- zlib internal header definitions for gz* operations
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#ifdef _LARGEFILE64_SOURCE
# ifndef _LARGEFILE_SOURCE
# define _LARGEFILE_SOURCE 1
# endif
# ifdef _FILE_OFFSET_BITS
# undef _FILE_OFFSET_BITS
# endif
#endif
#ifdef HAVE_HIDDEN
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
#else
# define ZLIB_INTERNAL
#endif
#include <stdio.h>
#include "zlib.h"
#ifdef STDC
# include <string.h>
# include <stdlib.h>
# include <limits.h>
#endif
#include <fcntl.h>
#ifdef _WIN32
# include <stddef.h>
#else
# include <unistd.h>
#endif
#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
# include <io.h>
#endif
#ifdef WINAPI_FAMILY
# define open _open
# define read _read
# define write _write
# define close _close
#endif
#ifdef NO_DEFLATE /* for compatibility with old definition */
# define NO_GZCOMPRESS
#endif
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#if defined(__CYGWIN__)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#ifndef HAVE_VSNPRINTF
# ifdef MSDOS
/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
but for now we just assume it doesn't. */
# define NO_vsnprintf
# endif
# ifdef __TURBOC__
# define NO_vsnprintf
# endif
# ifdef WIN32
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
# if !defined(vsnprintf) && !defined(NO_vsnprintf)
# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
# define vsnprintf _vsnprintf
# endif
# endif
# endif
# ifdef __SASC
# define NO_vsnprintf
# endif
# ifdef VMS
# define NO_vsnprintf
# endif
# ifdef __OS400__
# define NO_vsnprintf
# endif
# ifdef __MVS__
# define NO_vsnprintf
# endif
#endif
/* unlike snprintf (which is required in C99, yet still not supported by
Microsoft more than a decade later!), _snprintf does not guarantee null
termination of the result -- however this is only used in gzlib.c where
the result is assured to fit in the space provided */
#ifdef _MSC_VER
# define snprintf _snprintf
#endif
#ifndef local
# define local static
#endif
/* compile with -Dlocal if your debugger can't find static symbols */
/* gz* functions always use library allocation functions */
#ifndef STDC
extern voidp malloc OF((uInt size));
extern void free OF((voidpf ptr));
#endif
/* get errno and strerror definition */
#if defined UNDER_CE
# include <windows.h>
# define zstrerror() gz_strwinerror((DWORD)GetLastError())
#else
# ifndef NO_STRERROR
# include <errno.h>
# define zstrerror() strerror(errno)
# else
# define zstrerror() "stdio error (consult errno)"
# endif
#endif
/* provide prototypes for these when building zlib without LFS */
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
#endif
/* default memLevel */
#if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8
#else
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
#endif
/* default i/o buffer size -- double this for output when reading (this and
twice this must be able to fit in an unsigned type) */
#define GZBUFSIZE 8192
/* gzip modes, also provide a little integrity check on the passed structure */
#define GZ_NONE 0
#define GZ_READ 7247
#define GZ_WRITE 31153
#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
/* values for gz_state how */
#define LOOK 0 /* look for a gzip header */
#define COPY 1 /* copy input directly */
#define GZIP 2 /* decompress a gzip stream */
/* internal gzip file state data structure */
typedef struct {
/* exposed contents for gzgetc() macro */
struct gzFile_s x; /* "x" for exposed */
/* x.have: number of bytes available at x.next */
/* x.next: next output data to deliver or write */
/* x.pos: current position in uncompressed data */
/* used for both reading and writing */
int mode; /* see gzip modes above */
int fd; /* file descriptor */
char *path; /* path or fd for error messages */
unsigned size; /* buffer size, zero if not allocated yet */
unsigned want; /* requested buffer size, default is GZBUFSIZE */
unsigned char *in; /* input buffer */
unsigned char *out; /* output buffer (double-sized when reading) */
int direct; /* 0 if processing gzip, 1 if transparent */
/* just for reading */
int how; /* 0: get header, 1: copy, 2: decompress */
z_off64_t start; /* where the gzip data started, for rewinding */
int eof; /* true if end of input file reached */
int past; /* true if read requested past end */
/* just for writing */
int level; /* compression level */
int strategy; /* compression strategy */
/* seek request */
z_off64_t skip; /* amount to skip (already rewound if backwards) */
int seek; /* true if seek request pending */
/* error information */
int err; /* error code */
char *msg; /* error message */
/* zlib inflate or deflate stream */
z_stream strm; /* stream structure in-place (not a pointer) */
} gz_state;
typedef gz_state FAR *gz_statep;
/* shared functions */
void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
#if defined UNDER_CE
char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
#endif
/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
value -- needed when comparing unsigned to z_off64_t, which is signed
(possible z_off64_t types off_t, off64_t, and long are all signed) */
#ifdef INT_MAX
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
#else
unsigned ZLIB_INTERNAL gz_intmax OF((void));
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
#endif

634
public/zlib/gzlib.c Normal file
View File

@ -0,0 +1,634 @@
/* gzlib.c -- zlib functions common to reading and writing gzip files
* Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
#if defined(_WIN32) && !defined(__BORLANDC__)
# define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
# define LSEEK lseek64
#else
# define LSEEK lseek
#endif
#endif
/* Local functions */
local void gz_reset OF((gz_statep));
local gzFile gz_open OF((const void *, int, const char *));
#if defined UNDER_CE
/* Map the Windows error number in ERROR to a locale-dependent error message
string and return a pointer to it. Typically, the values for ERROR come
from GetLastError.
The string pointed to shall not be modified by the application, but may be
overwritten by a subsequent call to gz_strwinerror
The gz_strwinerror function does not change the current setting of
GetLastError. */
char ZLIB_INTERNAL *gz_strwinerror (error)
DWORD error;
{
static char buf[1024];
wchar_t *msgbuf;
DWORD lasterr = GetLastError();
DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
error,
0, /* Default language */
(LPVOID)&msgbuf,
0,
NULL);
if (chars != 0) {
/* If there is an \r\n appended, zap it. */
if (chars >= 2
&& msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
chars -= 2;
msgbuf[chars] = 0;
}
if (chars > sizeof (buf) - 1) {
chars = sizeof (buf) - 1;
msgbuf[chars] = 0;
}
wcstombs(buf, msgbuf, chars + 1);
LocalFree(msgbuf);
}
else {
sprintf(buf, "unknown win32 error (%ld)", error);
}
SetLastError(lasterr);
return buf;
}
#endif /* UNDER_CE */
/* Reset gzip file state */
local void gz_reset(state)
gz_statep state;
{
state->x.have = 0; /* no output data available */
if (state->mode == GZ_READ) { /* for reading ... */
state->eof = 0; /* not at end of file */
state->past = 0; /* have not read past end yet */
state->how = LOOK; /* look for gzip header */
}
state->seek = 0; /* no seek request pending */
gz_error(state, Z_OK, NULL); /* clear error */
state->x.pos = 0; /* no uncompressed data yet */
state->strm.avail_in = 0; /* no input data yet */
}
/* Open a gzip file either by name or file descriptor. */
local gzFile gz_open(path, fd, mode)
const void *path;
int fd;
const char *mode;
{
gz_statep state;
size_t len;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
#endif
#ifdef O_EXCL
int exclusive = 0;
#endif
/* check input */
if (path == NULL)
return NULL;
/* allocate gzFile structure to return */
state = (gz_statep)malloc(sizeof(gz_state));
if (state == NULL)
return NULL;
state->size = 0; /* no buffers allocated yet */
state->want = GZBUFSIZE; /* requested buffer size */
state->msg = NULL; /* no error message yet */
/* interpret mode */
state->mode = GZ_NONE;
state->level = Z_DEFAULT_COMPRESSION;
state->strategy = Z_DEFAULT_STRATEGY;
state->direct = 0;
while (*mode) {
if (*mode >= '0' && *mode <= '9')
state->level = *mode - '0';
else
switch (*mode) {
case 'r':
state->mode = GZ_READ;
break;
#ifndef NO_GZCOMPRESS
case 'w':
state->mode = GZ_WRITE;
break;
case 'a':
state->mode = GZ_APPEND;
break;
#endif
case '+': /* can't read and write at the same time */
free(state);
return NULL;
case 'b': /* ignore -- will request binary anyway */
break;
#ifdef O_CLOEXEC
case 'e':
cloexec = 1;
break;
#endif
#ifdef O_EXCL
case 'x':
exclusive = 1;
break;
#endif
case 'f':
state->strategy = Z_FILTERED;
break;
case 'h':
state->strategy = Z_HUFFMAN_ONLY;
break;
case 'R':
state->strategy = Z_RLE;
break;
case 'F':
state->strategy = Z_FIXED;
break;
case 'T':
state->direct = 1;
break;
default: /* could consider as an error, but just ignore */
;
}
mode++;
}
/* must provide an "r", "w", or "a" */
if (state->mode == GZ_NONE) {
free(state);
return NULL;
}
/* can't force transparent read */
if (state->mode == GZ_READ) {
if (state->direct) {
free(state);
return NULL;
}
state->direct = 1; /* for empty file */
}
/* save the path name for error messages */
#ifdef _WIN32
if (fd == -2) {
len = wcstombs(NULL, path, 0);
if (len == (size_t)-1)
len = 0;
}
else
#endif
len = strlen((const char *)path);
state->path = (char *)malloc(len + 1);
if (state->path == NULL) {
free(state);
return NULL;
}
#ifdef _WIN32
if (fd == -2)
if (len)
wcstombs(state->path, path, len + 1);
else
*(state->path) = 0;
else
#endif
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
snprintf(state->path, len + 1, "%s", (const char *)path);
#else
strcpy(state->path, path);
#endif
/* compute the flags for open() */
oflag =
#ifdef O_LARGEFILE
O_LARGEFILE |
#endif
#ifdef O_BINARY
O_BINARY |
#endif
#ifdef O_CLOEXEC
(cloexec ? O_CLOEXEC : 0) |
#endif
(state->mode == GZ_READ ?
O_RDONLY :
(O_WRONLY | O_CREAT |
#ifdef O_EXCL
(exclusive ? O_EXCL : 0) |
#endif
(state->mode == GZ_WRITE ?
O_TRUNC :
O_APPEND)));
/* open the file with the appropriate flags (or just use fd) */
state->fd = fd > -1 ? fd : (
#ifdef _WIN32
fd == -2 ? _wopen(path, oflag, 0666) :
#endif
open((const char *)path, oflag, 0666));
if (state->fd == -1) {
free(state->path);
free(state);
return NULL;
}
if (state->mode == GZ_APPEND)
state->mode = GZ_WRITE; /* simplify later checks */
/* save the current position for rewinding (only if reading) */
if (state->mode == GZ_READ) {
state->start = LSEEK(state->fd, 0, SEEK_CUR);
if (state->start == -1) state->start = 0;
}
/* initialize stream */
gz_reset(state);
/* return stream */
return (gzFile)state;
}
/* -- see zlib.h -- */
gzFile ZEXPORT gzopen(path, mode)
const char *path;
const char *mode;
{
return gz_open(path, -1, mode);
}
/* -- see zlib.h -- */
gzFile ZEXPORT gzopen64(path, mode)
const char *path;
const char *mode;
{
return gz_open(path, -1, mode);
}
/* -- see zlib.h -- */
gzFile ZEXPORT gzdopen(fd, mode)
int fd;
const char *mode;
{
char *path; /* identifier for error messages */
gzFile gz;
if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
return NULL;
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
#else
sprintf(path, "<fd:%d>", fd); /* for debugging */
#endif
gz = gz_open(path, fd, mode);
free(path);
return gz;
}
/* -- see zlib.h -- */
#ifdef _WIN32
gzFile ZEXPORT gzopen_w(path, mode)
const wchar_t *path;
const char *mode;
{
return gz_open(path, -2, mode);
}
#endif
/* -- see zlib.h -- */
int ZEXPORT gzbuffer(file, size)
gzFile file;
unsigned size;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* make sure we haven't already allocated memory */
if (state->size != 0)
return -1;
/* check and set requested size */
if (size < 2)
size = 2; /* need two bytes to check magic header */
state->want = size;
return 0;
}
/* -- see zlib.h -- */
int ZEXPORT gzrewind(file)
gzFile file;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* back up and start over */
if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
return -1;
gz_reset(state);
return 0;
}
/* -- see zlib.h -- */
z_off64_t ZEXPORT gzseek64(file, offset, whence)
gzFile file;
z_off64_t offset;
int whence;
{
unsigned n;
z_off64_t ret;
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* check that there's no error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
return -1;
/* can only seek from start or relative to current position */
if (whence != SEEK_SET && whence != SEEK_CUR)
return -1;
/* normalize offset to a SEEK_CUR specification */
if (whence == SEEK_SET)
offset -= state->x.pos;
else if (state->seek)
offset += state->skip;
state->seek = 0;
/* if within raw area while reading, just go there */
if (state->mode == GZ_READ && state->how == COPY &&
state->x.pos + offset >= 0) {
ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
if (ret == -1)
return -1;
state->x.have = 0;
state->eof = 0;
state->past = 0;
state->seek = 0;
gz_error(state, Z_OK, NULL);
state->strm.avail_in = 0;
state->x.pos += offset;
return state->x.pos;
}
/* calculate skip amount, rewinding if needed for back seek when reading */
if (offset < 0) {
if (state->mode != GZ_READ) /* writing -- can't go backwards */
return -1;
offset += state->x.pos;
if (offset < 0) /* before start of file! */
return -1;
if (gzrewind(file) == -1) /* rewind, then skip to offset */
return -1;
}
/* if reading, skip what's in output buffer (one less gzgetc() check) */
if (state->mode == GZ_READ) {
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
(unsigned)offset : state->x.have;
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
offset -= n;
}
/* request skip (if not zero) */
if (offset) {
state->seek = 1;
state->skip = offset;
}
return state->x.pos + offset;
}
/* -- see zlib.h -- */
z_off_t ZEXPORT gzseek(file, offset, whence)
gzFile file;
z_off_t offset;
int whence;
{
z_off64_t ret;
ret = gzseek64(file, (z_off64_t)offset, whence);
return ret == (z_off_t)ret ? (z_off_t)ret : -1;
}
/* -- see zlib.h -- */
z_off64_t ZEXPORT gztell64(file)
gzFile file;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* return position */
return state->x.pos + (state->seek ? state->skip : 0);
}
/* -- see zlib.h -- */
z_off_t ZEXPORT gztell(file)
gzFile file;
{
z_off64_t ret;
ret = gztell64(file);
return ret == (z_off_t)ret ? (z_off_t)ret : -1;
}
/* -- see zlib.h -- */
z_off64_t ZEXPORT gzoffset64(file)
gzFile file;
{
z_off64_t offset;
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* compute and return effective offset in file */
offset = LSEEK(state->fd, 0, SEEK_CUR);
if (offset == -1)
return -1;
if (state->mode == GZ_READ) /* reading */
offset -= state->strm.avail_in; /* don't count buffered input */
return offset;
}
/* -- see zlib.h -- */
z_off_t ZEXPORT gzoffset(file)
gzFile file;
{
z_off64_t ret;
ret = gzoffset64(file);
return ret == (z_off_t)ret ? (z_off_t)ret : -1;
}
/* -- see zlib.h -- */
int ZEXPORT gzeof(file)
gzFile file;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return 0;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return 0;
/* return end-of-file state */
return state->mode == GZ_READ ? state->past : 0;
}
/* -- see zlib.h -- */
const char * ZEXPORT gzerror(file, errnum)
gzFile file;
int *errnum;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return NULL;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return NULL;
/* return error information */
if (errnum != NULL)
*errnum = state->err;
return state->err == Z_MEM_ERROR ? "out of memory" :
(state->msg == NULL ? "" : state->msg);
}
/* -- see zlib.h -- */
void ZEXPORT gzclearerr(file)
gzFile file;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return;
/* clear error and end-of-file */
if (state->mode == GZ_READ) {
state->eof = 0;
state->past = 0;
}
gz_error(state, Z_OK, NULL);
}
/* Create an error message in allocated memory and set state->err and
state->msg accordingly. Free any previous error message already there. Do
not try to free or allocate space if the error is Z_MEM_ERROR (out of
memory). Simply save the error message as a static string. If there is an
allocation failure constructing the error message, then convert the error to
out of memory. */
void ZLIB_INTERNAL gz_error(state, err, msg)
gz_statep state;
int err;
const char *msg;
{
/* free previously allocated message and clear */
if (state->msg != NULL) {
if (state->err != Z_MEM_ERROR)
free(state->msg);
state->msg = NULL;
}
/* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
if (err != Z_OK && err != Z_BUF_ERROR)
state->x.have = 0;
/* set error code, and if no message, then done */
state->err = err;
if (msg == NULL)
return;
/* for an out of memory error, return literal string when requested */
if (err == Z_MEM_ERROR)
return;
/* construct error message with path */
if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
NULL) {
state->err = Z_MEM_ERROR;
return;
}
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
"%s%s%s", state->path, ": ", msg);
#else
strcpy(state->msg, state->path);
strcat(state->msg, ": ");
strcat(state->msg, msg);
#endif
return;
}
#ifndef INT_MAX
/* portably return maximum value for an int (when limits.h presumed not
available) -- we need to do this to cover cases where 2's complement not
used, since C standard permits 1's complement and sign-bit representations,
otherwise we could just use ((unsigned)-1) >> 1 */
unsigned ZLIB_INTERNAL gz_intmax()
{
unsigned p, q;
p = 1;
do {
q = p;
p <<= 1;
p++;
} while (p > q);
return q >> 1;
}
#endif

594
public/zlib/gzread.c Normal file
View File

@ -0,0 +1,594 @@
/* gzread.c -- zlib functions for reading gzip files
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
/* Local functions */
local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
local int gz_avail OF((gz_statep));
local int gz_look OF((gz_statep));
local int gz_decomp OF((gz_statep));
local int gz_fetch OF((gz_statep));
local int gz_skip OF((gz_statep, z_off64_t));
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
state->fd, and update state->eof, state->err, and state->msg as appropriate.
This function needs to loop on read(), since read() is not guaranteed to
read the number of bytes requested, depending on the type of descriptor. */
local int gz_load(state, buf, len, have)
gz_statep state;
unsigned char *buf;
unsigned len;
unsigned *have;
{
int ret;
*have = 0;
do {
ret = read(state->fd, buf + *have, len - *have);
if (ret <= 0)
break;
*have += ret;
} while (*have < len);
if (ret < 0) {
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
if (ret == 0)
state->eof = 1;
return 0;
}
/* Load up input buffer and set eof flag if last data loaded -- return -1 on
error, 0 otherwise. Note that the eof flag is set when the end of the input
file is reached, even though there may be unused data in the buffer. Once
that data has been used, no more attempts will be made to read the file.
If strm->avail_in != 0, then the current data is moved to the beginning of
the input buffer, and then the remainder of the buffer is loaded with the
available data from the input file. */
local int gz_avail(state)
gz_statep state;
{
unsigned got;
z_streamp strm = &(state->strm);
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
return -1;
if (state->eof == 0) {
if (strm->avail_in) { /* copy what's there to the start */
unsigned char *p = state->in;
unsigned const char *q = strm->next_in;
unsigned n = strm->avail_in;
do {
*p++ = *q++;
} while (--n);
}
if (gz_load(state, state->in + strm->avail_in,
state->size - strm->avail_in, &got) == -1)
return -1;
strm->avail_in += got;
strm->next_in = state->in;
}
return 0;
}
/* Look for gzip header, set up for inflate or copy. state->x.have must be 0.
If this is the first time in, allocate required memory. state->how will be
left unchanged if there is no more input data available, will be set to COPY
if there is no gzip header and direct copying will be performed, or it will
be set to GZIP for decompression. If direct copying, then leftover input
data from the input buffer will be copied to the output buffer. In that
case, all further file reads will be directly to either the output buffer or
a user buffer. If decompressing, the inflate state will be initialized.
gz_look() will return 0 on success or -1 on failure. */
local int gz_look(state)
gz_statep state;
{
z_streamp strm = &(state->strm);
/* allocate read buffers and inflate memory */
if (state->size == 0) {
/* allocate buffers */
state->in = (unsigned char *)malloc(state->want);
state->out = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL || state->out == NULL) {
if (state->out != NULL)
free(state->out);
if (state->in != NULL)
free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
state->size = state->want;
/* allocate inflate memory */
state->strm.zalloc = Z_NULL;
state->strm.zfree = Z_NULL;
state->strm.opaque = Z_NULL;
state->strm.avail_in = 0;
state->strm.next_in = Z_NULL;
if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */
free(state->out);
free(state->in);
state->size = 0;
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
}
/* get at least the magic bytes in the input buffer */
if (strm->avail_in < 2) {
if (gz_avail(state) == -1)
return -1;
if (strm->avail_in == 0)
return 0;
}
/* look for gzip magic bytes -- if there, do gzip decoding (note: there is
a logical dilemma here when considering the case of a partially written
gzip file, to wit, if a single 31 byte is written, then we cannot tell
whether this is a single-byte file, or just a partially written gzip
file -- for here we assume that if a gzip file is being written, then
the header will be written in a single operation, so that reading a
single byte is sufficient indication that it is not a gzip file) */
if (strm->avail_in > 1 &&
strm->next_in[0] == 31 && strm->next_in[1] == 139) {
inflateReset(strm);
state->how = GZIP;
state->direct = 0;
return 0;
}
/* no gzip header -- if we were decoding gzip before, then this is trailing
garbage. Ignore the trailing garbage and finish. */
if (state->direct == 0) {
strm->avail_in = 0;
state->eof = 1;
state->x.have = 0;
return 0;
}
/* doing raw i/o, copy any leftover input to output -- this assumes that
the output buffer is larger than the input buffer, which also assures
space for gzungetc() */
state->x.next = state->out;
if (strm->avail_in) {
memcpy(state->x.next, strm->next_in, strm->avail_in);
state->x.have = strm->avail_in;
strm->avail_in = 0;
}
state->how = COPY;
state->direct = 1;
return 0;
}
/* Decompress from input to the provided next_out and avail_out in the state.
On return, state->x.have and state->x.next point to the just decompressed
data. If the gzip stream completes, state->how is reset to LOOK to look for
the next gzip stream or raw data, once state->x.have is depleted. Returns 0
on success, -1 on failure. */
local int gz_decomp(state)
gz_statep state;
{
int ret = Z_OK;
unsigned had;
z_streamp strm = &(state->strm);
/* fill output buffer up to end of deflate stream */
had = strm->avail_out;
do {
/* get more input for inflate() */
if (strm->avail_in == 0 && gz_avail(state) == -1)
return -1;
if (strm->avail_in == 0) {
gz_error(state, Z_BUF_ERROR, "unexpected end of file");
break;
}
/* decompress and handle errors */
ret = inflate(strm, Z_NO_FLUSH);
if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
gz_error(state, Z_STREAM_ERROR,
"internal error: inflate stream corrupt");
return -1;
}
if (ret == Z_MEM_ERROR) {
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
gz_error(state, Z_DATA_ERROR,
strm->msg == NULL ? "compressed data error" : strm->msg);
return -1;
}
} while (strm->avail_out && ret != Z_STREAM_END);
/* update available output */
state->x.have = had - strm->avail_out;
state->x.next = strm->next_out - state->x.have;
/* if the gzip stream completed successfully, look for another */
if (ret == Z_STREAM_END)
state->how = LOOK;
/* good decompression */
return 0;
}
/* Fetch data and put it in the output buffer. Assumes state->x.have is 0.
Data is either copied from the input file or decompressed from the input
file depending on state->how. If state->how is LOOK, then a gzip header is
looked for to determine whether to copy or decompress. Returns -1 on error,
otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
end of the input file has been reached and all data has been processed. */
local int gz_fetch(state)
gz_statep state;
{
z_streamp strm = &(state->strm);
do {
switch(state->how) {
case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
if (gz_look(state) == -1)
return -1;
if (state->how == LOOK)
return 0;
break;
case COPY: /* -> COPY */
if (gz_load(state, state->out, state->size << 1, &(state->x.have))
== -1)
return -1;
state->x.next = state->out;
return 0;
case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
strm->avail_out = state->size << 1;
strm->next_out = state->out;
if (gz_decomp(state) == -1)
return -1;
}
} while (state->x.have == 0 && (!state->eof || strm->avail_in));
return 0;
}
/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
local int gz_skip(state, len)
gz_statep state;
z_off64_t len;
{
unsigned n;
/* skip over len bytes or reach end-of-file, whichever comes first */
while (len)
/* skip over whatever is in output buffer */
if (state->x.have) {
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
(unsigned)len : state->x.have;
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
len -= n;
}
/* output buffer empty -- return if we're at the end of the input */
else if (state->eof && state->strm.avail_in == 0)
break;
/* need more data to skip -- load up output buffer */
else {
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
return -1;
}
return 0;
}
/* -- see zlib.h -- */
int ZEXPORT gzread(file, buf, len)
gzFile file;
voidp buf;
unsigned len;
{
unsigned got, n;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* since an int is returned, make sure len fits in one, otherwise return
with an error (this avoids the flaw in the interface) */
if ((int)len < 0) {
gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
return -1;
}
/* if len is zero, avoid unnecessary operations */
if (len == 0)
return 0;
/* process a skip request */
if (state->seek) {
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
return -1;
}
/* get len bytes to buf, or less than len if at the end */
got = 0;
do {
/* first just try copying data from the output buffer */
if (state->x.have) {
n = state->x.have > len ? len : state->x.have;
memcpy(buf, state->x.next, n);
state->x.next += n;
state->x.have -= n;
}
/* output buffer empty -- return if we're at the end of the input */
else if (state->eof && strm->avail_in == 0) {
state->past = 1; /* tried to read past end */
break;
}
/* need output data -- for small len or new stream load up our output
buffer */
else if (state->how == LOOK || len < (state->size << 1)) {
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
return -1;
continue; /* no progress yet -- go back to copy above */
/* the copy above assures that we will leave with space in the
output buffer, allowing at least one gzungetc() to succeed */
}
/* large len -- read directly into user buffer */
else if (state->how == COPY) { /* read directly */
if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
return -1;
}
/* large len -- decompress directly into user buffer */
else { /* state->how == GZIP */
strm->avail_out = len;
strm->next_out = (unsigned char *)buf;
if (gz_decomp(state) == -1)
return -1;
n = state->x.have;
state->x.have = 0;
}
/* update progress */
len -= n;
buf = (char *)buf + n;
got += n;
state->x.pos += n;
} while (len);
/* return number of bytes read into user buffer (will fit in int) */
return (int)got;
}
/* -- see zlib.h -- */
#ifdef Z_PREFIX_SET
# undef z_gzgetc
#else
# undef gzgetc
#endif
int ZEXPORT gzgetc(file)
gzFile file;
{
int ret;
unsigned char buf[1];
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* try output buffer (no need to check for skip request) */
if (state->x.have) {
state->x.have--;
state->x.pos++;
return *(state->x.next)++;
}
/* nothing there -- try gzread() */
ret = gzread(file, buf, 1);
return ret < 1 ? -1 : buf[0];
}
int ZEXPORT gzgetc_(file)
gzFile file;
{
return gzgetc(file);
}
/* -- see zlib.h -- */
int ZEXPORT gzungetc(c, file)
int c;
gzFile file;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* process a skip request */
if (state->seek) {
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
return -1;
}
/* can't push EOF */
if (c < 0)
return -1;
/* if output buffer empty, put byte at end (allows more pushing) */
if (state->x.have == 0) {
state->x.have = 1;
state->x.next = state->out + (state->size << 1) - 1;
state->x.next[0] = c;
state->x.pos--;
state->past = 0;
return c;
}
/* if no room, give up (must have already done a gzungetc()) */
if (state->x.have == (state->size << 1)) {
gz_error(state, Z_DATA_ERROR, "out of room to push characters");
return -1;
}
/* slide output data if needed and insert byte before existing data */
if (state->x.next == state->out) {
unsigned char *src = state->out + state->x.have;
unsigned char *dest = state->out + (state->size << 1);
while (src > state->out)
*--dest = *--src;
state->x.next = dest;
}
state->x.have++;
state->x.next--;
state->x.next[0] = c;
state->x.pos--;
state->past = 0;
return c;
}
/* -- see zlib.h -- */
char * ZEXPORT gzgets(file, buf, len)
gzFile file;
char *buf;
int len;
{
unsigned left, n;
char *str;
unsigned char *eol;
gz_statep state;
/* check parameters and get internal structure */
if (file == NULL || buf == NULL || len < 1)
return NULL;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return NULL;
/* process a skip request */
if (state->seek) {
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
return NULL;
}
/* copy output bytes up to new line or len - 1, whichever comes first --
append a terminating zero to the string (we don't check for a zero in
the contents, let the user worry about that) */
str = buf;
left = (unsigned)len - 1;
if (left) do {
/* assure that something is in the output buffer */
if (state->x.have == 0 && gz_fetch(state) == -1)
return NULL; /* error */
if (state->x.have == 0) { /* end of file */
state->past = 1; /* read past end */
break; /* return what we have */
}
/* look for end-of-line in current output buffer */
n = state->x.have > left ? left : state->x.have;
eol = (unsigned char *)memchr(state->x.next, '\n', n);
if (eol != NULL)
n = (unsigned)(eol - state->x.next) + 1;
/* copy through end-of-line, or remainder if not found */
memcpy(buf, state->x.next, n);
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
left -= n;
buf += n;
} while (left && eol == NULL);
/* return terminated string, or if nothing, end of file */
if (buf == str)
return NULL;
buf[0] = 0;
return str;
}
/* -- see zlib.h -- */
int ZEXPORT gzdirect(file)
gzFile file;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return 0;
state = (gz_statep)file;
/* if the state is not known, but we can find out, then do so (this is
mainly for right after a gzopen() or gzdopen()) */
if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
(void)gz_look(state);
/* return 1 if transparent, 0 if processing a gzip stream */
return state->direct;
}
/* -- see zlib.h -- */
int ZEXPORT gzclose_r(file)
gzFile file;
{
int ret, err;
gz_statep state;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're reading */
if (state->mode != GZ_READ)
return Z_STREAM_ERROR;
/* free memory and close file */
if (state->size) {
inflateEnd(&(state->strm));
free(state->out);
free(state->in);
}
err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
gz_error(state, Z_OK, NULL);
free(state->path);
ret = close(state->fd);
free(state);
return ret ? Z_ERRNO : err;
}

577
public/zlib/gzwrite.c Normal file
View File

@ -0,0 +1,577 @@
/* gzwrite.c -- zlib functions for writing gzip files
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
/* Local functions */
local int gz_init OF((gz_statep));
local int gz_comp OF((gz_statep, int));
local int gz_zero OF((gz_statep, z_off64_t));
/* Initialize state for writing a gzip file. Mark initialization by setting
state->size to non-zero. Return -1 on failure or 0 on success. */
local int gz_init(state)
gz_statep state;
{
int ret;
z_streamp strm = &(state->strm);
/* allocate input buffer */
state->in = (unsigned char *)malloc(state->want);
if (state->in == NULL) {
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
/* only need output buffer and deflate state if compressing */
if (!state->direct) {
/* allocate output buffer */
state->out = (unsigned char *)malloc(state->want);
if (state->out == NULL) {
free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
/* allocate deflate memory, set up for gzip compression */
strm->zalloc = Z_NULL;
strm->zfree = Z_NULL;
strm->opaque = Z_NULL;
ret = deflateInit2(strm, state->level, Z_DEFLATED,
MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
if (ret != Z_OK) {
free(state->out);
free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
}
/* mark state as initialized */
state->size = state->want;
/* initialize write buffer if compressing */
if (!state->direct) {
strm->avail_out = state->size;
strm->next_out = state->out;
state->x.next = strm->next_out;
}
return 0;
}
/* Compress whatever is at avail_in and next_in and write to the output file.
Return -1 if there is an error writing to the output file, otherwise 0.
flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
then the deflate() state is reset to start a new gzip stream. If gz->direct
is true, then simply write to the output file without compressing, and
ignore flush. */
local int gz_comp(state, flush)
gz_statep state;
int flush;
{
int ret, got;
unsigned have;
z_streamp strm = &(state->strm);
/* allocate memory if this is the first time through */
if (state->size == 0 && gz_init(state) == -1)
return -1;
/* write directly if requested */
if (state->direct) {
got = write(state->fd, strm->next_in, strm->avail_in);
if (got < 0 || (unsigned)got != strm->avail_in) {
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
strm->avail_in = 0;
return 0;
}
/* run deflate() on provided input until it produces no more output */
ret = Z_OK;
do {
/* write out current buffer contents if full, or if flushing, but if
doing Z_FINISH then don't write until we get to Z_STREAM_END */
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
(flush != Z_FINISH || ret == Z_STREAM_END))) {
have = (unsigned)(strm->next_out - state->x.next);
if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
(unsigned)got != have)) {
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
if (strm->avail_out == 0) {
strm->avail_out = state->size;
strm->next_out = state->out;
}
state->x.next = strm->next_out;
}
/* compress */
have = strm->avail_out;
ret = deflate(strm, flush);
if (ret == Z_STREAM_ERROR) {
gz_error(state, Z_STREAM_ERROR,
"internal error: deflate stream corrupt");
return -1;
}
have -= strm->avail_out;
} while (have);
/* if that completed a deflate stream, allow another to start */
if (flush == Z_FINISH)
deflateReset(strm);
/* all done, no errors */
return 0;
}
/* Compress len zeros to output. Return -1 on error, 0 on success. */
local int gz_zero(state, len)
gz_statep state;
z_off64_t len;
{
int first;
unsigned n;
z_streamp strm = &(state->strm);
/* consume whatever's left in the input buffer */
if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return -1;
/* compress len zeros (len guaranteed > 0) */
first = 1;
while (len) {
n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
(unsigned)len : state->size;
if (first) {
memset(state->in, 0, n);
first = 0;
}
strm->avail_in = n;
strm->next_in = state->in;
state->x.pos += n;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return -1;
len -= n;
}
return 0;
}
/* -- see zlib.h -- */
int ZEXPORT gzwrite(file, buf, len)
gzFile file;
voidpc buf;
unsigned len;
{
unsigned put = len;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return 0;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return 0;
/* since an int is returned, make sure len fits in one, otherwise return
with an error (this avoids the flaw in the interface) */
if ((int)len < 0) {
gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
return 0;
}
/* if len is zero, avoid unnecessary operations */
if (len == 0)
return 0;
/* allocate memory if this is the first time through */
if (state->size == 0 && gz_init(state) == -1)
return 0;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return 0;
}
/* for small len, copy to input buffer, otherwise compress directly */
if (len < state->size) {
/* copy to input buffer, compress when full */
do {
unsigned have, copy;
if (strm->avail_in == 0)
strm->next_in = state->in;
have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
copy = state->size - have;
if (copy > len)
copy = len;
memcpy(state->in + have, buf, copy);
strm->avail_in += copy;
state->x.pos += copy;
buf = (const char *)buf + copy;
len -= copy;
if (len && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
} while (len);
}
else {
/* consume whatever's left in the input buffer */
if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* directly compress user buffer to file */
strm->avail_in = len;
strm->next_in = (z_const Bytef *)buf;
state->x.pos += len;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
}
/* input was all buffered or compressed (put will fit in int) */
return (int)put;
}
/* -- see zlib.h -- */
int ZEXPORT gzputc(file, c)
gzFile file;
int c;
{
unsigned have;
unsigned char buf[1];
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return -1;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return -1;
}
/* try writing to input buffer for speed (state->size == 0 if buffer not
initialized) */
if (state->size) {
if (strm->avail_in == 0)
strm->next_in = state->in;
have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
if (have < state->size) {
state->in[have] = c;
strm->avail_in++;
state->x.pos++;
return c & 0xff;
}
}
/* no room in buffer or not initialized, use gz_write() */
buf[0] = c;
if (gzwrite(file, buf, 1) != 1)
return -1;
return c & 0xff;
}
/* -- see zlib.h -- */
int ZEXPORT gzputs(file, str)
gzFile file;
const char *str;
{
int ret;
unsigned len;
/* write string */
len = (unsigned)strlen(str);
ret = gzwrite(file, str, len);
return ret == 0 && len != 0 ? -1 : ret;
}
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
#include <stdarg.h>
/* -- see zlib.h -- */
int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
{
int size, len;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return 0;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
return 0;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return 0;
}
/* consume whatever's left in the input buffer */
if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* do the printf() into the input buffer, put length in len */
size = (int)(state->size);
state->in[size - 1] = 0;
#ifdef NO_vsnprintf
# ifdef HAS_vsprintf_void
(void)vsprintf((char *)(state->in), format, va);
for (len = 0; len < size; len++)
if (state->in[len] == 0) break;
# else
len = vsprintf((char *)(state->in), format, va);
# endif
#else
# ifdef HAS_vsnprintf_void
(void)vsnprintf((char *)(state->in), size, format, va);
len = strlen((char *)(state->in));
# else
len = vsnprintf((char *)(state->in), size, format, va);
# endif
#endif
/* check that printf() results fit in buffer */
if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
return 0;
/* update buffer and position, defer compression until needed */
strm->avail_in = (unsigned)len;
strm->next_in = state->in;
state->x.pos += len;
return len;
}
int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
{
va_list va;
int ret;
va_start(va, format);
ret = gzvprintf(file, format, va);
va_end(va);
return ret;
}
#else /* !STDC && !Z_HAVE_STDARG_H */
/* -- see zlib.h -- */
int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
gzFile file;
const char *format;
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
{
int size, len;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
strm = &(state->strm);
/* check that can really pass pointer in ints */
if (sizeof(int) != sizeof(void *))
return 0;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return 0;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
return 0;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return 0;
}
/* consume whatever's left in the input buffer */
if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* do the printf() into the input buffer, put length in len */
size = (int)(state->size);
state->in[size - 1] = 0;
#ifdef NO_snprintf
# ifdef HAS_sprintf_void
sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
for (len = 0; len < size; len++)
if (state->in[len] == 0) break;
# else
len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#else
# ifdef HAS_snprintf_void
snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
len = strlen((char *)(state->in));
# else
len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
a19, a20);
# endif
#endif
/* check that printf() results fit in buffer */
if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
return 0;
/* update buffer and position, defer compression until needed */
strm->avail_in = (unsigned)len;
strm->next_in = state->in;
state->x.pos += len;
return len;
}
#endif
/* -- see zlib.h -- */
int ZEXPORT gzflush(file, flush)
gzFile file;
int flush;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return Z_STREAM_ERROR;
/* check flush parameter */
if (flush < 0 || flush > Z_FINISH)
return Z_STREAM_ERROR;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return -1;
}
/* compress remaining data with requested flush */
gz_comp(state, flush);
return state->err;
}
/* -- see zlib.h -- */
int ZEXPORT gzsetparams(file, level, strategy)
gzFile file;
int level;
int strategy;
{
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return Z_STREAM_ERROR;
/* if no change is requested, then do nothing */
if (level == state->level && strategy == state->strategy)
return Z_OK;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return -1;
}
/* change compression parameters for subsequent input */
if (state->size) {
/* flush previous input with previous parameters before changing */
if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
return state->err;
deflateParams(strm, level, strategy);
}
state->level = level;
state->strategy = strategy;
return Z_OK;
}
/* -- see zlib.h -- */
int ZEXPORT gzclose_w(file)
gzFile file;
{
int ret = Z_OK;
gz_statep state;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're writing */
if (state->mode != GZ_WRITE)
return Z_STREAM_ERROR;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
ret = state->err;
}
/* flush, free memory, and close file */
if (gz_comp(state, Z_FINISH) == -1)
ret = state->err;
if (state->size) {
if (!state->direct) {
(void)deflateEnd(&(state->strm));
free(state->out);
}
free(state->in);
}
gz_error(state, Z_OK, NULL);
free(state->path);
if (close(state->fd) == -1)
ret = Z_ERRNO;
free(state);
return ret;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,319 +1,340 @@
/* inffast.c -- fast decoding /* inffast.c -- fast decoding
* Copyright (C) 1995-2004 Mark Adler * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
#include <stdio.h> #include "zutil.h"
#include "zutil.h" #include "inftrees.h"
#include "inftrees.h" #include "inflate.h"
#include "inflate.h" #include "inffast.h"
#include "inffast.h"
#ifndef ASMINF
#ifndef ASMINF
/* Allow machine dependent optimization for post-increment or pre-increment.
/* Allow machine dependent optimization for post-increment or pre-increment. Based on testing to date,
Based on testing to date, Pre-increment preferred for:
Pre-increment preferred for: - PowerPC G3 (Adler)
- PowerPC G3 (Adler) - MIPS R5000 (Randers-Pehrson)
- MIPS R5000 (Randers-Pehrson) Post-increment preferred for:
Post-increment preferred for: - none
- none No measurable difference:
No measurable difference: - Pentium III (Anderson)
- Pentium III (Anderson) - M68060 (Nikl)
- M68060 (Nikl) */
*/ #ifdef POSTINC
#ifdef POSTINC # define OFF 0
# define OFF 0 # define PUP(a) *(a)++
# define PUP(a) *(a)++ #else
#else # define OFF 1
# define OFF 1 # define PUP(a) *++(a)
# define PUP(a) *++(a) #endif
#endif
/*
/* Decode literal, length, and distance codes and write out the resulting
Decode literal, length, and distance codes and write out the resulting literal and match bytes until either not enough input or output is
literal and match bytes until either not enough input or output is available, an end-of-block is encountered, or a data error is encountered.
available, an end-of-block is encountered, or a data error is encountered. When large enough input and output buffers are supplied to inflate(), for
When large enough input and output buffers are supplied to inflate(), for example, a 16K input buffer and a 64K output buffer, more than 95% of the
example, a 16K input buffer and a 64K output buffer, more than 95% of the inflate execution time is spent in this routine.
inflate execution time is spent in this routine.
Entry assumptions:
Entry assumptions:
state->mode == LEN
state->mode == LEN strm->avail_in >= 6
strm->avail_in >= 6 strm->avail_out >= 258
strm->avail_out >= 258 start >= strm->avail_out
start >= strm->avail_out state->bits < 8
state->bits < 8
On return, state->mode is one of:
On return, state->mode is one of:
LEN -- ran out of enough output space or enough available input
LEN -- ran out of enough output space or enough available input TYPE -- reached end of block code, inflate() to interpret next block
TYPE -- reached end of block code, inflate() to interpret next block BAD -- error in block data
BAD -- error in block data
Notes:
Notes:
- The maximum input bits used by a length/distance pair is 15 bits for the
- The maximum input bits used by a length/distance pair is 15 bits for the length code, 5 bits for the length extra, 15 bits for the distance code,
length code, 5 bits for the length extra, 15 bits for the distance code, and 13 bits for the distance extra. This totals 48 bits, or six bytes.
and 13 bits for the distance extra. This totals 48 bits, or six bytes. Therefore if strm->avail_in >= 6, then there is enough input to avoid
Therefore if strm->avail_in >= 6, then there is enough input to avoid checking for available input while decoding.
checking for available input while decoding.
- The maximum bytes that a single length/distance pair can output is 258
- The maximum bytes that a single length/distance pair can output is 258 bytes, which is the maximum length that can be coded. inflate_fast()
bytes, which is the maximum length that can be coded. inflate_fast() requires strm->avail_out >= 258 for each loop to avoid checking for
requires strm->avail_out >= 258 for each loop to avoid checking for output space.
output space. */
*/ void ZLIB_INTERNAL inflate_fast(strm, start)
void inflate_fast(strm, start) z_streamp strm;
z_streamp strm; unsigned start; /* inflate()'s starting value for strm->avail_out */
unsigned start; /* inflate()'s starting value for strm->avail_out */ {
{ struct inflate_state FAR *state;
struct inflate_state FAR *state; z_const unsigned char FAR *in; /* local strm->next_in */
unsigned char FAR *in; /* local strm->next_in */ z_const unsigned char FAR *last; /* have enough input while in < last */
unsigned char FAR *last; /* while in < last, enough input available */ unsigned char FAR *out; /* local strm->next_out */
unsigned char FAR *out; /* local strm->next_out */ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ unsigned char FAR *end; /* while out < end, enough space available */
unsigned char FAR *end; /* while out < end, enough space available */ #ifdef INFLATE_STRICT
#ifdef INFLATE_STRICT unsigned dmax; /* maximum distance from zlib header */
unsigned dmax; /* maximum distance from zlib header */ #endif
#endif unsigned wsize; /* window size or zero if not using window */
unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */
unsigned whave; /* valid bytes in the window */ unsigned wnext; /* window write index */
unsigned write; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ unsigned long hold; /* local strm->hold */
unsigned long hold; /* local strm->hold */ unsigned bits; /* local strm->bits */
unsigned bits; /* local strm->bits */ code const FAR *lcode; /* local strm->lencode */
code const FAR *lcode; /* local strm->lencode */ code const FAR *dcode; /* local strm->distcode */
code const FAR *dcode; /* local strm->distcode */ unsigned lmask; /* mask for first level of length codes */
unsigned lmask; /* mask for first level of length codes */ unsigned dmask; /* mask for first level of distance codes */
unsigned dmask; /* mask for first level of distance codes */ code here; /* retrieved table entry */
code this; /* retrieved table entry */ unsigned op; /* code bits, operation, extra bits, or */
unsigned op; /* code bits, operation, extra bits, or */ /* window position, window bytes to copy */
/* window position, window bytes to copy */ unsigned len; /* match length, unused bytes */
unsigned len; /* match length, unused bytes */ unsigned dist; /* match distance */
unsigned dist; /* match distance */ unsigned char FAR *from; /* where to copy match from */
unsigned char FAR *from; /* where to copy match from */
/* copy state to local variables */
/* copy state to local variables */ state = (struct inflate_state FAR *)strm->state;
state = (struct inflate_state FAR *)strm->state; in = strm->next_in - OFF;
in = strm->next_in - OFF; last = in + (strm->avail_in - 5);
last = in + (strm->avail_in - 5); out = strm->next_out - OFF;
out = strm->next_out - OFF; beg = out - (start - strm->avail_out);
beg = out - (start - strm->avail_out); end = out + (strm->avail_out - 257);
end = out + (strm->avail_out - 257); #ifdef INFLATE_STRICT
#ifdef INFLATE_STRICT dmax = state->dmax;
dmax = state->dmax; #endif
#endif wsize = state->wsize;
wsize = state->wsize; whave = state->whave;
whave = state->whave; wnext = state->wnext;
write = state->write; window = state->window;
window = state->window; hold = state->hold;
hold = state->hold; bits = state->bits;
bits = state->bits; lcode = state->lencode;
lcode = state->lencode; dcode = state->distcode;
dcode = state->distcode; lmask = (1U << state->lenbits) - 1;
lmask = (1U << state->lenbits) - 1; dmask = (1U << state->distbits) - 1;
dmask = (1U << state->distbits) - 1;
/* decode literals and length/distances until end-of-block or not enough
/* decode literals and length/distances until end-of-block or not enough input data or output space */
input data or output space */ do {
do { if (bits < 15) {
if (bits < 15) { hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; }
} here = lcode[hold & lmask];
this = lcode[hold & lmask]; dolen:
dolen: op = (unsigned)(here.bits);
op = (unsigned)(this.bits); hold >>= op;
hold >>= op; bits -= op;
bits -= op; op = (unsigned)(here.op);
op = (unsigned)(this.op); if (op == 0) { /* literal */
if (op == 0) { /* literal */ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? "inflate: literal '%c'\n" :
"inflate: literal '%c'\n" : "inflate: literal 0x%02x\n", here.val));
"inflate: literal 0x%02x\n", this.val)); PUP(out) = (unsigned char)(here.val);
PUP(out) = (unsigned char)(this.val); }
} else if (op & 16) { /* length base */
else if (op & 16) { /* length base */ len = (unsigned)(here.val);
len = (unsigned)(this.val); op &= 15; /* number of extra bits */
op &= 15; /* number of extra bits */ if (op) {
if (op) { if (bits < op) {
if (bits < op) { hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; }
} len += (unsigned)hold & ((1U << op) - 1);
len += (unsigned)hold & ((1U << op) - 1); hold >>= op;
hold >>= op; bits -= op;
bits -= op; }
} Tracevv((stderr, "inflate: length %u\n", len));
Tracevv((stderr, "inflate: length %u\n", len)); if (bits < 15) {
if (bits < 15) { hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; }
} here = dcode[hold & dmask];
this = dcode[hold & dmask]; dodist:
dodist: op = (unsigned)(here.bits);
op = (unsigned)(this.bits); hold >>= op;
hold >>= op; bits -= op;
bits -= op; op = (unsigned)(here.op);
op = (unsigned)(this.op); if (op & 16) { /* distance base */
if (op & 16) { /* distance base */ dist = (unsigned)(here.val);
dist = (unsigned)(this.val); op &= 15; /* number of extra bits */
op &= 15; /* number of extra bits */ if (bits < op) {
if (bits < op) { hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; if (bits < op) {
if (bits < op) { hold += (unsigned long)(PUP(in)) << bits;
hold += (unsigned long)(PUP(in)) << bits; bits += 8;
bits += 8; }
} }
} dist += (unsigned)hold & ((1U << op) - 1);
dist += (unsigned)hold & ((1U << op) - 1); #ifdef INFLATE_STRICT
#ifdef INFLATE_STRICT if (dist > dmax) {
if (dist > dmax) { strm->msg = (char *)"invalid distance too far back";
strm->msg = (char *)"invalid distance too far back"; state->mode = BAD;
state->mode = BAD; break;
break; }
} #endif
#endif hold >>= op;
hold >>= op; bits -= op;
bits -= op; Tracevv((stderr, "inflate: distance %u\n", dist));
Tracevv((stderr, "inflate: distance %u\n", dist)); op = (unsigned)(out - beg); /* max distance in output */
op = (unsigned)(out - beg); /* max distance in output */ if (dist > op) { /* see if copy from window */
if (dist > op) { /* see if copy from window */ op = dist - op; /* distance back in window */
op = dist - op; /* distance back in window */ if (op > whave) {
if (op > whave) { if (state->sane) {
strm->msg = (char *)"invalid distance too far back"; strm->msg =
state->mode = BAD; (char *)"invalid distance too far back";
break; state->mode = BAD;
} break;
from = window - OFF; }
if (write == 0) { /* very common case */ #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
from += wsize - op; if (len <= op - whave) {
if (op < len) { /* some from window */ do {
len -= op; PUP(out) = 0;
do { } while (--len);
PUP(out) = PUP(from); continue;
} while (--op); }
from = out - dist; /* rest from output */ len -= op - whave;
} do {
} PUP(out) = 0;
else if (write < op) { /* wrap around window */ } while (--op > whave);
from += wsize + write - op; if (op == 0) {
op -= write; from = out - dist;
if (op < len) { /* some from end of window */ do {
len -= op; PUP(out) = PUP(from);
do { } while (--len);
PUP(out) = PUP(from); continue;
} while (--op); }
from = window - OFF; #endif
if (write < len) { /* some from start of window */ }
op = write; from = window - OFF;
len -= op; if (wnext == 0) { /* very common case */
do { from += wsize - op;
PUP(out) = PUP(from); if (op < len) { /* some from window */
} while (--op); len -= op;
from = out - dist; /* rest from output */ do {
} PUP(out) = PUP(from);
} } while (--op);
} from = out - dist; /* rest from output */
else { /* contiguous in window */ }
from += write - op; }
if (op < len) { /* some from window */ else if (wnext < op) { /* wrap around window */
len -= op; from += wsize + wnext - op;
do { op -= wnext;
PUP(out) = PUP(from); if (op < len) { /* some from end of window */
} while (--op); len -= op;
from = out - dist; /* rest from output */ do {
} PUP(out) = PUP(from);
} } while (--op);
while (len > 2) { from = window - OFF;
PUP(out) = PUP(from); if (wnext < len) { /* some from start of window */
PUP(out) = PUP(from); op = wnext;
PUP(out) = PUP(from); len -= op;
len -= 3; do {
} PUP(out) = PUP(from);
if (len) { } while (--op);
PUP(out) = PUP(from); from = out - dist; /* rest from output */
if (len > 1) }
PUP(out) = PUP(from); }
} }
} else { /* contiguous in window */
else { from += wnext - op;
from = out - dist; /* copy direct from output */ if (op < len) { /* some from window */
do { /* minimum length is three */ len -= op;
PUP(out) = PUP(from); do {
PUP(out) = PUP(from); PUP(out) = PUP(from);
PUP(out) = PUP(from); } while (--op);
len -= 3; from = out - dist; /* rest from output */
} while (len > 2); }
if (len) { }
PUP(out) = PUP(from); while (len > 2) {
if (len > 1) PUP(out) = PUP(from);
PUP(out) = PUP(from); PUP(out) = PUP(from);
} PUP(out) = PUP(from);
} len -= 3;
} }
else if ((op & 64) == 0) { /* 2nd level distance code */ if (len) {
this = dcode[this.val + (hold & ((1U << op) - 1))]; PUP(out) = PUP(from);
goto dodist; if (len > 1)
} PUP(out) = PUP(from);
else { }
strm->msg = (char *)"invalid distance code"; }
state->mode = BAD; else {
break; from = out - dist; /* copy direct from output */
} do { /* minimum length is three */
} PUP(out) = PUP(from);
else if ((op & 64) == 0) { /* 2nd level length code */ PUP(out) = PUP(from);
this = lcode[this.val + (hold & ((1U << op) - 1))]; PUP(out) = PUP(from);
goto dolen; len -= 3;
} } while (len > 2);
else if (op & 32) { /* end-of-block */ if (len) {
Tracevv((stderr, "inflate: end of block\n")); PUP(out) = PUP(from);
state->mode = TYPE; if (len > 1)
break; PUP(out) = PUP(from);
} }
else { }
strm->msg = (char *)"invalid literal/length code"; }
state->mode = BAD; else if ((op & 64) == 0) { /* 2nd level distance code */
break; here = dcode[here.val + (hold & ((1U << op) - 1))];
} goto dodist;
} while (in < last && out < end); }
else {
/* return unused bytes (on entry, bits < 8, so in won't go too far back) */ strm->msg = (char *)"invalid distance code";
len = bits >> 3; state->mode = BAD;
in -= len; break;
bits -= len << 3; }
hold &= (1U << bits) - 1; }
else if ((op & 64) == 0) { /* 2nd level length code */
/* update state and return */ here = lcode[here.val + (hold & ((1U << op) - 1))];
strm->next_in = in + OFF; goto dolen;
strm->next_out = out + OFF; }
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); else if (op & 32) { /* end-of-block */
strm->avail_out = (unsigned)(out < end ? Tracevv((stderr, "inflate: end of block\n"));
257 + (end - out) : 257 - (out - end)); state->mode = TYPE;
state->hold = hold; break;
state->bits = bits; }
return; else {
} strm->msg = (char *)"invalid literal/length code";
state->mode = BAD;
/* break;
inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): }
- Using bit fields for code structure } while (in < last && out < end);
- Different op definition to avoid & for extra bits (do & for table bits)
- Three separate decoding do-loops for direct, window, and write == 0 /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
- Special case for distance > 1 copies to do overlapped load and store copy len = bits >> 3;
- Explicit branch predictions (based on measured branch probabilities) in -= len;
- Deferring match copy and interspersed it with decoding subsequent codes bits -= len << 3;
- Swapping literal/length else hold &= (1U << bits) - 1;
- Swapping window/direct else
- Larger unrolled copy loops (three is about right) /* update state and return */
- Moving len -= 3 statement into middle of loop strm->next_in = in + OFF;
*/ strm->next_out = out + OFF;
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
#endif /* !ASMINF */ strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
state->hold = hold;
state->bits = bits;
return;
}
/*
inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
- Using bit fields for code structure
- Different op definition to avoid & for extra bits (do & for table bits)
- Three separate decoding do-loops for direct, window, and wnext == 0
- Special case for distance > 1 copies to do overlapped load and store copy
- Explicit branch predictions (based on measured branch probabilities)
- Deferring match copy and interspersed it with decoding subsequent codes
- Swapping literal/length else
- Swapping window/direct else
- Larger unrolled copy loops (three is about right)
- Moving len -= 3 statement into middle of loop
*/
#endif /* !ASMINF */

View File

@ -1,11 +1,11 @@
/* inffast.h -- header to use inffast.c /* inffast.h -- header to use inffast.c
* Copyright (C) 1995-2003 Mark Adler * Copyright (C) 1995-2003, 2010 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* WARNING: this file should *not* be used by applications. It is /* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h. subject to change. Applications should only use zlib.h.
*/ */
void inflate_fast OF((z_streamp strm, unsigned start)); void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));

View File

@ -1,94 +1,94 @@
/* inffixed.h -- table for decoding fixed codes /* inffixed.h -- table for decoding fixed codes
* Generated automatically by makefixed(). * Generated automatically by makefixed().
*/ */
/* WARNING: this file should *not* be used by applications. It /* WARNING: this file should *not* be used by applications.
is part of the implementation of the compression library and It is part of the implementation of this library and is
is subject to change. Applications should only use zlib.h. subject to change. Applications should only use zlib.h.
*/ */
static const code lenfix[512] = { static const code lenfix[512] = {
{96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
{0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
{0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
{0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
{0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
{21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
{0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
{0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
{18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
{0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
{0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
{0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
{20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
{0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
{0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
{16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
{0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
{0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
{0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
{0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
{0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
{0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
{0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
{17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
{0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
{0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
{0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
{19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
{0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
{0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
{16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
{0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
{0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
{0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
{0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
{20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
{0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
{0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
{17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
{0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
{0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
{0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
{20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
{0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
{0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
{0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
{16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
{0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
{0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
{0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
{0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
{0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
{0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
{0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
{16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
{0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
{0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
{0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
{19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
{0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
{0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
{16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
{0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
{0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
{0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
{0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
{64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
{0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
{0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
{18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
{0,9,255} {0,9,255}
}; };
static const code distfix[32] = { static const code distfix[32] = {
{16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
{21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
{18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
{19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
{16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
{22,5,193},{64,5,0} {22,5,193},{64,5,0}
}; };

File diff suppressed because it is too large Load Diff

View File

@ -1,115 +1,122 @@
/* inflate.h -- internal inflate state definition /* inflate.h -- internal inflate state definition
* Copyright (C) 1995-2004 Mark Adler * Copyright (C) 1995-2009 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* WARNING: this file should *not* be used by applications. It is /* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h. subject to change. Applications should only use zlib.h.
*/ */
/* define NO_GZIP when compiling if you want to disable gzip header and /* define NO_GZIP when compiling if you want to disable gzip header and
trailer decoding by inflate(). NO_GZIP would be used to avoid linking in trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
the crc code when it is not needed. For shared libraries, gzip decoding the crc code when it is not needed. For shared libraries, gzip decoding
should be left enabled. */ should be left enabled. */
#ifndef NO_GZIP #ifndef NO_GZIP
# define GUNZIP # define GUNZIP
#endif #endif
/* Possible inflate modes between inflate() calls */ /* Possible inflate modes between inflate() calls */
typedef enum { typedef enum {
HEAD, /* i: waiting for magic header */ HEAD, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */ FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */ TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */ OS, /* i: waiting for extra flags and operating system (gzip) */
EXLEN, /* i: waiting for extra length (gzip) */ EXLEN, /* i: waiting for extra length (gzip) */
EXTRA, /* i: waiting for extra bytes (gzip) */ EXTRA, /* i: waiting for extra bytes (gzip) */
NAME, /* i: waiting for end of file name (gzip) */ NAME, /* i: waiting for end of file name (gzip) */
COMMENT, /* i: waiting for end of comment (gzip) */ COMMENT, /* i: waiting for end of comment (gzip) */
HCRC, /* i: waiting for header crc (gzip) */ HCRC, /* i: waiting for header crc (gzip) */
DICTID, /* i: waiting for dictionary check value */ DICTID, /* i: waiting for dictionary check value */
DICT, /* waiting for inflateSetDictionary() call */ DICT, /* waiting for inflateSetDictionary() call */
TYPE, /* i: waiting for type bits, including last-flag bit */ TYPE, /* i: waiting for type bits, including last-flag bit */
TYPEDO, /* i: same, but skip check to exit inflate on new block */ TYPEDO, /* i: same, but skip check to exit inflate on new block */
STORED, /* i: waiting for stored size (length and complement) */ STORED, /* i: waiting for stored size (length and complement) */
COPY, /* i/o: waiting for input or output to copy stored block */ COPY_, /* i/o: same as COPY below, but only first time in */
TABLE, /* i: waiting for dynamic block table lengths */ COPY, /* i/o: waiting for input or output to copy stored block */
LENLENS, /* i: waiting for code length code lengths */ TABLE, /* i: waiting for dynamic block table lengths */
CODELENS, /* i: waiting for length/lit and distance code lengths */ LENLENS, /* i: waiting for code length code lengths */
LEN, /* i: waiting for length/lit code */ CODELENS, /* i: waiting for length/lit and distance code lengths */
LENEXT, /* i: waiting for length extra bits */ LEN_, /* i: same as LEN below, but only first time in */
DIST, /* i: waiting for distance code */ LEN, /* i: waiting for length/lit/eob code */
DISTEXT, /* i: waiting for distance extra bits */ LENEXT, /* i: waiting for length extra bits */
MATCH, /* o: waiting for output space to copy string */ DIST, /* i: waiting for distance code */
LIT, /* o: waiting for output space to write literal */ DISTEXT, /* i: waiting for distance extra bits */
CHECK, /* i: waiting for 32-bit check value */ MATCH, /* o: waiting for output space to copy string */
LENGTH, /* i: waiting for 32-bit length (gzip) */ LIT, /* o: waiting for output space to write literal */
DONE, /* finished check, done -- remain here until reset */ CHECK, /* i: waiting for 32-bit check value */
BAD, /* got a data error -- remain here until reset */ LENGTH, /* i: waiting for 32-bit length (gzip) */
MEM, /* got an inflate() memory error -- remain here until reset */ DONE, /* finished check, done -- remain here until reset */
SYNC /* looking for synchronization bytes to restart inflate() */ BAD, /* got a data error -- remain here until reset */
} inflate_mode; MEM, /* got an inflate() memory error -- remain here until reset */
SYNC /* looking for synchronization bytes to restart inflate() */
/* } inflate_mode;
State transitions between above modes -
/*
(most modes can go to the BAD or MEM mode -- not shown for clarity) State transitions between above modes -
Process header: (most modes can go to BAD or MEM on error -- not shown for clarity)
HEAD -> (gzip) or (zlib)
(gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME Process header:
NAME -> COMMENT -> HCRC -> TYPE HEAD -> (gzip) or (zlib) or (raw)
(zlib) -> DICTID or TYPE (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
DICTID -> DICT -> TYPE HCRC -> TYPE
Read deflate blocks: (zlib) -> DICTID or TYPE
TYPE -> STORED or TABLE or LEN or CHECK DICTID -> DICT -> TYPE
STORED -> COPY -> TYPE (raw) -> TYPEDO
TABLE -> LENLENS -> CODELENS -> LEN Read deflate blocks:
Read deflate codes: TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
LEN -> LENEXT or LIT or TYPE STORED -> COPY_ -> COPY -> TYPE
LENEXT -> DIST -> DISTEXT -> MATCH -> LEN TABLE -> LENLENS -> CODELENS -> LEN_
LIT -> LEN LEN_ -> LEN
Process trailer: Read deflate codes in fixed or dynamic block:
CHECK -> LENGTH -> DONE LEN -> LENEXT or LIT or TYPE
*/ LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
LIT -> LEN
/* state maintained between inflate() calls. Approximately 7K bytes. */ Process trailer:
struct inflate_state { CHECK -> LENGTH -> DONE
inflate_mode mode; /* current inflate mode */ */
int last; /* true if processing last block */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ /* state maintained between inflate() calls. Approximately 10K bytes. */
int havedict; /* true if dictionary provided */ struct inflate_state {
int flags; /* gzip header method and flags (0 if zlib) */ inflate_mode mode; /* current inflate mode */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ int last; /* true if processing last block */
unsigned long check; /* protected copy of check value */ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
unsigned long total; /* protected copy of output count */ int havedict; /* true if dictionary provided */
gz_headerp head; /* where to save gzip header information */ int flags; /* gzip header method and flags (0 if zlib) */
/* sliding window */ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
unsigned wbits; /* log base 2 of requested window size */ unsigned long check; /* protected copy of check value */
unsigned wsize; /* window size or zero if not using window */ unsigned long total; /* protected copy of output count */
unsigned whave; /* valid bytes in the window */ gz_headerp head; /* where to save gzip header information */
unsigned write; /* window write index */ /* sliding window */
unsigned char FAR *window; /* allocated sliding window, if needed */ unsigned wbits; /* log base 2 of requested window size */
/* bit accumulator */ unsigned wsize; /* window size or zero if not using window */
unsigned long hold; /* input bit accumulator */ unsigned whave; /* valid bytes in the window */
unsigned bits; /* number of bits in "in" */ unsigned wnext; /* window write index */
/* for string and stored block copying */ unsigned char FAR *window; /* allocated sliding window, if needed */
unsigned length; /* literal or length of data to copy */ /* bit accumulator */
unsigned offset; /* distance back to copy string from */ unsigned long hold; /* input bit accumulator */
/* for table and code decoding */ unsigned bits; /* number of bits in "in" */
unsigned extra; /* extra bits needed */ /* for string and stored block copying */
/* fixed and dynamic code tables */ unsigned length; /* literal or length of data to copy */
code const FAR *lencode; /* starting table for length/literal codes */ unsigned offset; /* distance back to copy string from */
code const FAR *distcode; /* starting table for distance codes */ /* for table and code decoding */
unsigned lenbits; /* index bits for lencode */ unsigned extra; /* extra bits needed */
unsigned distbits; /* index bits for distcode */ /* fixed and dynamic code tables */
/* dynamic table building */ code const FAR *lencode; /* starting table for length/literal codes */
unsigned ncode; /* number of code length code lengths */ code const FAR *distcode; /* starting table for distance codes */
unsigned nlen; /* number of length code lengths */ unsigned lenbits; /* index bits for lencode */
unsigned ndist; /* number of distance code lengths */ unsigned distbits; /* index bits for distcode */
unsigned have; /* number of code lengths in lens[] */ /* dynamic table building */
code FAR *next; /* next available space in codes[] */ unsigned ncode; /* number of code length code lengths */
unsigned short lens[320]; /* temporary storage for code lengths */ unsigned nlen; /* number of length code lengths */
unsigned short work[288]; /* work area for code table building */ unsigned ndist; /* number of distance code lengths */
code codes[ENOUGH]; /* space for code tables */ unsigned have; /* number of code lengths in lens[] */
}; code FAR *next; /* next available space in codes[] */
unsigned short lens[320]; /* temporary storage for code lengths */
unsigned short work[288]; /* work area for code table building */
code codes[ENOUGH]; /* space for code tables */
int sane; /* if false, allow invalid distance too far */
int back; /* bits back of last unprocessed length/lit */
unsigned was; /* initial length of match */
};

View File

@ -1,330 +1,306 @@
/* inftrees.c -- generate Huffman trees for efficient decoding /* inftrees.c -- generate Huffman trees for efficient decoding
* Copyright (C) 1995-2005 Mark Adler * Copyright (C) 1995-2013 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
#include <stdio.h> #include "zutil.h"
#include "zutil.h" #include "inftrees.h"
#include "inftrees.h"
#define MAXBITS 15
#define MAXBITS 15
const char inflate_copyright[] =
const char inflate_copyright[] = " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
" inflate 1.2.3 Copyright 1995-2005 Mark Adler "; /*
/* If you use the zlib library in a product, an acknowledgment is welcome
If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot
in the documentation of your product. If for some reason you cannot include such an acknowledgment, I would appreciate that you keep this
include such an acknowledgment, I would appreciate that you keep this copyright string in the executable of your product.
copyright string in the executable of your product. */
*/
/*
/* Build a set of tables to decode the provided canonical Huffman code.
Build a set of tables to decode the provided canonical Huffman code. The code lengths are lens[0..codes-1]. The result starts at *table,
The code lengths are lens[0..codes-1]. The result starts at *table, whose indices are 0..2^bits-1. work is a writable array of at least
whose indices are 0..2^bits-1. work is a writable array of at least lens shorts, which is used as a work area. type is the type of code
lens shorts, which is used as a work area. type is the type of code to be generated, CODES, LENS, or DISTS. On return, zero is success,
to be generated, CODES, LENS, or DISTS. On return, zero is success, -1 is an invalid code, and +1 means that ENOUGH isn't enough. table
-1 is an invalid code, and +1 means that ENOUGH isn't enough. table on return points to the next available entry's address. bits is the
on return points to the next available entry's address. bits is the requested root table index bits, and on return it is the actual root
requested root table index bits, and on return it is the actual root table index bits. It will differ if the request is greater than the
table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code.
longest code or if it is less than the shortest code. */
*/ int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
int inflate_table(type, lens, codes, table, bits, work) codetype type;
codetype type; unsigned short FAR *lens;
unsigned short FAR *lens; unsigned codes;
unsigned codes; code FAR * FAR *table;
code FAR * FAR *table; unsigned FAR *bits;
unsigned FAR *bits; unsigned short FAR *work;
unsigned short FAR *work; {
{ unsigned len; /* a code's length in bits */
unsigned len; /* a code's length in bits */ unsigned sym; /* index of code symbols */
unsigned sym; /* index of code symbols */ unsigned min, max; /* minimum and maximum code lengths */
unsigned min, max; /* minimum and maximum code lengths */ unsigned root; /* number of index bits for root table */
unsigned root; /* number of index bits for root table */ unsigned curr; /* number of index bits for current table */
unsigned curr; /* number of index bits for current table */ unsigned drop; /* code bits to drop for sub-table */
unsigned drop; /* code bits to drop for sub-table */ int left; /* number of prefix codes available */
int left; /* number of prefix codes available */ unsigned used; /* code entries in table used */
unsigned used; /* code entries in table used */ unsigned huff; /* Huffman code */
unsigned huff; /* Huffman code */ unsigned incr; /* for incrementing code, index */
unsigned incr; /* for incrementing code, index */ unsigned fill; /* index for replicating entries */
unsigned fill; /* index for replicating entries */ unsigned low; /* low bits for current root entry */
unsigned low; /* low bits for current root entry */ unsigned mask; /* mask for low root bits */
unsigned mask; /* mask for low root bits */ code here; /* table entry for duplication */
code this; /* table entry for duplication */ code FAR *next; /* next available space in table */
code FAR *next; /* next available space in table */ const unsigned short FAR *base; /* base value table to use */
const unsigned short FAR *base; /* base value table to use */ const unsigned short FAR *extra; /* extra bits table to use */
const unsigned short FAR *extra; /* extra bits table to use */ int end; /* use base and extra for symbol > end */
int end; /* use base and extra for symbol > end */ unsigned short count[MAXBITS+1]; /* number of codes of each length */
unsigned short count[MAXBITS+1]; /* number of codes of each length */ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */
static const unsigned short lbase[31] = { /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */
static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0};
8193, 12289, 16385, 24577, 0, 0}; static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64};
28, 28, 29, 29, 64, 64};
/*
/* Process a set of code lengths to create a canonical Huffman code. The
Process a set of code lengths to create a canonical Huffman code. The code lengths are lens[0..codes-1]. Each length corresponds to the
code lengths are lens[0..codes-1]. Each length corresponds to the symbols 0..codes-1. The Huffman code is generated by first sorting the
symbols 0..codes-1. The Huffman code is generated by first sorting the symbols by length from short to long, and retaining the symbol order
symbols by length from short to long, and retaining the symbol order for codes with equal lengths. Then the code starts with all zero bits
for codes with equal lengths. Then the code starts with all zero bits for the first code of the shortest length, and the codes are integer
for the first code of the shortest length, and the codes are integer increments for the same length, and zeros are appended as the length
increments for the same length, and zeros are appended as the length increases. For the deflate format, these bits are stored backwards
increases. For the deflate format, these bits are stored backwards from their more natural integer increment ordering, and so when the
from their more natural integer increment ordering, and so when the decoding tables are built in the large loop below, the integer codes
decoding tables are built in the large loop below, the integer codes are incremented backwards.
are incremented backwards.
This routine assumes, but does not check, that all of the entries in
This routine assumes, but does not check, that all of the entries in lens[] are in the range 0..MAXBITS. The caller must assure this.
lens[] are in the range 0..MAXBITS. The caller must assure this. 1..MAXBITS is interpreted as that code length. zero means that that
1..MAXBITS is interpreted as that code length. zero means that that symbol does not occur in this code.
symbol does not occur in this code.
The codes are sorted by computing a count of codes for each length,
The codes are sorted by computing a count of codes for each length, creating from that a table of starting indices for each length in the
creating from that a table of starting indices for each length in the sorted table, and then entering the symbols in order in the sorted
sorted table, and then entering the symbols in order in the sorted table. The sorted table is work[], with that space being provided by
table. The sorted table is work[], with that space being provided by the caller.
the caller.
The length counts are used for other purposes as well, i.e. finding
The length counts are used for other purposes as well, i.e. finding the minimum and maximum length codes, determining if there are any
the minimum and maximum length codes, determining if there are any codes at all, checking for a valid set of lengths, and looking ahead
codes at all, checking for a valid set of lengths, and looking ahead at length counts to determine sub-table sizes when building the
at length counts to determine sub-table sizes when building the decoding tables.
decoding tables. */
*/
/* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
/* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ for (len = 0; len <= MAXBITS; len++)
for (len = 0; len <= MAXBITS; len++) count[len] = 0;
count[len] = 0; for (sym = 0; sym < codes; sym++)
for (sym = 0; sym < codes; sym++) count[lens[sym]]++;
count[lens[sym]]++;
/* bound code lengths, force root to be within code lengths */
/* bound code lengths, force root to be within code lengths */ root = *bits;
root = *bits; for (max = MAXBITS; max >= 1; max--)
for (max = MAXBITS; max >= 1; max--) if (count[max] != 0) break;
if (count[max] != 0) break; if (root > max) root = max;
if (root > max) root = max; if (max == 0) { /* no symbols to code at all */
if (max == 0) { /* no symbols to code at all */ here.op = (unsigned char)64; /* invalid code marker */
this.op = (unsigned char)64; /* invalid code marker */ here.bits = (unsigned char)1;
this.bits = (unsigned char)1; here.val = (unsigned short)0;
this.val = (unsigned short)0; *(*table)++ = here; /* make a table to force an error */
*(*table)++ = this; /* make a table to force an error */ *(*table)++ = here;
*(*table)++ = this; *bits = 1;
*bits = 1; return 0; /* no symbols, but wait for decoding to report error */
return 0; /* no symbols, but wait for decoding to report error */ }
} for (min = 1; min < max; min++)
for (min = 1; min <= MAXBITS; min++) if (count[min] != 0) break;
if (count[min] != 0) break; if (root < min) root = min;
if (root < min) root = min;
/* check for an over-subscribed or incomplete set of lengths */
/* check for an over-subscribed or incomplete set of lengths */ left = 1;
left = 1; for (len = 1; len <= MAXBITS; len++) {
for (len = 1; len <= MAXBITS; len++) { left <<= 1;
left <<= 1; left -= count[len];
left -= count[len]; if (left < 0) return -1; /* over-subscribed */
if (left < 0) return -1; /* over-subscribed */ }
} if (left > 0 && (type == CODES || max != 1))
if (left > 0 && (type == CODES || max != 1)) return -1; /* incomplete set */
return -1; /* incomplete set */
/* generate offsets into symbol table for each length for sorting */
/* generate offsets into symbol table for each length for sorting */ offs[1] = 0;
offs[1] = 0; for (len = 1; len < MAXBITS; len++)
for (len = 1; len < MAXBITS; len++) offs[len + 1] = offs[len] + count[len];
offs[len + 1] = offs[len] + count[len];
/* sort symbols by length, by symbol order within each length */
/* sort symbols by length, by symbol order within each length */ for (sym = 0; sym < codes; sym++)
for (sym = 0; sym < codes; sym++) if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
/*
/* Create and fill in decoding tables. In this loop, the table being
Create and fill in decoding tables. In this loop, the table being filled is at next and has curr index bits. The code being used is huff
filled is at next and has curr index bits. The code being used is huff with length len. That code is converted to an index by dropping drop
with length len. That code is converted to an index by dropping drop bits off of the bottom. For codes where len is less than drop + curr,
bits off of the bottom. For codes where len is less than drop + curr, those top drop + curr - len bits are incremented through all values to
those top drop + curr - len bits are incremented through all values to fill the table with replicated entries.
fill the table with replicated entries.
root is the number of index bits for the root table. When len exceeds
root is the number of index bits for the root table. When len exceeds root, sub-tables are created pointed to by the root entry with an index
root, sub-tables are created pointed to by the root entry with an index of the low root bits of huff. This is saved in low to check for when a
of the low root bits of huff. This is saved in low to check for when a new sub-table should be started. drop is zero when the root table is
new sub-table should be started. drop is zero when the root table is being filled, and drop is root when sub-tables are being filled.
being filled, and drop is root when sub-tables are being filled.
When a new sub-table is needed, it is necessary to look ahead in the
When a new sub-table is needed, it is necessary to look ahead in the code lengths to determine what size sub-table is needed. The length
code lengths to determine what size sub-table is needed. The length counts are used for this, and so count[] is decremented as codes are
counts are used for this, and so count[] is decremented as codes are entered in the tables.
entered in the tables.
used keeps track of how many table entries have been allocated from the
used keeps track of how many table entries have been allocated from the provided *table space. It is checked for LENS and DIST tables against
provided *table space. It is checked when a LENS table is being made the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
against the space in *table, ENOUGH, minus the maximum space needed by the initial root table size constants. See the comments in inftrees.h
the worst case distance code, MAXD. This should never happen, but the for more information.
sufficiency of ENOUGH has not been proven exhaustively, hence the check.
This assumes that when type == LENS, bits == 9. sym increments through all symbols, and the loop terminates when
all codes of length max, i.e. all codes, have been processed. This
sym increments through all symbols, and the loop terminates when routine permits incomplete codes, so another loop after this one fills
all codes of length max, i.e. all codes, have been processed. This in the rest of the decoding tables with invalid code markers.
routine permits incomplete codes, so another loop after this one fills */
in the rest of the decoding tables with invalid code markers.
*/ /* set up for code type */
switch (type) {
/* set up for code type */ case CODES:
switch (type) { base = extra = work; /* dummy value--not used */
case CODES: end = 19;
base = extra = work; /* dummy value--not used */ break;
end = 19; case LENS:
break; base = lbase;
case LENS: base -= 257;
base = lbase; extra = lext;
base -= 257; extra -= 257;
extra = lext; end = 256;
extra -= 257; break;
end = 256; default: /* DISTS */
break; base = dbase;
default: /* DISTS */ extra = dext;
base = dbase; end = -1;
extra = dext; }
end = -1;
} /* initialize state for loop */
huff = 0; /* starting code */
/* initialize state for loop */ sym = 0; /* starting code symbol */
huff = 0; /* starting code */ len = min; /* starting code length */
sym = 0; /* starting code symbol */ next = *table; /* current table to fill in */
len = min; /* starting code length */ curr = root; /* current table index bits */
next = *table; /* current table to fill in */ drop = 0; /* current bits to drop from code for index */
curr = root; /* current table index bits */ low = (unsigned)(-1); /* trigger new sub-table when len > root */
drop = 0; /* current bits to drop from code for index */ used = 1U << root; /* use root table entries */
low = (unsigned)(-1); /* trigger new sub-table when len > root */ mask = used - 1; /* mask for comparing low */
used = 1U << root; /* use root table entries */
mask = used - 1; /* mask for comparing low */ /* check available table space */
if ((type == LENS && used > ENOUGH_LENS) ||
/* check available table space */ (type == DISTS && used > ENOUGH_DISTS))
if (type == LENS && used >= ENOUGH - MAXD) return 1;
return 1;
/* process all codes and make table entries */
/* process all codes and make table entries */ for (;;) {
for (;;) { /* create table entry */
/* create table entry */ here.bits = (unsigned char)(len - drop);
this.bits = (unsigned char)(len - drop); if ((int)(work[sym]) < end) {
if ((int)(work[sym]) < end) { here.op = (unsigned char)0;
this.op = (unsigned char)0; here.val = work[sym];
this.val = work[sym]; }
} else if ((int)(work[sym]) > end) {
else if ((int)(work[sym]) > end) { here.op = (unsigned char)(extra[work[sym]]);
this.op = (unsigned char)(extra[work[sym]]); here.val = base[work[sym]];
this.val = base[work[sym]]; }
} else {
else { here.op = (unsigned char)(32 + 64); /* end of block */
this.op = (unsigned char)(32 + 64); /* end of block */ here.val = 0;
this.val = 0; }
}
/* replicate for those indices with low len bits equal to huff */
/* replicate for those indices with low len bits equal to huff */ incr = 1U << (len - drop);
incr = 1U << (len - drop); fill = 1U << curr;
fill = 1U << curr; min = fill; /* save offset to next table */
min = fill; /* save offset to next table */ do {
do { fill -= incr;
fill -= incr; next[(huff >> drop) + fill] = here;
next[(huff >> drop) + fill] = this; } while (fill != 0);
} while (fill != 0);
/* backwards increment the len-bit code huff */
/* backwards increment the len-bit code huff */ incr = 1U << (len - 1);
incr = 1U << (len - 1); while (huff & incr)
while (huff & incr) incr >>= 1;
incr >>= 1; if (incr != 0) {
if (incr != 0) { huff &= incr - 1;
huff &= incr - 1; huff += incr;
huff += incr; }
} else
else huff = 0;
huff = 0;
/* go to next symbol, update count, len */
/* go to next symbol, update count, len */ sym++;
sym++; if (--(count[len]) == 0) {
if (--(count[len]) == 0) { if (len == max) break;
if (len == max) break; len = lens[work[sym]];
len = lens[work[sym]]; }
}
/* create new sub-table if needed */
/* create new sub-table if needed */ if (len > root && (huff & mask) != low) {
if (len > root && (huff & mask) != low) { /* if first time, transition to sub-tables */
/* if first time, transition to sub-tables */ if (drop == 0)
if (drop == 0) drop = root;
drop = root;
/* increment past last table */
/* increment past last table */ next += min; /* here min is 1 << curr */
next += min; /* here min is 1 << curr */
/* determine length of next table */
/* determine length of next table */ curr = len - drop;
curr = len - drop; left = (int)(1 << curr);
left = (int)(1 << curr); while (curr + drop < max) {
while (curr + drop < max) { left -= count[curr + drop];
left -= count[curr + drop]; if (left <= 0) break;
if (left <= 0) break; curr++;
curr++; left <<= 1;
left <<= 1; }
}
/* check for enough space */
/* check for enough space */ used += 1U << curr;
used += 1U << curr; if ((type == LENS && used > ENOUGH_LENS) ||
if (type == LENS && used >= ENOUGH - MAXD) (type == DISTS && used > ENOUGH_DISTS))
return 1; return 1;
/* point entry in root table to sub-table */ /* point entry in root table to sub-table */
low = huff & mask; low = huff & mask;
(*table)[low].op = (unsigned char)curr; (*table)[low].op = (unsigned char)curr;
(*table)[low].bits = (unsigned char)root; (*table)[low].bits = (unsigned char)root;
(*table)[low].val = (unsigned short)(next - *table); (*table)[low].val = (unsigned short)(next - *table);
} }
} }
/* /* fill in remaining table entry if code is incomplete (guaranteed to have
Fill in rest of table for incomplete codes. This loop is similar to the at most one remaining entry, since if the code is incomplete, the
loop above in incrementing huff for table indices. It is assumed that maximum code length that was allowed to get this far is one bit) */
len is equal to curr + drop, so there is no loop needed to increment if (huff != 0) {
through high index bits. When the current sub-table is filled, the loop here.op = (unsigned char)64; /* invalid code marker */
drops back to the root table to fill in any remaining entries there. here.bits = (unsigned char)(len - drop);
*/ here.val = (unsigned short)0;
this.op = (unsigned char)64; /* invalid code marker */ next[huff] = here;
this.bits = (unsigned char)(len - drop); }
this.val = (unsigned short)0;
while (huff != 0) { /* set return parameters */
/* when done with sub-table, drop back to root table */ *table += used;
if (drop != 0 && (huff & mask) != low) { *bits = root;
drop = 0; return 0;
len = root; }
next = *table;
this.bits = (unsigned char)len;
}
/* put invalid code marker in table */
next[huff >> drop] = this;
/* backwards increment the len-bit code huff */
incr = 1U << (len - 1);
while (huff & incr)
incr >>= 1;
if (incr != 0) {
huff &= incr - 1;
huff += incr;
}
else
huff = 0;
}
/* set return parameters */
*table += used;
*bits = root;
return 0;
}

View File

@ -1,55 +1,62 @@
/* inftrees.h -- header to use inftrees.c /* inftrees.h -- header to use inftrees.c
* Copyright (C) 1995-2005 Mark Adler * Copyright (C) 1995-2005, 2010 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* WARNING: this file should *not* be used by applications. It is /* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h. subject to change. Applications should only use zlib.h.
*/ */
/* Structure for decoding tables. Each entry provides either the /* Structure for decoding tables. Each entry provides either the
information needed to do the operation requested by the code that information needed to do the operation requested by the code that
indexed that table entry, or it provides a pointer to another indexed that table entry, or it provides a pointer to another
table that indexes more bits of the code. op indicates whether table that indexes more bits of the code. op indicates whether
the entry is a pointer to another table, a literal, a length or the entry is a pointer to another table, a literal, a length or
distance, an end-of-block, or an invalid code. For a table distance, an end-of-block, or an invalid code. For a table
pointer, the low four bits of op is the number of index bits of pointer, the low four bits of op is the number of index bits of
that table. For a length or distance, the low four bits of op that table. For a length or distance, the low four bits of op
is the number of extra bits to get after the code. bits is is the number of extra bits to get after the code. bits is
the number of bits in this code or part of the code to drop off the number of bits in this code or part of the code to drop off
of the bit buffer. val is the actual byte to output in the case of the bit buffer. val is the actual byte to output in the case
of a literal, the base length or distance, or the offset from of a literal, the base length or distance, or the offset from
the current table to the next table. Each entry is four bytes. */ the current table to the next table. Each entry is four bytes. */
typedef struct { typedef struct {
unsigned char op; /* operation, extra bits, table bits */ unsigned char op; /* operation, extra bits, table bits */
unsigned char bits; /* bits in this part of the code */ unsigned char bits; /* bits in this part of the code */
unsigned short val; /* offset in table or code value */ unsigned short val; /* offset in table or code value */
} code; } code;
/* op values as set by inflate_table(): /* op values as set by inflate_table():
00000000 - literal 00000000 - literal
0000tttt - table link, tttt != 0 is the number of table index bits 0000tttt - table link, tttt != 0 is the number of table index bits
0001eeee - length or distance, eeee is the number of extra bits 0001eeee - length or distance, eeee is the number of extra bits
01100000 - end of block 01100000 - end of block
01000000 - invalid code 01000000 - invalid code
*/ */
/* Maximum size of dynamic tree. The maximum found in a long but non- /* Maximum size of the dynamic table. The maximum number of code structures is
exhaustive search was 1444 code structures (852 for length/literals 1444, which is the sum of 852 for literal/length codes and 592 for distance
and 592 for distances, the latter actually the result of an codes. These values were found by exhaustive searches using the program
exhaustive search). The true maximum is not known, but the value examples/enough.c found in the zlib distribtution. The arguments to that
below is more than safe. */ program are the number of symbols, the initial root table size, and the
#define ENOUGH 2048 maximum bit length of a code. "enough 286 9 15" for literal/length codes
#define MAXD 592 returns returns 852, and "enough 30 6 15" for distance codes returns 592.
The initial root table size (9 or 6) is found in the fifth argument of the
/* Type of code to build for inftable() */ inflate_table() calls in inflate.c and infback.c. If the root table size is
typedef enum { changed, then these maximum sizes would be need to be recalculated and
CODES, updated. */
LENS, #define ENOUGH_LENS 852
DISTS #define ENOUGH_DISTS 592
} codetype; #define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
extern int inflate_table OF((codetype type, unsigned short FAR *lens, /* Type of code to build for inflate_table() */
unsigned codes, code FAR * FAR *table, typedef enum {
unsigned FAR *bits, unsigned short FAR *work)); CODES,
LENS,
DISTS
} codetype;
int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
unsigned codes, code FAR * FAR *table,
unsigned FAR *bits, unsigned short FAR *work));

File diff suppressed because it is too large Load Diff

View File

@ -1,128 +1,128 @@
/* header created automatically with -DGEN_TREES_H */ /* header created automatically with -DGEN_TREES_H */
local const ct_data static_ltree[L_CODES+2] = { local const ct_data static_ltree[L_CODES+2] = {
{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, {{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}},
{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, {{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}},
{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, {{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}},
{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, {{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}},
{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, {{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}},
{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, {{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}},
{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, {{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}},
{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, {{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}},
{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, {{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}},
{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, {{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}},
{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, {{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}},
{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, {{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}},
{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, {{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}},
{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, {{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}},
{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, {{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}},
{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, {{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}},
{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, {{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}},
{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, {{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}},
{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, {{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}},
{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, {{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}},
{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, {{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}},
{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, {{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}},
{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, {{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}},
{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, {{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}},
{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, {{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}},
{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, {{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}},
{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, {{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}},
{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, {{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}},
{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, {{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}},
{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, {{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}},
{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, {{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}},
{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, {{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}},
{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, {{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}},
{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, {{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}},
{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, {{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}},
{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, {{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}},
{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, {{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}},
{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, {{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}},
{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, {{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}},
{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, {{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}},
{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, {{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}},
{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, {{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}},
{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, {{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}},
{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, {{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}},
{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, {{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}},
{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, {{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}},
{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, {{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}},
{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, {{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}},
{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, {{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}},
{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, {{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}},
{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, {{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}},
{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, {{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}},
{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, {{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}},
{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, {{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}},
{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, {{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}},
{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, {{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}},
{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, {{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}},
{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} {{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}}
}; };
local const ct_data static_dtree[D_CODES] = { local const ct_data static_dtree[D_CODES] = {
{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, {{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, {{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, {{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, {{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, {{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
}; };
const uch _dist_code[DIST_CODE_LEN] = { const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
}; };
const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {
0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
}; };
local const int base_length[LENGTH_CODES] = { local const int base_length[LENGTH_CODES] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
64, 80, 96, 112, 128, 160, 192, 224, 0 64, 80, 96, 112, 128, 160, 192, 224, 0
}; };
local const int base_dist[D_CODES] = { local const int base_dist[D_CODES] = {
0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
}; };

View File

@ -1,61 +1,59 @@
/* uncompr.c -- decompress a memory buffer /* uncompr.c -- decompress a memory buffer
* Copyright (C) 1995-2003 Jean-loup Gailly. * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
#define ZLIB_INTERNAL #define ZLIB_INTERNAL
#include "zlib.h" #include "zlib.h"
/* =========================================================================== /* ===========================================================================
Decompresses the source buffer into the destination buffer. sourceLen is Decompresses the source buffer into the destination buffer. sourceLen is
the byte length of the source buffer. Upon entry, destLen is the total 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 size of the destination buffer, which must be large enough to hold the
entire uncompressed data. (The size of the uncompressed data must have entire uncompressed data. (The size of the uncompressed data must have
been saved previously by the compressor and transmitted to the decompressor been saved previously by the compressor and transmitted to the decompressor
by some mechanism outside the scope of this compression library.) by some mechanism outside the scope of this compression library.)
Upon exit, destLen is the actual size of the compressed buffer. 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
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not buffer, or Z_DATA_ERROR if the input data was corrupted.
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. int ZEXPORT uncompress (dest, destLen, source, sourceLen)
*/ Bytef *dest;
int ZEXPORT uncompress (dest, destLen, source, sourceLen) uLongf *destLen;
Bytef *dest; const Bytef *source;
uLongf *destLen; uLong sourceLen;
const Bytef *source; {
uLong sourceLen; z_stream stream;
{ int err;
z_stream stream;
int err; stream.next_in = (z_const Bytef *)source;
stream.avail_in = (uInt)sourceLen;
stream.next_in = (Bytef*)source; /* Check for source > 64K on 16-bit machine: */
stream.avail_in = (uInt)sourceLen; if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
/* Check for source > 64K on 16-bit machine: */
if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; stream.next_out = dest;
stream.avail_out = (uInt)*destLen;
stream.next_out = dest; if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
stream.avail_out = (uInt)*destLen;
if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0; err = inflateInit(&stream);
if (err != Z_OK) return err;
err = inflateInit(&stream);
if (err != Z_OK) return err; err = inflate(&stream, Z_FINISH);
if (err != Z_STREAM_END) {
err = inflate(&stream, Z_FINISH); inflateEnd(&stream);
if (err != Z_STREAM_END) { if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
inflateEnd(&stream); return Z_DATA_ERROR;
if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) return err;
return Z_DATA_ERROR; }
return err; *destLen = stream.total_out;
}
*destLen = stream.total_out; err = inflateEnd(&stream);
return err;
err = inflateEnd(&stream); }
return err;
}

301
amxmodx/zlib/zconf.h → public/zlib/zconf.h Executable file → Normal file
View File

@ -1,60 +1,155 @@
/* zconf.h -- configuration of the zlib compression library /* zconf.h -- configuration of the zlib compression library
* Copyright (C) 1995-2005 Jean-loup Gailly. * Copyright (C) 1995-2013 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* @(#) $Id$ */
#ifndef ZCONF_H #ifndef ZCONF_H
#define ZCONF_H #define ZCONF_H
/* /*
* If you *really* need a unique prefix for all types and library functions, * 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. * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
* Even better than compiling with -DZ_PREFIX would be to use configure to set
* this permanently in zconf.h using "./configure --zprefix".
*/ */
#ifdef Z_PREFIX #ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
# define deflateInit_ z_deflateInit_ # define Z_PREFIX_SET
/* all linked symbols */
# define _dist_code z__dist_code
# define _length_code z__length_code
# define _tr_align z__tr_align
# define _tr_flush_bits z__tr_flush_bits
# define _tr_flush_block z__tr_flush_block
# define _tr_init z__tr_init
# define _tr_stored_block z__tr_stored_block
# define _tr_tally z__tr_tally
# define adler32 z_adler32
# define adler32_combine z_adler32_combine
# define adler32_combine64 z_adler32_combine64
# ifndef Z_SOLO
# define compress z_compress
# define compress2 z_compress2
# define compressBound z_compressBound
# endif
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
# define deflate z_deflate # 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 deflateParams z_deflateParams
# define deflateBound z_deflateBound # define deflateBound z_deflateBound
# define deflateCopy z_deflateCopy
# define deflateEnd z_deflateEnd
# define deflateInit2_ z_deflateInit2_
# define deflateInit_ z_deflateInit_
# define deflateParams z_deflateParams
# define deflatePending z_deflatePending
# define deflatePrime z_deflatePrime # define deflatePrime z_deflatePrime
# define inflateInit2_ z_inflateInit2_ # define deflateReset z_deflateReset
# define inflateSetDictionary z_inflateSetDictionary # define deflateResetKeep z_deflateResetKeep
# define inflateSync z_inflateSync # define deflateSetDictionary z_deflateSetDictionary
# define inflateSyncPoint z_inflateSyncPoint # define deflateSetHeader z_deflateSetHeader
# define inflateCopy z_inflateCopy # define deflateTune z_deflateTune
# define inflateReset z_inflateReset # define deflate_copyright z_deflate_copyright
# define get_crc_table z_get_crc_table
# ifndef Z_SOLO
# define gz_error z_gz_error
# define gz_intmax z_gz_intmax
# define gz_strwinerror z_gz_strwinerror
# define gzbuffer z_gzbuffer
# define gzclearerr z_gzclearerr
# define gzclose z_gzclose
# define gzclose_r z_gzclose_r
# define gzclose_w z_gzclose_w
# define gzdirect z_gzdirect
# define gzdopen z_gzdopen
# define gzeof z_gzeof
# define gzerror z_gzerror
# define gzflush z_gzflush
# define gzgetc z_gzgetc
# define gzgetc_ z_gzgetc_
# define gzgets z_gzgets
# define gzoffset z_gzoffset
# define gzoffset64 z_gzoffset64
# define gzopen z_gzopen
# define gzopen64 z_gzopen64
# ifdef _WIN32
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
# define gzvprintf z_gzvprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
# define gzread z_gzread
# define gzrewind z_gzrewind
# define gzseek z_gzseek
# define gzseek64 z_gzseek64
# define gzsetparams z_gzsetparams
# define gztell z_gztell
# define gztell64 z_gztell64
# define gzungetc z_gzungetc
# define gzwrite z_gzwrite
# endif
# define inflate z_inflate
# define inflateBack z_inflateBack # define inflateBack z_inflateBack
# define inflateBackEnd z_inflateBackEnd # define inflateBackEnd z_inflateBackEnd
# define compress z_compress # define inflateBackInit_ z_inflateBackInit_
# define compress2 z_compress2 # define inflateCopy z_inflateCopy
# define compressBound z_compressBound # define inflateEnd z_inflateEnd
# define uncompress z_uncompress # define inflateGetHeader z_inflateGetHeader
# define adler32 z_adler32 # define inflateInit2_ z_inflateInit2_
# define crc32 z_crc32 # define inflateInit_ z_inflateInit_
# define get_crc_table z_get_crc_table # define inflateMark z_inflateMark
# define inflatePrime z_inflatePrime
# define inflateReset z_inflateReset
# define inflateReset2 z_inflateReset2
# define inflateSetDictionary z_inflateSetDictionary
# define inflateGetDictionary z_inflateGetDictionary
# define inflateSync z_inflateSync
# define inflateSyncPoint z_inflateSyncPoint
# define inflateUndermine z_inflateUndermine
# define inflateResetKeep z_inflateResetKeep
# define inflate_copyright z_inflate_copyright
# define inflate_fast z_inflate_fast
# define inflate_table z_inflate_table
# ifndef Z_SOLO
# define uncompress z_uncompress
# endif
# define zError z_zError # define zError z_zError
# ifndef Z_SOLO
# define zcalloc z_zcalloc
# define zcfree z_zcfree
# endif
# define zlibCompileFlags z_zlibCompileFlags
# define zlibVersion z_zlibVersion
# define alloc_func z_alloc_func /* all zlib typedefs in zlib.h and zconf.h */
# define free_func z_free_func
# define in_func z_in_func
# define out_func z_out_func
# define Byte z_Byte # define Byte z_Byte
# define uInt z_uInt
# define uLong z_uLong
# define Bytef z_Bytef # define Bytef z_Bytef
# define alloc_func z_alloc_func
# define charf z_charf # define charf z_charf
# define free_func z_free_func
# ifndef Z_SOLO
# define gzFile z_gzFile
# endif
# define gz_header z_gz_header
# define gz_headerp z_gz_headerp
# define in_func z_in_func
# define intf z_intf # define intf z_intf
# define out_func z_out_func
# define uInt z_uInt
# define uIntf z_uIntf # define uIntf z_uIntf
# define uLong z_uLong
# define uLongf z_uLongf # define uLongf z_uLongf
# define voidpf z_voidpf
# define voidp z_voidp # define voidp z_voidp
# define voidpc z_voidpc
# define voidpf z_voidpf
/* all zlib structs in zlib.h and zconf.h */
# define gz_header_s z_gz_header_s
# define internal_state z_internal_state
#endif #endif
#if defined(__MSDOS__) && !defined(MSDOS) #if defined(__MSDOS__) && !defined(MSDOS)
@ -123,6 +218,12 @@
# endif # endif
#endif #endif
#if defined(ZLIB_CONST) && !defined(z_const)
# define z_const const
#else
# define z_const
#endif
/* Some Mac compilers merge all .h files incorrectly: */ /* Some Mac compilers merge all .h files incorrectly: */
#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
# define NO_DUMMY_DECL # define NO_DUMMY_DECL
@ -169,6 +270,14 @@
# endif # endif
#endif #endif
#ifndef Z_ARG /* function prototypes for stdarg */
# if defined(STDC) || defined(Z_HAVE_STDARG_H)
# define Z_ARG(args) args
# else
# define Z_ARG(args) ()
# endif
#endif
/* The following definitions for FAR are needed only for MSDOS mixed /* The following definitions for FAR are needed only for MSDOS mixed
* model programming (small or medium model with some far allocations). * model programming (small or medium model with some far allocations).
* This was tested only with MSC; for other MSDOS compilers you may have * This was tested only with MSC; for other MSDOS compilers you may have
@ -282,49 +391,121 @@ typedef uLong FAR uLongf;
typedef Byte *voidp; typedef Byte *voidp;
#endif #endif
#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
# include <sys/types.h> /* for off_t */ # include <limits.h>
# include <unistd.h> /* for SEEK_* and off_t */ # if (UINT_MAX == 0xffffffffUL)
# ifdef VMS # define Z_U4 unsigned
# include <unixio.h> /* for off_t */ # elif (ULONG_MAX == 0xffffffffUL)
# define Z_U4 unsigned long
# elif (USHRT_MAX == 0xffffffffUL)
# define Z_U4 unsigned short
# endif # endif
# define z_off_t off_t
#endif #endif
#ifndef SEEK_SET
#ifdef Z_U4
typedef Z_U4 z_crc_t;
#else
typedef unsigned long z_crc_t;
#endif
#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
# define Z_HAVE_UNISTD_H
#endif
#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
# define Z_HAVE_STDARG_H
#endif
#ifdef STDC
# ifndef Z_SOLO
# include <sys/types.h> /* for off_t */
# endif
#endif
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
# ifndef Z_SOLO
# include <stdarg.h> /* for va_list */
# endif
#endif
#ifdef _WIN32
# ifndef Z_SOLO
# include <stddef.h> /* for wchar_t */
# endif
#endif
/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
* "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
* though the former does not conform to the LFS document), but considering
* both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
* equivalently requesting no 64-bit operations
*/
#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
# undef _LARGEFILE64_SOURCE
#endif
#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
# define Z_HAVE_UNISTD_H
#endif
#ifndef Z_SOLO
# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
# ifdef VMS
# include <unixio.h> /* for off_t */
# endif
# ifndef z_off_t
# define z_off_t off_t
# endif
# endif
#endif
#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
# define Z_LFS64
#endif
#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
# define Z_LARGE64
#endif
#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
# define Z_WANT64
#endif
#if !defined(SEEK_SET) && !defined(Z_SOLO)
# define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_SET 0 /* Seek from beginning of file. */
# define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_CUR 1 /* Seek from current position. */
# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
#endif #endif
#ifndef z_off_t #ifndef z_off_t
# define z_off_t long # define z_off_t long
#endif #endif
#if defined(__OS400__) #if !defined(_WIN32) && defined(Z_LARGE64)
# define NO_vsnprintf # define z_off64_t off64_t
#endif #else
# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
#if defined(__MVS__) # define z_off64_t __int64
# define NO_vsnprintf # else
# ifdef FAR # define z_off64_t z_off_t
# undef FAR
# endif # endif
#endif #endif
/* MVS linker does not support external names larger than 8 bytes */ /* MVS linker does not support external names larger than 8 bytes */
#if defined(__MVS__) #if defined(__MVS__)
# pragma map(deflateInit_,"DEIN") #pragma map(deflateInit_,"DEIN")
# pragma map(deflateInit2_,"DEIN2") #pragma map(deflateInit2_,"DEIN2")
# pragma map(deflateEnd,"DEEND") #pragma map(deflateEnd,"DEEND")
# pragma map(deflateBound,"DEBND") #pragma map(deflateBound,"DEBND")
# pragma map(inflateInit_,"ININ") #pragma map(inflateInit_,"ININ")
# pragma map(inflateInit2_,"ININ2") #pragma map(inflateInit2_,"ININ2")
# pragma map(inflateEnd,"INEND") #pragma map(inflateEnd,"INEND")
# pragma map(inflateSync,"INSY") #pragma map(inflateSync,"INSY")
# pragma map(inflateSetDictionary,"INSEDI") #pragma map(inflateSetDictionary,"INSEDI")
# pragma map(compressBound,"CMBND") #pragma map(compressBound,"CMBND")
# pragma map(inflate_table,"INTABL") #pragma map(inflate_table,"INTABL")
# pragma map(inflate_fast,"INFA") #pragma map(inflate_fast,"INFA")
# pragma map(inflate_copyright,"INCOPY") #pragma map(inflate_copyright,"INCOPY")
#endif #endif
#endif /* ZCONF_H */ #endif /* ZCONF_H */

1768
public/zlib/zlib.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,319 +1,324 @@
/* zutil.c -- target dependent utility functions for the compression library /* zutil.c -- target dependent utility functions for the compression library
* Copyright (C) 1995-2005 Jean-loup Gailly. * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
#include <stdio.h> #include "zutil.h"
#include "zutil.h" #ifndef Z_SOLO
# include "gzguts.h"
#ifndef NO_DUMMY_DECL #endif
struct internal_state {int dummy;}; /* for buggy compilers */
#endif #ifndef NO_DUMMY_DECL
struct internal_state {int dummy;}; /* for buggy compilers */
const char * const z_errmsg[10] = { #endif
"need dictionary", /* Z_NEED_DICT 2 */
"stream end", /* Z_STREAM_END 1 */ z_const char * const z_errmsg[10] = {
"", /* Z_OK 0 */ "need dictionary", /* Z_NEED_DICT 2 */
"file error", /* Z_ERRNO (-1) */ "stream end", /* Z_STREAM_END 1 */
"stream error", /* Z_STREAM_ERROR (-2) */ "", /* Z_OK 0 */
"data error", /* Z_DATA_ERROR (-3) */ "file error", /* Z_ERRNO (-1) */
"insufficient memory", /* Z_MEM_ERROR (-4) */ "stream error", /* Z_STREAM_ERROR (-2) */
"buffer error", /* Z_BUF_ERROR (-5) */ "data error", /* Z_DATA_ERROR (-3) */
"incompatible version",/* Z_VERSION_ERROR (-6) */ "insufficient memory", /* Z_MEM_ERROR (-4) */
""}; "buffer error", /* Z_BUF_ERROR (-5) */
"incompatible version",/* Z_VERSION_ERROR (-6) */
""};
const char * ZEXPORT zlibVersion()
{
return ZLIB_VERSION; const char * ZEXPORT zlibVersion()
} {
return ZLIB_VERSION;
uLong ZEXPORT zlibCompileFlags() }
{
uLong flags; uLong ZEXPORT zlibCompileFlags()
{
flags = 0; uLong flags;
switch (sizeof(uInt)) {
case 2: break; flags = 0;
case 4: flags += 1; break; switch ((int)(sizeof(uInt))) {
case 8: flags += 2; break; case 2: break;
default: flags += 3; case 4: flags += 1; break;
} case 8: flags += 2; break;
switch (sizeof(uLong)) { default: flags += 3;
case 2: break; }
case 4: flags += 1 << 2; break; switch ((int)(sizeof(uLong))) {
case 8: flags += 2 << 2; break; case 2: break;
default: flags += 3 << 2; case 4: flags += 1 << 2; break;
} case 8: flags += 2 << 2; break;
switch (sizeof(voidpf)) { default: flags += 3 << 2;
case 2: break; }
case 4: flags += 1 << 4; break; switch ((int)(sizeof(voidpf))) {
case 8: flags += 2 << 4; break; case 2: break;
default: flags += 3 << 4; case 4: flags += 1 << 4; break;
} case 8: flags += 2 << 4; break;
switch (sizeof(z_off_t)) { default: flags += 3 << 4;
case 2: break; }
case 4: flags += 1 << 6; break; switch ((int)(sizeof(z_off_t))) {
case 8: flags += 2 << 6; break; case 2: break;
default: flags += 3 << 6; case 4: flags += 1 << 6; break;
} case 8: flags += 2 << 6; break;
#ifdef DEBUG default: flags += 3 << 6;
flags += 1 << 8; }
#endif #ifdef DEBUG
#if defined(ASMV) || defined(ASMINF) flags += 1 << 8;
flags += 1 << 9; #endif
#endif #if defined(ASMV) || defined(ASMINF)
#ifdef ZLIB_WINAPI flags += 1 << 9;
flags += 1 << 10; #endif
#endif #ifdef ZLIB_WINAPI
#ifdef BUILDFIXED flags += 1 << 10;
flags += 1 << 12; #endif
#endif #ifdef BUILDFIXED
#ifdef DYNAMIC_CRC_TABLE flags += 1 << 12;
flags += 1 << 13; #endif
#endif #ifdef DYNAMIC_CRC_TABLE
#ifdef NO_GZCOMPRESS flags += 1 << 13;
flags += 1L << 16; #endif
#endif #ifdef NO_GZCOMPRESS
#ifdef NO_GZIP flags += 1L << 16;
flags += 1L << 17; #endif
#endif #ifdef NO_GZIP
#ifdef PKZIP_BUG_WORKAROUND flags += 1L << 17;
flags += 1L << 20; #endif
#endif #ifdef PKZIP_BUG_WORKAROUND
#ifdef FASTEST flags += 1L << 20;
flags += 1L << 21; #endif
#endif #ifdef FASTEST
#ifdef STDC flags += 1L << 21;
# ifdef NO_vsnprintf #endif
flags += 1L << 25; #if defined(STDC) || defined(Z_HAVE_STDARG_H)
# ifdef HAS_vsprintf_void # ifdef NO_vsnprintf
flags += 1L << 26; flags += 1L << 25;
# endif # ifdef HAS_vsprintf_void
# else flags += 1L << 26;
# ifdef HAS_vsnprintf_void # endif
flags += 1L << 26; # else
# endif # ifdef HAS_vsnprintf_void
# endif flags += 1L << 26;
#else # endif
flags += 1L << 24; # endif
# ifdef NO_snprintf #else
flags += 1L << 25; flags += 1L << 24;
# ifdef HAS_sprintf_void # ifdef NO_snprintf
flags += 1L << 26; flags += 1L << 25;
# endif # ifdef HAS_sprintf_void
# else flags += 1L << 26;
# ifdef HAS_snprintf_void # endif
flags += 1L << 26; # else
# endif # ifdef HAS_snprintf_void
# endif flags += 1L << 26;
#endif # endif
return flags; # endif
} #endif
return flags;
#ifdef DEBUG }
# ifndef verbose #ifdef DEBUG
# define verbose 0
# endif # ifndef verbose
int z_verbose = verbose; # define verbose 0
# endif
void z_error (m) int ZLIB_INTERNAL z_verbose = verbose;
char *m;
{ void ZLIB_INTERNAL z_error (m)
fprintf(stderr, "%s\n", m); char *m;
exit(1); {
} fprintf(stderr, "%s\n", m);
#endif exit(1);
}
/* exported to allow conversion of error code to string for compress() and #endif
* uncompress()
*/ /* exported to allow conversion of error code to string for compress() and
const char * ZEXPORT zError(err) * uncompress()
int err; */
{ const char * ZEXPORT zError(err)
return ERR_MSG(err); int err;
} {
return ERR_MSG(err);
#if defined(_WIN32_WCE) }
/* The Microsoft C Run-Time Library for Windows CE doesn't have
* errno. We define it as a global variable to simplify porting. #if defined(_WIN32_WCE)
* Its value is always 0 and should not be used. /* The Microsoft C Run-Time Library for Windows CE doesn't have
*/ * errno. We define it as a global variable to simplify porting.
int errno = 0; * Its value is always 0 and should not be used.
#endif */
int errno = 0;
#ifndef HAVE_MEMCPY #endif
void zmemcpy(dest, source, len) #ifndef HAVE_MEMCPY
Bytef* dest;
const Bytef* source; void ZLIB_INTERNAL zmemcpy(dest, source, len)
uInt len; Bytef* dest;
{ const Bytef* source;
if (len == 0) return; uInt len;
do { {
*dest++ = *source++; /* ??? to be unrolled */ if (len == 0) return;
} while (--len != 0); do {
} *dest++ = *source++; /* ??? to be unrolled */
} while (--len != 0);
int zmemcmp(s1, s2, len) }
const Bytef* s1;
const Bytef* s2; int ZLIB_INTERNAL zmemcmp(s1, s2, len)
uInt len; const Bytef* s1;
{ const Bytef* s2;
uInt j; uInt len;
{
for (j = 0; j < len; j++) { uInt j;
if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
} for (j = 0; j < len; j++) {
return 0; if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
} }
return 0;
void zmemzero(dest, len) }
Bytef* dest;
uInt len; void ZLIB_INTERNAL zmemzero(dest, len)
{ Bytef* dest;
if (len == 0) return; uInt len;
do { {
*dest++ = 0; /* ??? to be unrolled */ if (len == 0) return;
} while (--len != 0); do {
} *dest++ = 0; /* ??? to be unrolled */
#endif } while (--len != 0);
}
#endif
#ifdef SYS16BIT
#ifndef Z_SOLO
#ifdef __TURBOC__
/* Turbo C in 16-bit mode */ #ifdef SYS16BIT
# define MY_ZCALLOC #ifdef __TURBOC__
/* Turbo C in 16-bit mode */
/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
* and farmalloc(64K) returns a pointer with an offset of 8, so we # define MY_ZCALLOC
* must fix the pointer. Warning: the pointer must be put back to its
* original form in order to free it, use zcfree(). /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
*/ * and farmalloc(64K) returns a pointer with an offset of 8, so we
* must fix the pointer. Warning: the pointer must be put back to its
#define MAX_PTR 10 * original form in order to free it, use zcfree().
/* 10*64K = 640K */ */
local int next_ptr = 0; #define MAX_PTR 10
/* 10*64K = 640K */
typedef struct ptr_table_s {
voidpf org_ptr; local int next_ptr = 0;
voidpf new_ptr;
} ptr_table; typedef struct ptr_table_s {
voidpf org_ptr;
local ptr_table table[MAX_PTR]; voidpf new_ptr;
/* This table is used to remember the original form of pointers } ptr_table;
* to large buffers (64K). Such pointers are normalized with a zero offset.
* Since MSDOS is not a preemptive multitasking OS, this table is not local ptr_table table[MAX_PTR];
* protected from concurrent access. This hack doesn't work anyway on /* This table is used to remember the original form of pointers
* a protected system like OS/2. Use Microsoft C instead. * to large buffers (64K). Such pointers are normalized with a zero offset.
*/ * Since MSDOS is not a preemptive multitasking OS, this table is not
* protected from concurrent access. This hack doesn't work anyway on
voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) * a protected system like OS/2. Use Microsoft C instead.
{ */
voidpf buf = opaque; /* just to make some compilers happy */
ulg bsize = (ulg)items*size; voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
{
/* If we allocate less than 65520 bytes, we assume that farmalloc voidpf buf = opaque; /* just to make some compilers happy */
* will return a usable pointer which doesn't have to be normalized. ulg bsize = (ulg)items*size;
*/
if (bsize < 65520L) { /* If we allocate less than 65520 bytes, we assume that farmalloc
buf = farmalloc(bsize); * will return a usable pointer which doesn't have to be normalized.
if (*(ush*)&buf != 0) return buf; */
} else { if (bsize < 65520L) {
buf = farmalloc(bsize + 16L); buf = farmalloc(bsize);
} if (*(ush*)&buf != 0) return buf;
if (buf == NULL || next_ptr >= MAX_PTR) return NULL; } else {
table[next_ptr].org_ptr = buf; buf = farmalloc(bsize + 16L);
}
/* Normalize the pointer to seg:0 */ if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
*((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; table[next_ptr].org_ptr = buf;
*(ush*)&buf = 0;
table[next_ptr++].new_ptr = buf; /* Normalize the pointer to seg:0 */
return buf; *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
} *(ush*)&buf = 0;
table[next_ptr++].new_ptr = buf;
void zcfree (voidpf opaque, voidpf ptr) return buf;
{ }
int n;
if (*(ush*)&ptr != 0) { /* object < 64K */ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
farfree(ptr); {
return; int n;
} if (*(ush*)&ptr != 0) { /* object < 64K */
/* Find the original pointer */ farfree(ptr);
for (n = 0; n < next_ptr; n++) { return;
if (ptr != table[n].new_ptr) continue; }
/* Find the original pointer */
farfree(table[n].org_ptr); for (n = 0; n < next_ptr; n++) {
while (++n < next_ptr) { if (ptr != table[n].new_ptr) continue;
table[n-1] = table[n];
} farfree(table[n].org_ptr);
next_ptr--; while (++n < next_ptr) {
return; table[n-1] = table[n];
} }
ptr = opaque; /* just to make some compilers happy */ next_ptr--;
Assert(0, "zcfree: ptr not found"); return;
} }
ptr = opaque; /* just to make some compilers happy */
#endif /* __TURBOC__ */ Assert(0, "zcfree: ptr not found");
}
#ifdef M_I86 #endif /* __TURBOC__ */
/* Microsoft C in 16-bit mode */
# define MY_ZCALLOC #ifdef M_I86
/* Microsoft C in 16-bit mode */
#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
# define _halloc halloc # define MY_ZCALLOC
# define _hfree hfree
#endif #if (!defined(_MSC_VER) || (_MSC_VER <= 600))
# define _halloc halloc
voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) # define _hfree hfree
{ #endif
if (opaque) opaque = 0; /* to make compiler happy */
return _halloc((long)items, size); voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
} {
if (opaque) opaque = 0; /* to make compiler happy */
void zcfree (voidpf opaque, voidpf ptr) return _halloc((long)items, size);
{ }
if (opaque) opaque = 0; /* to make compiler happy */
_hfree(ptr); void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
} {
if (opaque) opaque = 0; /* to make compiler happy */
#endif /* M_I86 */ _hfree(ptr);
}
#endif /* SYS16BIT */
#endif /* M_I86 */
#ifndef MY_ZCALLOC /* Any system without a special alloc function */ #endif /* SYS16BIT */
#ifndef STDC
extern voidp malloc OF((uInt size)); #ifndef MY_ZCALLOC /* Any system without a special alloc function */
extern voidp calloc OF((uInt items, uInt size));
extern void free OF((voidpf ptr)); #ifndef STDC
#endif extern voidp malloc OF((uInt size));
extern voidp calloc OF((uInt items, uInt size));
voidpf zcalloc (opaque, items, size) extern void free OF((voidpf ptr));
voidpf opaque; #endif
unsigned items;
unsigned size; voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
{ voidpf opaque;
if (opaque) items += size - size; /* make compiler happy */ unsigned items;
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : unsigned size;
(voidpf)calloc(items, size); {
} if (opaque) items += size - size; /* make compiler happy */
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
void zcfree (opaque, ptr) (voidpf)calloc(items, size);
voidpf opaque; }
voidpf ptr;
{ void ZLIB_INTERNAL zcfree (opaque, ptr)
free(ptr); voidpf opaque;
if (opaque) return; /* make compiler happy */ voidpf ptr;
} {
free(ptr);
#endif /* MY_ZCALLOC */ if (opaque) return; /* make compiler happy */
}
#endif /* MY_ZCALLOC */
#endif /* !Z_SOLO */

View File

@ -1,269 +1,253 @@
/* zutil.h -- internal interface and configuration of the compression library /* zutil.h -- internal interface and configuration of the compression library
* Copyright (C) 1995-2005 Jean-loup Gailly. * Copyright (C) 1995-2013 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h * For conditions of distribution and use, see copyright notice in zlib.h
*/ */
/* WARNING: this file should *not* be used by applications. It is /* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h. subject to change. Applications should only use zlib.h.
*/ */
/* @(#) $Id$ */ /* @(#) $Id$ */
#ifndef ZUTIL_H #ifndef ZUTIL_H
#define ZUTIL_H #define ZUTIL_H
#define ZLIB_INTERNAL #ifdef HAVE_HIDDEN
#include "zlib.h" # define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
#else
#ifdef STDC # define ZLIB_INTERNAL
# ifndef _WIN32_WCE #endif
# include <stddef.h>
# endif #include "zlib.h"
# include <string.h>
# include <stdlib.h> #if defined(STDC) && !defined(Z_SOLO)
#endif # if !(defined(_WIN32_WCE) && defined(_MSC_VER))
#ifdef NO_ERRNO_H # include <stddef.h>
# ifdef _WIN32_WCE # endif
/* The Microsoft C Run-Time Library for Windows CE doesn't have # include <string.h>
* errno. We define it as a global variable to simplify porting. # include <stdlib.h>
* Its value is always 0 and should not be used. We rename it to #endif
* avoid conflict with other libraries that use the same workaround.
*/ #ifdef Z_SOLO
# define errno z_errno typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
# endif #endif
extern int errno;
#else #ifndef local
# ifndef _WIN32_WCE # define local static
# include <errno.h> #endif
# endif /* compile with -Dlocal if your debugger can't find static symbols */
#endif
typedef unsigned char uch;
#ifndef local typedef uch FAR uchf;
# define local static typedef unsigned short ush;
#endif typedef ush FAR ushf;
/* compile with -Dlocal if your debugger can't find static symbols */ typedef unsigned long ulg;
typedef unsigned char uch; extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
typedef uch FAR uchf; /* (size given to avoid silly warnings with Visual C++) */
typedef unsigned short ush;
typedef ush FAR ushf; #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
typedef unsigned long ulg;
#define ERR_RETURN(strm,err) \
extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ return (strm->msg = ERR_MSG(err), (err))
/* (size given to avoid silly warnings with Visual C++) */ /* To be used only when the state is known to be valid */
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] /* common constants */
#define ERR_RETURN(strm,err) \ #ifndef DEF_WBITS
return (strm->msg = (char*)ERR_MSG(err), (err)) # define DEF_WBITS MAX_WBITS
/* To be used only when the state is known to be valid */ #endif
/* default windowBits for decompression. MAX_WBITS is for compression only */
/* common constants */
#if MAX_MEM_LEVEL >= 8
#ifndef DEF_WBITS # define DEF_MEM_LEVEL 8
# define DEF_WBITS MAX_WBITS #else
#endif # define DEF_MEM_LEVEL MAX_MEM_LEVEL
/* default windowBits for decompression. MAX_WBITS is for compression only */ #endif
/* default memLevel */
#if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8 #define STORED_BLOCK 0
#else #define STATIC_TREES 1
# define DEF_MEM_LEVEL MAX_MEM_LEVEL #define DYN_TREES 2
#endif /* The three kinds of block type */
/* default memLevel */
#define MIN_MATCH 3
#define STORED_BLOCK 0 #define MAX_MATCH 258
#define STATIC_TREES 1 /* The minimum and maximum match lengths */
#define DYN_TREES 2
/* The three kinds of block type */ #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
#define MIN_MATCH 3 /* target dependencies */
#define MAX_MATCH 258
/* The minimum and maximum match lengths */ #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
# define OS_CODE 0x00
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ # ifndef Z_SOLO
# if defined(__TURBOC__) || defined(__BORLANDC__)
/* target dependencies */ # if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
/* Allow compilation with ANSI keywords only enabled */
#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) void _Cdecl farfree( void *block );
# define OS_CODE 0x00 void *_Cdecl farmalloc( unsigned long nbytes );
# if defined(__TURBOC__) || defined(__BORLANDC__) # else
# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) # include <alloc.h>
/* Allow compilation with ANSI keywords only enabled */ # endif
void _Cdecl farfree( void *block ); # else /* MSC or DJGPP */
void *_Cdecl farmalloc( unsigned long nbytes ); # include <malloc.h>
# else # endif
# include <alloc.h> # endif
# endif #endif
# else /* MSC or DJGPP */
# include <malloc.h> #ifdef AMIGA
# endif # define OS_CODE 0x01
#endif #endif
#ifdef AMIGA #if defined(VAXC) || defined(VMS)
# define OS_CODE 0x01 # define OS_CODE 0x02
#endif # define F_OPEN(name, mode) \
fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
#if defined(VAXC) || defined(VMS) #endif
# define OS_CODE 0x02
# define F_OPEN(name, mode) \ #if defined(ATARI) || defined(atarist)
fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") # define OS_CODE 0x05
#endif #endif
#if defined(ATARI) || defined(atarist) #ifdef OS2
# define OS_CODE 0x05 # define OS_CODE 0x06
#endif # if defined(M_I86) && !defined(Z_SOLO)
# include <malloc.h>
#ifdef OS2 # endif
# define OS_CODE 0x06 #endif
# ifdef M_I86
#include <malloc.h> #if defined(MACOS) || defined(TARGET_OS_MAC)
# endif # define OS_CODE 0x07
#endif # ifndef Z_SOLO
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
#if defined(MACOS) || defined(TARGET_OS_MAC) # include <unix.h> /* for fdopen */
# define OS_CODE 0x07 # else
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os # ifndef fdopen
# include <unix.h> /* for fdopen */ # define fdopen(fd,mode) NULL /* No fdopen() */
# else # endif
# ifndef fdopen # endif
# define fdopen(fd,mode) NULL /* No fdopen() */ # endif
# endif #endif
# endif
#endif #ifdef TOPS20
# define OS_CODE 0x0a
#ifdef TOPS20 #endif
# define OS_CODE 0x0a
#endif #ifdef WIN32
# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
#ifdef WIN32 # define OS_CODE 0x0b
# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ # endif
# define OS_CODE 0x0b #endif
# endif
#endif #ifdef __50SERIES /* Prime/PRIMOS */
# define OS_CODE 0x0f
#ifdef __50SERIES /* Prime/PRIMOS */ #endif
# define OS_CODE 0x0f
#endif #if defined(_BEOS_) || defined(RISCOS)
# define fdopen(fd,mode) NULL /* No fdopen() */
#if defined(_BEOS_) || defined(RISCOS) #endif
# define fdopen(fd,mode) NULL /* No fdopen() */
#endif #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
# if defined(_WIN32_WCE)
#if (defined(_MSC_VER) && (_MSC_VER > 600)) # define fdopen(fd,mode) NULL /* No fdopen() */
# if defined(_WIN32_WCE) # ifndef _PTRDIFF_T_DEFINED
# define fdopen(fd,mode) NULL /* No fdopen() */ typedef int ptrdiff_t;
# ifndef _PTRDIFF_T_DEFINED # define _PTRDIFF_T_DEFINED
typedef int ptrdiff_t; # endif
# define _PTRDIFF_T_DEFINED # else
# endif # define fdopen(fd,type) _fdopen(fd,type)
# else # endif
# define fdopen(fd,type) _fdopen(fd,type) #endif
# endif
#endif #if defined(__BORLANDC__) && !defined(MSDOS)
#pragma warn -8004
/* common defaults */ #pragma warn -8008
#pragma warn -8066
#ifndef OS_CODE #endif
# define OS_CODE 0x03 /* assume Unix */
#endif /* provide prototypes for these when building zlib without LFS */
#if !defined(_WIN32) && \
#ifndef F_OPEN (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
# define F_OPEN(name, mode) fopen((name), (mode)) ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
#endif ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
#endif
/* functions */
/* common defaults */
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
# ifndef HAVE_VSNPRINTF #ifndef OS_CODE
# define HAVE_VSNPRINTF # define OS_CODE 0x03 /* assume Unix */
# endif #endif
#endif
#if defined(__CYGWIN__) #ifndef F_OPEN
# ifndef HAVE_VSNPRINTF # define F_OPEN(name, mode) fopen((name), (mode))
# define HAVE_VSNPRINTF #endif
# endif
#endif /* functions */
#ifndef HAVE_VSNPRINTF
# ifdef MSDOS #if defined(pyr) || defined(Z_SOLO)
/* vsnprintf may exist on some MS-DOS compilers (DJGPP?), # define NO_MEMCPY
but for now we just assume it doesn't. */ #endif
# define NO_vsnprintf #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
# endif /* Use our own functions for small and medium model with MSC <= 5.0.
# ifdef __TURBOC__ * You may have to use the same strategy for Borland C (untested).
# define NO_vsnprintf * The __SC__ check is for Symantec.
# endif */
# ifdef WIN32 # define NO_MEMCPY
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ #endif
# if !defined(vsnprintf) && !defined(NO_vsnprintf) #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
# define vsnprintf _vsnprintf # define HAVE_MEMCPY
# endif #endif
# endif #ifdef HAVE_MEMCPY
# ifdef __SASC # ifdef SMALL_MEDIUM /* MSDOS small or medium model */
# define NO_vsnprintf # define zmemcpy _fmemcpy
# endif # define zmemcmp _fmemcmp
#endif # define zmemzero(dest, len) _fmemset(dest, 0, len)
#ifdef VMS # else
# define NO_vsnprintf # define zmemcpy memcpy
#endif # define zmemcmp memcmp
# define zmemzero(dest, len) memset(dest, 0, len)
#if defined(pyr) # endif
# define NO_MEMCPY #else
#endif void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
/* Use our own functions for small and medium model with MSC <= 5.0. void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
* You may have to use the same strategy for Borland C (untested). #endif
* The __SC__ check is for Symantec.
*/ /* Diagnostic functions */
# define NO_MEMCPY #ifdef DEBUG
#endif # include <stdio.h>
#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) extern int ZLIB_INTERNAL z_verbose;
# define HAVE_MEMCPY extern void ZLIB_INTERNAL z_error OF((char *m));
#endif # define Assert(cond,msg) {if(!(cond)) z_error(msg);}
#ifdef HAVE_MEMCPY # define Trace(x) {if (z_verbose>=0) fprintf x ;}
# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ # define Tracev(x) {if (z_verbose>0) fprintf x ;}
# define zmemcpy _fmemcpy # define Tracevv(x) {if (z_verbose>1) fprintf x ;}
# define zmemcmp _fmemcmp # define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
# define zmemzero(dest, len) _fmemset(dest, 0, len) # define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
# else #else
# define zmemcpy memcpy # define Assert(cond,msg)
# define zmemcmp memcmp # define Trace(x)
# define zmemzero(dest, len) memset(dest, 0, len) # define Tracev(x)
# endif # define Tracevv(x)
#else # define Tracec(c,x)
extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); # define Tracecv(c,x)
extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); #endif
extern void zmemzero OF((Bytef* dest, uInt len));
#endif #ifndef Z_SOLO
voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
/* Diagnostic functions */ unsigned size));
#ifdef DEBUG void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
# include <stdio.h> #endif
extern int z_verbose;
extern void z_error OF((char *m)); #define ZALLOC(strm, items, size) \
# define Assert(cond,msg) {if(!(cond)) z_error(msg);} (*((strm)->zalloc))((strm)->opaque, (items), (size))
# define Trace(x) {if (z_verbose>=0) fprintf x ;} #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
# define Tracev(x) {if (z_verbose>0) fprintf x ;} #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} /* Reverse the bytes in a 32-bit value */
# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} #define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
#else (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
# define Assert(cond,msg)
# define Trace(x) #endif /* ZUTIL_H */
# define Tracev(x)
# define Tracevv(x)
# define Tracec(c,x)
# define Tracecv(c,x)
#endif
voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
void zcfree OF((voidpf opaque, voidpf ptr));
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
#endif /* ZUTIL_H */