Updated zlib, added chat formatting, fixed upside down stairs and slabs, fixed makefiles, hopefully updated vc project files
git-svn-id: http://mc-server.googlecode.com/svn/trunk@546 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
0cc4395a97
commit
b17d12c86f
@ -48,7 +48,7 @@ INCLUDE = -I.\
|
|||||||
-Isource/packets\
|
-Isource/packets\
|
||||||
-Itolua++-1.0.93/src/lib\
|
-Itolua++-1.0.93/src/lib\
|
||||||
-Ilua-5.1.4/src\
|
-Ilua-5.1.4/src\
|
||||||
-Izlib-1.2.5\
|
-Izlib-1.2.7\
|
||||||
-IiniFile\
|
-IiniFile\
|
||||||
-Itolua++-1.0.93/include\
|
-Itolua++-1.0.93/include\
|
||||||
-Ijsoncpp-src-0.5.0/include\
|
-Ijsoncpp-src-0.5.0/include\
|
||||||
@ -58,7 +58,7 @@ INCLUDE = -I.\
|
|||||||
# Build MCServer
|
# Build MCServer
|
||||||
#
|
#
|
||||||
|
|
||||||
SOURCES := $(shell find lua-5.1.4 jsoncpp-src-0.5.0 zlib-1.2.5 source tolua++-1.0.93 iniFile WebServer '(' -name '*.cpp' -o -name '*.c' ')')
|
SOURCES := $(shell find lua-5.1.4 jsoncpp-src-0.5.0 zlib-1.2.7 source tolua++-1.0.93 iniFile WebServer '(' -name '*.cpp' -o -name '*.c' ')')
|
||||||
SOURCES := $(filter-out %minigzip.c %lua.c %tolua.c %toluabind.c %LeakFinder.cpp %StackWalker.cpp %example.c,$(SOURCES))
|
SOURCES := $(filter-out %minigzip.c %lua.c %tolua.c %toluabind.c %LeakFinder.cpp %StackWalker.cpp %example.c,$(SOURCES))
|
||||||
OBJECTS := $(patsubst %.c,$(BUILDDIR)%.o,$(SOURCES))
|
OBJECTS := $(patsubst %.c,$(BUILDDIR)%.o,$(SOURCES))
|
||||||
OBJECTS := $(patsubst %.cpp,$(BUILDDIR)%.o,$(OBJECTS))
|
OBJECTS := $(patsubst %.cpp,$(BUILDDIR)%.o,$(OBJECTS))
|
||||||
|
@ -1383,6 +1383,10 @@
|
|||||||
RelativePath="..\source\cStairs.h"
|
RelativePath="..\source\cStairs.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cStep.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cTorch.h"
|
RelativePath="..\source\cTorch.h"
|
||||||
>
|
>
|
||||||
|
@ -559,6 +559,7 @@
|
|||||||
<ClInclude Include="..\source\cSpider.h" />
|
<ClInclude Include="..\source\cSpider.h" />
|
||||||
<ClInclude Include="..\source\cSquid.h" />
|
<ClInclude Include="..\source\cSquid.h" />
|
||||||
<ClInclude Include="..\source\cStairs.h" />
|
<ClInclude Include="..\source\cStairs.h" />
|
||||||
|
<ClInclude Include="..\source\cStep.h" />
|
||||||
<ClInclude Include="..\source\cStringMap.h" />
|
<ClInclude Include="..\source\cStringMap.h" />
|
||||||
<ClInclude Include="..\source\cSurvivalInventory.h" />
|
<ClInclude Include="..\source\cSurvivalInventory.h" />
|
||||||
<ClInclude Include="..\Source\cTCPLink.h" />
|
<ClInclude Include="..\Source\cTCPLink.h" />
|
||||||
@ -704,4 +705,4 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -113,36 +113,36 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\zlib-1.2.5\adler32.c" />
|
<ClCompile Include="..\zlib-1.2.7\adler32.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\compress.c" />
|
<ClCompile Include="..\zlib-1.2.7\compress.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\crc32.c" />
|
<ClCompile Include="..\zlib-1.2.7\crc32.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\deflate.c" />
|
<ClCompile Include="..\zlib-1.2.7\deflate.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\gzclose.c" />
|
<ClCompile Include="..\zlib-1.2.7\gzclose.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\gzlib.c" />
|
<ClCompile Include="..\zlib-1.2.7\gzlib.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\gzread.c" />
|
<ClCompile Include="..\zlib-1.2.7\gzread.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\gzwrite.c" />
|
<ClCompile Include="..\zlib-1.2.7\gzwrite.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\infback.c" />
|
<ClCompile Include="..\zlib-1.2.7\infback.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\inffast.c" />
|
<ClCompile Include="..\zlib-1.2.7\inffast.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\inflate.c" />
|
<ClCompile Include="..\zlib-1.2.7\inflate.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\inftrees.c" />
|
<ClCompile Include="..\zlib-1.2.7\inftrees.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\trees.c" />
|
<ClCompile Include="..\zlib-1.2.7\trees.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\uncompr.c" />
|
<ClCompile Include="..\zlib-1.2.7\uncompr.c" />
|
||||||
<ClCompile Include="..\zlib-1.2.5\zutil.c" />
|
<ClCompile Include="..\zlib-1.2.7\zutil.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\zlib-1.2.5\crc32.h" />
|
<ClInclude Include="..\zlib-1.2.7\crc32.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\deflate.h" />
|
<ClInclude Include="..\zlib-1.2.7\deflate.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\gzguts.h" />
|
<ClInclude Include="..\zlib-1.2.7\gzguts.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\inffast.h" />
|
<ClInclude Include="..\zlib-1.2.7\inffast.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\inffixed.h" />
|
<ClInclude Include="..\zlib-1.2.7\inffixed.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\inflate.h" />
|
<ClInclude Include="..\zlib-1.2.7\inflate.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\inftrees.h" />
|
<ClInclude Include="..\zlib-1.2.7\inftrees.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\trees.h" />
|
<ClInclude Include="..\zlib-1.2.7\trees.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\zconf.h" />
|
<ClInclude Include="..\zlib-1.2.7\zconf.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\zlib.h" />
|
<ClInclude Include="..\zlib-1.2.7\zlib.h" />
|
||||||
<ClInclude Include="..\zlib-1.2.5\zutil.h" />
|
<ClInclude Include="..\zlib-1.2.7\zutil.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
204
makefile_base
204
makefile_base
@ -21,7 +21,7 @@ INCLUDE = -I.\
|
|||||||
-Isource/packets\
|
-Isource/packets\
|
||||||
-Itolua++-1.0.93/src/lib\
|
-Itolua++-1.0.93/src/lib\
|
||||||
-Ilua-5.1.4/src\
|
-Ilua-5.1.4/src\
|
||||||
-Izlib-1.2.5\
|
-Izlib-1.2.7\
|
||||||
-IiniFile\
|
-IiniFile\
|
||||||
-Itolua++-1.0.93/include\
|
-Itolua++-1.0.93/include\
|
||||||
-Ijsoncpp-src-0.5.0/include\
|
-Ijsoncpp-src-0.5.0/include\
|
||||||
@ -37,7 +37,6 @@ MCServer : \
|
|||||||
build/json_value.o\
|
build/json_value.o\
|
||||||
build/json_writer.o\
|
build/json_writer.o\
|
||||||
build/cMakeDir.o\
|
build/cMakeDir.o\
|
||||||
build/cGenSettings.o\
|
|
||||||
build/cCuboid.o\
|
build/cCuboid.o\
|
||||||
build/cNoise.o\
|
build/cNoise.o\
|
||||||
build/cTimer.o\
|
build/cTimer.o\
|
||||||
@ -66,12 +65,20 @@ MCServer : \
|
|||||||
build/md5.o\
|
build/md5.o\
|
||||||
build/cReferenceManager.o\
|
build/cReferenceManager.o\
|
||||||
build/Bindings.o\
|
build/Bindings.o\
|
||||||
|
build/BlockID.o\
|
||||||
build/cBlockToPickup.o\
|
build/cBlockToPickup.o\
|
||||||
build/cChatColor.o\
|
build/cChatColor.o\
|
||||||
build/cChestEntity.o\
|
build/cChestEntity.o\
|
||||||
build/cChunk.o\
|
build/cChunk.o\
|
||||||
build/cChunkMap.o\
|
build/cChunkMap.o\
|
||||||
|
build/HeiGen.o\
|
||||||
|
build/BioGen.o\
|
||||||
|
build/CompoGen.o\
|
||||||
|
build/Trees.o\
|
||||||
|
build/StructGen.o\
|
||||||
|
build/FinishGen.o\
|
||||||
build/cChunkGenerator.o\
|
build/cChunkGenerator.o\
|
||||||
|
build/cPacket_Player.o\
|
||||||
build/cClientHandle.o\
|
build/cClientHandle.o\
|
||||||
build/cCraftingWindow.o\
|
build/cCraftingWindow.o\
|
||||||
build/cCriticalSection.o\
|
build/cCriticalSection.o\
|
||||||
@ -109,9 +116,10 @@ MCServer : \
|
|||||||
build/cWebAdmin.o\
|
build/cWebAdmin.o\
|
||||||
build/cWebPlugin.o\
|
build/cWebPlugin.o\
|
||||||
build/cWindow.o\
|
build/cWindow.o\
|
||||||
build/cWorld.o\
|
build/LightingThread.o\
|
||||||
build/cWorldGenerator.o\
|
build/cRedstoneSimulator.o\
|
||||||
build/cWorldGenerator_Test.o\
|
build/ChunkSender.o\
|
||||||
|
build/cWorld.o\
|
||||||
build/main.o\
|
build/main.o\
|
||||||
build/ManualBindings.o\
|
build/ManualBindings.o\
|
||||||
build/Matrix4f.o\
|
build/Matrix4f.o\
|
||||||
@ -154,10 +162,6 @@ MCServer : \
|
|||||||
build/cPacket_MultiBlock.o\
|
build/cPacket_MultiBlock.o\
|
||||||
build/cPacket_NamedEntitySpawn.o\
|
build/cPacket_NamedEntitySpawn.o\
|
||||||
build/cPacket_PickupSpawn.o\
|
build/cPacket_PickupSpawn.o\
|
||||||
build/cPacket_PlayerListItem.o\
|
|
||||||
build/cPacket_PlayerLook.o\
|
|
||||||
build/cPacket_PlayerMoveLook.o\
|
|
||||||
build/cPacket_PlayerPosition.o\
|
|
||||||
build/cPacket_PreChunk.o\
|
build/cPacket_PreChunk.o\
|
||||||
build/cPacket_RelativeEntityMove.o\
|
build/cPacket_RelativeEntityMove.o\
|
||||||
build/cPacket_RelativeEntityMoveLook.o\
|
build/cPacket_RelativeEntityMoveLook.o\
|
||||||
@ -247,13 +251,14 @@ MCServer : \
|
|||||||
build/cSocketThreads.o\
|
build/cSocketThreads.o\
|
||||||
build/WorldStorage.o\
|
build/WorldStorage.o\
|
||||||
build/WSSCompact.o\
|
build/WSSCompact.o\
|
||||||
|
build/WSSAnvil.o\
|
||||||
|
build/FastNBT.o\
|
||||||
build/StringCompression.o
|
build/StringCompression.o
|
||||||
$(CC) $(LNK_OPTIONS) \
|
$(CC) $(LNK_OPTIONS) \
|
||||||
build/json_reader.o\
|
build/json_reader.o\
|
||||||
build/json_value.o\
|
build/json_value.o\
|
||||||
build/json_writer.o\
|
build/json_writer.o\
|
||||||
build/cMakeDir.o\
|
build/cMakeDir.o\
|
||||||
build/cGenSettings.o\
|
|
||||||
build/cCuboid.o\
|
build/cCuboid.o\
|
||||||
build/cNoise.o\
|
build/cNoise.o\
|
||||||
build/cTimer.o\
|
build/cTimer.o\
|
||||||
@ -282,12 +287,20 @@ MCServer : \
|
|||||||
build/md5.o\
|
build/md5.o\
|
||||||
build/cReferenceManager.o\
|
build/cReferenceManager.o\
|
||||||
build/Bindings.o\
|
build/Bindings.o\
|
||||||
|
build/BlockID.o\
|
||||||
build/cBlockToPickup.o\
|
build/cBlockToPickup.o\
|
||||||
build/cChatColor.o\
|
build/cChatColor.o\
|
||||||
build/cChestEntity.o\
|
build/cChestEntity.o\
|
||||||
build/cChunk.o\
|
build/cChunk.o\
|
||||||
build/cChunkMap.o\
|
build/cChunkMap.o\
|
||||||
|
build/HeiGen.o\
|
||||||
|
build/BioGen.o\
|
||||||
|
build/CompoGen.o\
|
||||||
|
build/Trees.o\
|
||||||
|
build/StructGen.o\
|
||||||
|
build/FinishGen.o\
|
||||||
build/cChunkGenerator.o\
|
build/cChunkGenerator.o\
|
||||||
|
build/cPacket_Player.o\
|
||||||
build/cClientHandle.o\
|
build/cClientHandle.o\
|
||||||
build/cCraftingWindow.o\
|
build/cCraftingWindow.o\
|
||||||
build/cCriticalSection.o\
|
build/cCriticalSection.o\
|
||||||
@ -325,9 +338,10 @@ MCServer : \
|
|||||||
build/cWebAdmin.o\
|
build/cWebAdmin.o\
|
||||||
build/cWebPlugin.o\
|
build/cWebPlugin.o\
|
||||||
build/cWindow.o\
|
build/cWindow.o\
|
||||||
build/cWorld.o\
|
build/LightingThread.o\
|
||||||
build/cWorldGenerator.o\
|
build/cRedstoneSimulator.o\
|
||||||
build/cWorldGenerator_Test.o\
|
build/ChunkSender.o\
|
||||||
|
build/cWorld.o\
|
||||||
build/main.o\
|
build/main.o\
|
||||||
build/ManualBindings.o\
|
build/ManualBindings.o\
|
||||||
build/Matrix4f.o\
|
build/Matrix4f.o\
|
||||||
@ -370,10 +384,6 @@ MCServer : \
|
|||||||
build/cPacket_MultiBlock.o\
|
build/cPacket_MultiBlock.o\
|
||||||
build/cPacket_NamedEntitySpawn.o\
|
build/cPacket_NamedEntitySpawn.o\
|
||||||
build/cPacket_PickupSpawn.o\
|
build/cPacket_PickupSpawn.o\
|
||||||
build/cPacket_PlayerListItem.o\
|
|
||||||
build/cPacket_PlayerLook.o\
|
|
||||||
build/cPacket_PlayerMoveLook.o\
|
|
||||||
build/cPacket_PlayerPosition.o\
|
|
||||||
build/cPacket_PreChunk.o\
|
build/cPacket_PreChunk.o\
|
||||||
build/cPacket_RelativeEntityMove.o\
|
build/cPacket_RelativeEntityMove.o\
|
||||||
build/cPacket_RelativeEntityMoveLook.o\
|
build/cPacket_RelativeEntityMoveLook.o\
|
||||||
@ -463,6 +473,8 @@ MCServer : \
|
|||||||
build/cSocketThreads.o\
|
build/cSocketThreads.o\
|
||||||
build/WorldStorage.o\
|
build/WorldStorage.o\
|
||||||
build/WSSCompact.o\
|
build/WSSCompact.o\
|
||||||
|
build/WSSAnvil.o\
|
||||||
|
build/FastNBT.o\
|
||||||
build/StringCompression.o\
|
build/StringCompression.o\
|
||||||
-o MCServer
|
-o MCServer
|
||||||
|
|
||||||
@ -472,7 +484,6 @@ clean :
|
|||||||
build/json_value.o\
|
build/json_value.o\
|
||||||
build/json_writer.o\
|
build/json_writer.o\
|
||||||
build/cMakeDir.o\
|
build/cMakeDir.o\
|
||||||
build/cGenSettings.o\
|
|
||||||
build/cCuboid.o\
|
build/cCuboid.o\
|
||||||
build/cNoise.o\
|
build/cNoise.o\
|
||||||
build/cTimer.o\
|
build/cTimer.o\
|
||||||
@ -501,12 +512,20 @@ clean :
|
|||||||
build/md5.o\
|
build/md5.o\
|
||||||
build/cReferenceManager.o\
|
build/cReferenceManager.o\
|
||||||
build/Bindings.o\
|
build/Bindings.o\
|
||||||
|
build/BlockID.o\
|
||||||
build/cBlockToPickup.o\
|
build/cBlockToPickup.o\
|
||||||
build/cChatColor.o\
|
build/cChatColor.o\
|
||||||
build/cChestEntity.o\
|
build/cChestEntity.o\
|
||||||
build/cChunk.o\
|
build/cChunk.o\
|
||||||
build/cChunkMap.o\
|
build/cChunkMap.o\
|
||||||
|
build/HeiGen.o\
|
||||||
|
build/BioGen.o\
|
||||||
|
build/CompoGen.o\
|
||||||
|
build/Trees.o\
|
||||||
|
build/StructGen.o\
|
||||||
|
build/FinishGen.o\
|
||||||
build/cChunkGenerator.o\
|
build/cChunkGenerator.o\
|
||||||
|
build/cPacket_Player.o\
|
||||||
build/cClientHandle.o\
|
build/cClientHandle.o\
|
||||||
build/cCraftingWindow.o\
|
build/cCraftingWindow.o\
|
||||||
build/cCriticalSection.o\
|
build/cCriticalSection.o\
|
||||||
@ -544,9 +563,10 @@ clean :
|
|||||||
build/cWebAdmin.o\
|
build/cWebAdmin.o\
|
||||||
build/cWebPlugin.o\
|
build/cWebPlugin.o\
|
||||||
build/cWindow.o\
|
build/cWindow.o\
|
||||||
|
build/LightingThread.o\
|
||||||
|
build/cRedstoneSimulator.o\
|
||||||
|
build/ChunkSender.o\
|
||||||
build/cWorld.o\
|
build/cWorld.o\
|
||||||
build/cWorldGenerator.o\
|
|
||||||
build/cWorldGenerator_Test.o\
|
|
||||||
build/main.o\
|
build/main.o\
|
||||||
build/ManualBindings.o\
|
build/ManualBindings.o\
|
||||||
build/Matrix4f.o\
|
build/Matrix4f.o\
|
||||||
@ -589,10 +609,6 @@ clean :
|
|||||||
build/cPacket_MultiBlock.o\
|
build/cPacket_MultiBlock.o\
|
||||||
build/cPacket_NamedEntitySpawn.o\
|
build/cPacket_NamedEntitySpawn.o\
|
||||||
build/cPacket_PickupSpawn.o\
|
build/cPacket_PickupSpawn.o\
|
||||||
build/cPacket_PlayerListItem.o\
|
|
||||||
build/cPacket_PlayerLook.o\
|
|
||||||
build/cPacket_PlayerMoveLook.o\
|
|
||||||
build/cPacket_PlayerPosition.o\
|
|
||||||
build/cPacket_PreChunk.o\
|
build/cPacket_PreChunk.o\
|
||||||
build/cPacket_RelativeEntityMove.o\
|
build/cPacket_RelativeEntityMove.o\
|
||||||
build/cPacket_RelativeEntityMoveLook.o\
|
build/cPacket_RelativeEntityMoveLook.o\
|
||||||
@ -714,6 +730,10 @@ build/cReferenceManager.o : source/cReferenceManager.cpp
|
|||||||
build/Bindings.o : source/Bindings.cpp
|
build/Bindings.o : source/Bindings.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/Bindings.cpp -c $(INCLUDE) -o build/Bindings.o
|
$(CC) $(CC_OPTIONS) source/Bindings.cpp -c $(INCLUDE) -o build/Bindings.o
|
||||||
|
|
||||||
|
# Item # 6 -- BlockID --
|
||||||
|
build/BlockID.o : source/BlockID.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/BlockID.cpp -c $(INCLUDE) -o build/BlockID.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 6 -- cBlockToPickup --
|
# Item # 6 -- cBlockToPickup --
|
||||||
build/cBlockToPickup.o : source/cBlockToPickup.cpp
|
build/cBlockToPickup.o : source/cBlockToPickup.cpp
|
||||||
@ -739,11 +759,46 @@ build/cChunk.o : source/cChunk.cpp
|
|||||||
build/cChunkMap.o : source/cChunkMap.cpp
|
build/cChunkMap.o : source/cChunkMap.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cChunkMap.cpp -c $(INCLUDE) -o build/cChunkMap.o
|
$(CC) $(CC_OPTIONS) source/cChunkMap.cpp -c $(INCLUDE) -o build/cChunkMap.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 11 -- HeiGen --
|
||||||
|
build/HeiGen.o : source/HeiGen.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/HeiGen.cpp -c $(INCLUDE) -o build/HeiGen.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 12 -- BioGen --
|
||||||
|
build/BioGen.o : source/BioGen.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/BioGen.cpp -c $(INCLUDE) -o build/BioGen.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 13 -- CompoGen --
|
||||||
|
build/CompoGen.o : source/CompoGen.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/CompoGen.cpp -c $(INCLUDE) -o build/CompoGen.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 14 -- Trees --
|
||||||
|
build/Trees.o : source/Trees.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/Trees.cpp -c $(INCLUDE) -o build/Trees.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 15 -- StructGen --
|
||||||
|
build/StructGen.o : source/StructGen.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/StructGen.cpp -c $(INCLUDE) -o build/StructGen.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 16 -- FinishGen --
|
||||||
|
build/FinishGen.o : source/FinishGen.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/FinishGen.cpp -c $(INCLUDE) -o build/FinishGen.o
|
||||||
|
|
||||||
# Item # 10 -- cChunkGenerator --
|
# Item # 10 -- cChunkGenerator --
|
||||||
build/cChunkGenerator.o : source/cChunkGenerator.cpp
|
build/cChunkGenerator.o : source/cChunkGenerator.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cChunkGenerator.cpp -c $(INCLUDE) -o build/cChunkGenerator.o
|
$(CC) $(CC_OPTIONS) source/cChunkGenerator.cpp -c $(INCLUDE) -o build/cChunkGenerator.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 11 -- cPacket_Player --
|
||||||
|
build/cPacket_Player.o : source/packets/cPacket_Player.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/packets/cPacket_Player.cpp -c $(INCLUDE) -o build/cPacket_Player.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 11 -- cClientHandle --
|
# Item # 11 -- cClientHandle --
|
||||||
build/cClientHandle.o : source/cClientHandle.cpp
|
build/cClientHandle.o : source/cClientHandle.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cClientHandle.cpp -c $(INCLUDE) -o build/cClientHandle.o
|
$(CC) $(CC_OPTIONS) source/cClientHandle.cpp -c $(INCLUDE) -o build/cClientHandle.o
|
||||||
@ -916,19 +971,19 @@ build/cWebPlugin.o : source/cWebPlugin.cpp
|
|||||||
build/cWindow.o : source/cWindow.cpp
|
build/cWindow.o : source/cWindow.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cWindow.cpp -c $(INCLUDE) -o build/cWindow.o
|
$(CC) $(CC_OPTIONS) source/cWindow.cpp -c $(INCLUDE) -o build/cWindow.o
|
||||||
|
|
||||||
|
# Item # 40 -- LightingThread --
|
||||||
|
build/LightingThread.o : source/LightingThread.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/LightingThread.cpp -c $(INCLUDE) -o build/LightingThread.o
|
||||||
|
|
||||||
|
|
||||||
|
# Item # 42 -- ChunkSender --
|
||||||
|
build/ChunkSender.o : source/ChunkSender.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/ChunkSender.cpp -c $(INCLUDE) -o build/ChunkSender.o
|
||||||
|
|
||||||
# Item # 40 -- cWorld --
|
# Item # 40 -- cWorld --
|
||||||
build/cWorld.o : source/cWorld.cpp
|
build/cWorld.o : source/cWorld.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cWorld.cpp -c $(INCLUDE) -o build/cWorld.o
|
$(CC) $(CC_OPTIONS) source/cWorld.cpp -c $(INCLUDE) -o build/cWorld.o
|
||||||
|
|
||||||
# Item # 40 -- cWorldGenerator --
|
|
||||||
build/cWorldGenerator.o : source/cWorldGenerator.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/cWorldGenerator.cpp -c $(INCLUDE) -o build/cWorldGenerator.o
|
|
||||||
|
|
||||||
# Item # 40 -- cWorldGenerator_Test --
|
|
||||||
build/cWorldGenerator_Test.o : source/cWorldGenerator_Test.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/cWorldGenerator_Test.cpp -c $(INCLUDE) -o build/cWorldGenerator_Test.o
|
|
||||||
|
|
||||||
# Item # 41 -- main --
|
# Item # 41 -- main --
|
||||||
build/main.o : source/main.cpp
|
build/main.o : source/main.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/main.cpp -c $(INCLUDE) -o build/main.o
|
$(CC) $(CC_OPTIONS) source/main.cpp -c $(INCLUDE) -o build/main.o
|
||||||
@ -1073,18 +1128,6 @@ build/cPacket_NamedEntitySpawn.o : source/packets/cPacket_NamedEntitySpawn.cpp
|
|||||||
build/cPacket_PickupSpawn.o : source/packets/cPacket_PickupSpawn.cpp
|
build/cPacket_PickupSpawn.o : source/packets/cPacket_PickupSpawn.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PickupSpawn.cpp -c $(INCLUDE) -o build/cPacket_PickupSpawn.o
|
$(CC) $(CC_OPTIONS) source/packets/cPacket_PickupSpawn.cpp -c $(INCLUDE) -o build/cPacket_PickupSpawn.o
|
||||||
|
|
||||||
build/cPacket_PlayerListItem.o : source/packets/cPacket_PlayerListItem.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PlayerListItem.cpp -c $(INCLUDE) -o build/cPacket_PlayerListItem.o
|
|
||||||
|
|
||||||
build/cPacket_PlayerLook.o : source/packets/cPacket_PlayerLook.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PlayerLook.cpp -c $(INCLUDE) -o build/cPacket_PlayerLook.o
|
|
||||||
|
|
||||||
build/cPacket_PlayerMoveLook.o : source/packets/cPacket_PlayerMoveLook.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PlayerMoveLook.cpp -c $(INCLUDE) -o build/cPacket_PlayerMoveLook.o
|
|
||||||
|
|
||||||
build/cPacket_PlayerPosition.o : source/packets/cPacket_PlayerPosition.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PlayerPosition.cpp -c $(INCLUDE) -o build/cPacket_PlayerPosition.o
|
|
||||||
|
|
||||||
build/cPacket_PreChunk.o : source/packets/cPacket_PreChunk.cpp
|
build/cPacket_PreChunk.o : source/packets/cPacket_PreChunk.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PreChunk.cpp -c $(INCLUDE) -o build/cPacket_PreChunk.o
|
$(CC) $(CC_OPTIONS) source/packets/cPacket_PreChunk.cpp -c $(INCLUDE) -o build/cPacket_PreChunk.o
|
||||||
|
|
||||||
@ -1338,78 +1381,78 @@ build/print.o : lua-5.1.4/src/print.c
|
|||||||
|
|
||||||
|
|
||||||
# Item # 104 -- adler32 --
|
# Item # 104 -- adler32 --
|
||||||
build/adler32.o : zlib-1.2.5/adler32.c
|
build/adler32.o : zlib-1.2.7/adler32.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/adler32.c -c $(INCLUDE) -o build/adler32.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/adler32.c -c $(INCLUDE) -o build/adler32.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 105 -- compress --
|
# Item # 105 -- compress --
|
||||||
build/compress.o : zlib-1.2.5/compress.c
|
build/compress.o : zlib-1.2.7/compress.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/compress.c -c $(INCLUDE) -o build/compress.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/compress.c -c $(INCLUDE) -o build/compress.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 106 -- crc32 --
|
# Item # 106 -- crc32 --
|
||||||
build/crc32.o : zlib-1.2.5/crc32.c
|
build/crc32.o : zlib-1.2.7/crc32.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/crc32.c -c $(INCLUDE) -o build/crc32.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/crc32.c -c $(INCLUDE) -o build/crc32.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 107 -- deflate --
|
# Item # 107 -- deflate --
|
||||||
build/deflate.o : zlib-1.2.5/deflate.c
|
build/deflate.o : zlib-1.2.7/deflate.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/deflate.c -c $(INCLUDE) -o build/deflate.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/deflate.c -c $(INCLUDE) -o build/deflate.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 108 -- gzclose --
|
# Item # 108 -- gzclose --
|
||||||
build/gzclose.o : zlib-1.2.5/gzclose.c
|
build/gzclose.o : zlib-1.2.7/gzclose.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/gzclose.c -c $(INCLUDE) -o build/gzclose.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/gzclose.c -c $(INCLUDE) -o build/gzclose.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 109 -- gzlib --
|
# Item # 109 -- gzlib --
|
||||||
build/gzlib.o : zlib-1.2.5/gzlib.c
|
build/gzlib.o : zlib-1.2.7/gzlib.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/gzlib.c -c $(INCLUDE) -o build/gzlib.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/gzlib.c -c $(INCLUDE) -o build/gzlib.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 110 -- gzread --
|
# Item # 110 -- gzread --
|
||||||
build/gzread.o : zlib-1.2.5/gzread.c
|
build/gzread.o : zlib-1.2.7/gzread.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/gzread.c -c $(INCLUDE) -o build/gzread.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/gzread.c -c $(INCLUDE) -o build/gzread.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 111 -- gzwrite --
|
# Item # 111 -- gzwrite --
|
||||||
build/gzwrite.o : zlib-1.2.5/gzwrite.c
|
build/gzwrite.o : zlib-1.2.7/gzwrite.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/gzwrite.c -c $(INCLUDE) -o build/gzwrite.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/gzwrite.c -c $(INCLUDE) -o build/gzwrite.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 112 -- infback --
|
# Item # 112 -- infback --
|
||||||
build/infback.o : zlib-1.2.5/infback.c
|
build/infback.o : zlib-1.2.7/infback.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/infback.c -c $(INCLUDE) -o build/infback.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/infback.c -c $(INCLUDE) -o build/infback.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 113 -- inffast --
|
# Item # 113 -- inffast --
|
||||||
build/inffast.o : zlib-1.2.5/inffast.c
|
build/inffast.o : zlib-1.2.7/inffast.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/inffast.c -c $(INCLUDE) -o build/inffast.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/inffast.c -c $(INCLUDE) -o build/inffast.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 114 -- inflate --
|
# Item # 114 -- inflate --
|
||||||
build/inflate.o : zlib-1.2.5/inflate.c
|
build/inflate.o : zlib-1.2.7/inflate.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/inflate.c -c $(INCLUDE) -o build/inflate.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/inflate.c -c $(INCLUDE) -o build/inflate.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 115 -- inftrees --
|
# Item # 115 -- inftrees --
|
||||||
build/inftrees.o : zlib-1.2.5/inftrees.c
|
build/inftrees.o : zlib-1.2.7/inftrees.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/inftrees.c -c $(INCLUDE) -o build/inftrees.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/inftrees.c -c $(INCLUDE) -o build/inftrees.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 116 -- trees --
|
# Item # 116 -- trees --
|
||||||
build/trees.o : zlib-1.2.5/trees.c
|
build/trees.o : zlib-1.2.7/trees.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/trees.c -c $(INCLUDE) -o build/trees.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/trees.c -c $(INCLUDE) -o build/trees.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 117 -- uncompr --
|
# Item # 117 -- uncompr --
|
||||||
build/uncompr.o : zlib-1.2.5/uncompr.c
|
build/uncompr.o : zlib-1.2.7/uncompr.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/uncompr.c -c $(INCLUDE) -o build/uncompr.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/uncompr.c -c $(INCLUDE) -o build/uncompr.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 118 -- zutil --
|
# Item # 118 -- zutil --
|
||||||
build/zutil.o : zlib-1.2.5/zutil.c
|
build/zutil.o : zlib-1.2.7/zutil.c
|
||||||
$(CC) $(CCE_OPTIONS) zlib-1.2.5/zutil.c -c $(INCLUDE) -o build/zutil.o
|
$(CC) $(CCE_OPTIONS) zlib-1.2.7/zutil.c -c $(INCLUDE) -o build/zutil.o
|
||||||
|
|
||||||
|
|
||||||
# Item # 119 -- iniFile --
|
# Item # 119 -- iniFile --
|
||||||
@ -1486,9 +1529,6 @@ build/cNoise.o : source/cNoise.cpp
|
|||||||
build/cCuboid.o : source/cCuboid.cpp
|
build/cCuboid.o : source/cCuboid.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cCuboid.cpp -c $(INCLUDE) -o build/cCuboid.o
|
$(CC) $(CC_OPTIONS) source/cCuboid.cpp -c $(INCLUDE) -o build/cCuboid.o
|
||||||
|
|
||||||
build/cGenSettings.o : source/cGenSettings.cpp
|
|
||||||
$(CC) $(CC_OPTIONS) source/cGenSettings.cpp -c $(INCLUDE) -o build/cGenSettings.o
|
|
||||||
|
|
||||||
build/json_reader.o : jsoncpp-src-0.5.0/src/lib_json/json_reader.cpp
|
build/json_reader.o : jsoncpp-src-0.5.0/src/lib_json/json_reader.cpp
|
||||||
$(CC) $(CC_OPTIONS) jsoncpp-src-0.5.0/src/lib_json/json_reader.cpp -c $(INCLUDE) -o build/json_reader.o
|
$(CC) $(CC_OPTIONS) jsoncpp-src-0.5.0/src/lib_json/json_reader.cpp -c $(INCLUDE) -o build/json_reader.o
|
||||||
|
|
||||||
@ -1550,13 +1590,19 @@ build/WorldStorage.o : source/WorldStorage.cpp
|
|||||||
$(CC) $(CC_OPTIONS) source/WorldStorage.cpp -c $(INCLUDE) -o build/WorldStorage.o
|
$(CC) $(CC_OPTIONS) source/WorldStorage.cpp -c $(INCLUDE) -o build/WorldStorage.o
|
||||||
|
|
||||||
build/WSSCompact.o : source/WSSCompact.cpp
|
build/WSSCompact.o : source/WSSCompact.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/WSSCompact.cpp -c $(INCLUDE) -o build/WSSCompact.o
|
$(CC) $(CC_OPTIONS) source/WSSCompact.cpp -c $(INCLUDE) -o build/WSSCompact.o
|
||||||
|
|
||||||
|
build/WSSAnvil.o : source/WSSAnvil.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/WSSAnvil.cpp -c $(INCLUDE) -o build/WSSAnvil.o
|
||||||
|
|
||||||
|
build/FastNBT.o : source/FastNBT.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/FastNBT.cpp -c $(INCLUDE) -o build/FastNBT.o
|
||||||
|
|
||||||
build/StringCompression.o : source/StringCompression.cpp
|
build/StringCompression.o : source/StringCompression.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/StringCompression.cpp -c $(INCLUDE) -o build/StringCompression.o
|
$(CC) $(CC_OPTIONS) source/StringCompression.cpp -c $(INCLUDE) -o build/StringCompression.o
|
||||||
|
|
||||||
build/cRedstoneSimulator.o : source/cRedstoneSimulator.cpp
|
build/cRedstoneSimulator.o : source/cRedstoneSimulator.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cRedstoneSimulator.cpp -c $(INCLUDE) -o build/cRedstoneSimulator.o
|
$(CC) $(CC_OPTIONS) source/cRedstoneSimulator.cpp -c $(INCLUDE) -o build/cRedstoneSimulator.o
|
||||||
|
|
||||||
# Template: copy and delete the "# "; insert filenames
|
# Template: copy and delete the "# "; insert filenames
|
||||||
# build/.o : source/.cpp
|
# build/.o : source/.cpp
|
||||||
|
@ -5,6 +5,7 @@ $#include "tolua_base.h"
|
|||||||
|
|
||||||
$cfile "cTorch.h"
|
$cfile "cTorch.h"
|
||||||
$cfile "cStairs.h"
|
$cfile "cStairs.h"
|
||||||
|
$cfile "cStep.h"
|
||||||
$cfile "cLadder.h"
|
$cfile "cLadder.h"
|
||||||
|
|
||||||
$cfile "../iniFile/iniFile.h"
|
$cfile "../iniFile/iniFile.h"
|
||||||
@ -43,4 +44,4 @@ $cfile "cTracer.h"
|
|||||||
$cfile "cGroup.h"
|
$cfile "cGroup.h"
|
||||||
$cfile "packets/cPacket_Login.h"
|
$cfile "packets/cPacket_Login.h"
|
||||||
$cfile "packets/cPacket_BlockDig.h"
|
$cfile "packets/cPacket_BlockDig.h"
|
||||||
$cfile "packets/cPacket_BlockPlace.h"
|
$cfile "packets/cPacket_BlockPlace.h"
|
||||||
|
2
source/AllToLua.sh
Executable file
2
source/AllToLua.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
/usr/bin/tolua++ -L virtual_method_hooks.lua -o Bindings.cpp -H Bindings.h AllToLua.pkg
|
37655
source/Bindings.cpp
37655
source/Bindings.cpp
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
** Lua binding: AllToLua
|
** Lua binding: AllToLua
|
||||||
** Generated automatically by tolua++-1.0.92 on 06/02/12 11:29:17.
|
** Generated automatically by tolua++-1.0.92 on Mon Jun 4 01:27:12 2012.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Exported function */
|
/* Exported function */
|
||||||
TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S);
|
TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S);
|
||||||
|
|
||||||
|
@ -21,7 +21,13 @@ const std::string cChatColor::Rose = cChatColor::Color + "c";
|
|||||||
const std::string cChatColor::LightPurple = cChatColor::Color + "d";
|
const std::string cChatColor::LightPurple = cChatColor::Color + "d";
|
||||||
const std::string cChatColor::Yellow = cChatColor::Color + "e";
|
const std::string cChatColor::Yellow = cChatColor::Color + "e";
|
||||||
const std::string cChatColor::White = cChatColor::Color + "f";
|
const std::string cChatColor::White = cChatColor::Color + "f";
|
||||||
const std::string cChatColor::Funky = cChatColor::Color + "k";
|
|
||||||
|
const std::string cChatColor::Random = cChatColor::Color + "k";
|
||||||
|
const std::string cChatColor::Bold = cChatColor::Color + "l";
|
||||||
|
const std::string cChatColor::Strikethrough = cChatColor::Color + "m";
|
||||||
|
const std::string cChatColor::Underlined = cChatColor::Color + "n";
|
||||||
|
const std::string cChatColor::Italic = cChatColor::Color + "o";
|
||||||
|
const std::string cChatColor::Plain = cChatColor::Color + "r";
|
||||||
|
|
||||||
const std::string cChatColor::MakeColor( char a_Color )
|
const std::string cChatColor::MakeColor( char a_Color )
|
||||||
{
|
{
|
||||||
|
@ -28,9 +28,16 @@ public:
|
|||||||
static const std::string LightPurple;
|
static const std::string LightPurple;
|
||||||
static const std::string Yellow;
|
static const std::string Yellow;
|
||||||
static const std::string White;
|
static const std::string White;
|
||||||
static const std::string Funky;
|
|
||||||
|
// Styles ( source: http://wiki.vg/Chat )
|
||||||
|
static const std::string Random;
|
||||||
|
static const std::string Bold;
|
||||||
|
static const std::string Strikethrough;
|
||||||
|
static const std::string Underlined;
|
||||||
|
static const std::string Italic;
|
||||||
|
static const std::string Plain;
|
||||||
|
|
||||||
static const std::string MakeColor( char a_Color );
|
static const std::string MakeColor( char a_Color );
|
||||||
};
|
};
|
||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "cItem.h"
|
#include "cItem.h"
|
||||||
#include "cTorch.h"
|
#include "cTorch.h"
|
||||||
#include "cStairs.h"
|
#include "cStairs.h"
|
||||||
|
#include "cStep.h"
|
||||||
#include "cDoors.h"
|
#include "cDoors.h"
|
||||||
#include "cLadder.h"
|
#include "cLadder.h"
|
||||||
#include "cSign.h"
|
#include "cSign.h"
|
||||||
@ -1017,10 +1018,20 @@ void cClientHandle::HandleBlockPlace(cPacket_BlockPlace * a_Packet)
|
|||||||
|
|
||||||
if (ClickedBlock == E_BLOCK_STEP)
|
if (ClickedBlock == E_BLOCK_STEP)
|
||||||
{
|
{
|
||||||
if (MetaData == m_Player->GetWorld()->GetBlockMeta(a_Packet->m_PosX, a_Packet->m_PosY, a_Packet->m_PosZ) && a_Packet->m_Direction == 1) //only make double slab if meta values are the same and if player clicked on top of the block (Dir = 1)
|
// Only make double slab if meta values are the same and if player clicked either on top or on bottom of the block (direction either 0 or 1)
|
||||||
|
// TODO check if it works from beneath
|
||||||
|
if (MetaData == ( m_Player->GetWorld()->GetBlockMeta(a_Packet->m_PosX, a_Packet->m_PosY, a_Packet->m_PosZ) & 0x7) && a_Packet->m_Direction <= 1)
|
||||||
|
//if (MetaData == m_Player->GetWorld()->GetBlockMeta(a_Packet->m_PosX, a_Packet->m_PosY, a_Packet->m_PosZ) && a_Packet->m_Direction == 1)
|
||||||
{
|
{
|
||||||
a_Packet->m_ItemType = E_BLOCK_DOUBLE_STEP;
|
a_Packet->m_ItemType = E_BLOCK_DOUBLE_STEP;
|
||||||
a_Packet->m_PosY--;
|
if(a_Packet->m_Direction == 1)
|
||||||
|
{
|
||||||
|
a_Packet->m_PosY--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a_Packet->m_PosY++;
|
||||||
|
}
|
||||||
bIgnoreCollision = true;
|
bIgnoreCollision = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1167,6 +1178,12 @@ void cClientHandle::HandleBlockPlace(cPacket_BlockPlace * a_Packet)
|
|||||||
MetaData = cPiston::RotationPitchToMetaData(m_Player->GetRotation(), 0); // Same orientation as pistons, just ignore pitch
|
MetaData = cPiston::RotationPitchToMetaData(m_Player->GetRotation(), 0); // Same orientation as pistons, just ignore pitch
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case E_BLOCK_STEP:
|
||||||
|
{
|
||||||
|
MetaData += cStep::DirectionToMetaData( a_Packet->m_Direction );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case E_BLOCK_COBBLESTONE_STAIRS:
|
case E_BLOCK_COBBLESTONE_STAIRS:
|
||||||
case E_BLOCK_BRICK_STAIRS:
|
case E_BLOCK_BRICK_STAIRS:
|
||||||
@ -1174,7 +1191,7 @@ void cClientHandle::HandleBlockPlace(cPacket_BlockPlace * a_Packet)
|
|||||||
case E_BLOCK_NETHER_BRICK_STAIRS:
|
case E_BLOCK_NETHER_BRICK_STAIRS:
|
||||||
case E_BLOCK_WOODEN_STAIRS:
|
case E_BLOCK_WOODEN_STAIRS:
|
||||||
{
|
{
|
||||||
MetaData = cStairs::RotationToMetaData(m_Player->GetRotation());
|
MetaData = cStairs::RotationToMetaData(m_Player->GetRotation(), a_Packet->m_Direction);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case E_BLOCK_LADDER:
|
case E_BLOCK_LADDER:
|
||||||
|
@ -3,17 +3,26 @@
|
|||||||
class cStairs //tolua_export
|
class cStairs //tolua_export
|
||||||
{ //tolua_export
|
{ //tolua_export
|
||||||
public:
|
public:
|
||||||
static char RotationToMetaData( float a_Rotation ) //tolua_export
|
static char RotationToMetaData( float a_Rotation, int a_Direction ) //tolua_export
|
||||||
{ //tolua_export
|
{ //tolua_export
|
||||||
a_Rotation += 90 + 45; // So its not aligned with axis
|
a_Rotation += 90 + 45; // So its not aligned with axis
|
||||||
|
int result = 0x0;
|
||||||
|
if( a_Direction == 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
result = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
if( a_Rotation > 360.f ) a_Rotation -= 360.f;
|
if( a_Rotation > 360.f ) a_Rotation -= 360.f;
|
||||||
if( a_Rotation >= 0.f && a_Rotation < 90.f )
|
if( a_Rotation >= 0.f && a_Rotation < 90.f )
|
||||||
return 0x0;
|
return result;
|
||||||
else if( a_Rotation >= 180 && a_Rotation < 270 )
|
else if( a_Rotation >= 180 && a_Rotation < 270 )
|
||||||
return 0x1;
|
result += 0x1;
|
||||||
else if( a_Rotation >= 90 && a_Rotation < 180 )
|
else if( a_Rotation >= 90 && a_Rotation < 180 )
|
||||||
return 0x2;
|
result += 0x2;
|
||||||
else
|
else
|
||||||
return 0x3;
|
result += 0x3;
|
||||||
|
|
||||||
|
return result;
|
||||||
} //tolua_export
|
} //tolua_export
|
||||||
}; //tolua_export
|
}; //tolua_export
|
||||||
|
15
source/cStep.h
Normal file
15
source/cStep.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class cStep //tolua_export
|
||||||
|
{ //tolua_export
|
||||||
|
public:
|
||||||
|
static char DirectionToMetaData( int a_Direction ) //tolua_export
|
||||||
|
{ //tolua_export
|
||||||
|
int result = 0x0;
|
||||||
|
if( a_Direction == 0)
|
||||||
|
{
|
||||||
|
result = 0x8;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} //tolua_export
|
||||||
|
}; //tolua_export
|
@ -1,5 +1,5 @@
|
|||||||
/* 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-2007 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
#define local static
|
#define local static
|
||||||
|
|
||||||
local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
|
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
|
||||||
|
|
||||||
#define BASE 65521UL /* largest prime smaller than 65536 */
|
#define BASE 65521 /* largest prime smaller than 65536 */
|
||||||
#define NMAX 5552
|
#define NMAX 5552
|
||||||
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
|
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
|
||||||
|
|
||||||
@ -21,39 +21,44 @@ local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
|
|||||||
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
|
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
|
||||||
#define DO16(buf) DO8(buf,0); DO8(buf,8);
|
#define DO16(buf) DO8(buf,0); DO8(buf,8);
|
||||||
|
|
||||||
/* use NO_DIVIDE if your processor does not do division in hardware */
|
/* use NO_DIVIDE if your processor does not do division in hardware --
|
||||||
|
try it both ways to see which is faster */
|
||||||
#ifdef NO_DIVIDE
|
#ifdef NO_DIVIDE
|
||||||
# define MOD(a) \
|
/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
|
||||||
|
(thank you to John Reiser for pointing this out) */
|
||||||
|
# define CHOP(a) \
|
||||||
do { \
|
do { \
|
||||||
if (a >= (BASE << 16)) a -= (BASE << 16); \
|
unsigned long tmp = a >> 16; \
|
||||||
if (a >= (BASE << 15)) a -= (BASE << 15); \
|
a &= 0xffffUL; \
|
||||||
if (a >= (BASE << 14)) a -= (BASE << 14); \
|
a += (tmp << 4) - tmp; \
|
||||||
if (a >= (BASE << 13)) a -= (BASE << 13); \
|
} while (0)
|
||||||
if (a >= (BASE << 12)) a -= (BASE << 12); \
|
# define MOD28(a) \
|
||||||
if (a >= (BASE << 11)) a -= (BASE << 11); \
|
do { \
|
||||||
if (a >= (BASE << 10)) a -= (BASE << 10); \
|
CHOP(a); \
|
||||||
if (a >= (BASE << 9)) a -= (BASE << 9); \
|
|
||||||
if (a >= (BASE << 8)) a -= (BASE << 8); \
|
|
||||||
if (a >= (BASE << 7)) a -= (BASE << 7); \
|
|
||||||
if (a >= (BASE << 6)) a -= (BASE << 6); \
|
|
||||||
if (a >= (BASE << 5)) a -= (BASE << 5); \
|
|
||||||
if (a >= (BASE << 4)) a -= (BASE << 4); \
|
|
||||||
if (a >= (BASE << 3)) a -= (BASE << 3); \
|
|
||||||
if (a >= (BASE << 2)) a -= (BASE << 2); \
|
|
||||||
if (a >= (BASE << 1)) a -= (BASE << 1); \
|
|
||||||
if (a >= BASE) a -= BASE; \
|
if (a >= BASE) a -= BASE; \
|
||||||
} while (0)
|
} while (0)
|
||||||
# define MOD4(a) \
|
# define MOD(a) \
|
||||||
do { \
|
do { \
|
||||||
if (a >= (BASE << 4)) a -= (BASE << 4); \
|
CHOP(a); \
|
||||||
if (a >= (BASE << 3)) a -= (BASE << 3); \
|
MOD28(a); \
|
||||||
if (a >= (BASE << 2)) a -= (BASE << 2); \
|
} while (0)
|
||||||
if (a >= (BASE << 1)) a -= (BASE << 1); \
|
# define MOD63(a) \
|
||||||
|
do { /* this assumes a is not negative */ \
|
||||||
|
z_off64_t tmp = a >> 32; \
|
||||||
|
a &= 0xffffffffL; \
|
||||||
|
a += (tmp << 8) - (tmp << 5) + tmp; \
|
||||||
|
tmp = a >> 16; \
|
||||||
|
a &= 0xffffL; \
|
||||||
|
a += (tmp << 4) - tmp; \
|
||||||
|
tmp = a >> 16; \
|
||||||
|
a &= 0xffffL; \
|
||||||
|
a += (tmp << 4) - tmp; \
|
||||||
if (a >= BASE) a -= BASE; \
|
if (a >= BASE) a -= BASE; \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
# define MOD(a) a %= BASE
|
# define MOD(a) a %= BASE
|
||||||
# define MOD4(a) a %= BASE
|
# define MOD28(a) a %= BASE
|
||||||
|
# define MOD63(a) a %= BASE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
@ -92,7 +97,7 @@ uLong ZEXPORT adler32(adler, buf, len)
|
|||||||
}
|
}
|
||||||
if (adler >= BASE)
|
if (adler >= BASE)
|
||||||
adler -= BASE;
|
adler -= BASE;
|
||||||
MOD4(sum2); /* only added so many BASE's */
|
MOD28(sum2); /* only added so many BASE's */
|
||||||
return adler | (sum2 << 16);
|
return adler | (sum2 << 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,8 +142,13 @@ local uLong adler32_combine_(adler1, adler2, len2)
|
|||||||
unsigned long sum2;
|
unsigned long sum2;
|
||||||
unsigned rem;
|
unsigned rem;
|
||||||
|
|
||||||
|
/* for negative len, return invalid adler32 as a clue for debugging */
|
||||||
|
if (len2 < 0)
|
||||||
|
return 0xffffffffUL;
|
||||||
|
|
||||||
/* the derivation of this formula is left as an exercise for the reader */
|
/* the derivation of this formula is left as an exercise for the reader */
|
||||||
rem = (unsigned)(len2 % BASE);
|
MOD63(len2); /* assumes len2 >= 0 */
|
||||||
|
rem = (unsigned)len2;
|
||||||
sum1 = adler1 & 0xffff;
|
sum1 = adler1 & 0xffff;
|
||||||
sum2 = rem * sum1;
|
sum2 = rem * sum1;
|
||||||
MOD(sum2);
|
MOD(sum2);
|
@ -1,5 +1,5 @@
|
|||||||
/* crc32.c -- compute the CRC-32 of a data stream
|
/* crc32.c -- compute the CRC-32 of a data stream
|
||||||
* Copyright (C) 1995-2006, 2010 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
|
||||||
@ -17,6 +17,8 @@
|
|||||||
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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef MAKECRCH
|
#ifdef MAKECRCH
|
||||||
@ -30,31 +32,11 @@
|
|||||||
|
|
||||||
#define local static
|
#define local static
|
||||||
|
|
||||||
/* Find a four-byte integer type for crc32_little() and crc32_big(). */
|
|
||||||
#ifndef NOBYFOUR
|
|
||||||
# ifdef STDC /* need ANSI C limits.h to determine sizes */
|
|
||||||
# include <limits.h>
|
|
||||||
# define BYFOUR
|
|
||||||
# if (UINT_MAX == 0xffffffffUL)
|
|
||||||
typedef unsigned int u4;
|
|
||||||
# else
|
|
||||||
# if (ULONG_MAX == 0xffffffffUL)
|
|
||||||
typedef unsigned long u4;
|
|
||||||
# else
|
|
||||||
# if (USHRT_MAX == 0xffffffffUL)
|
|
||||||
typedef unsigned short u4;
|
|
||||||
# else
|
|
||||||
# undef BYFOUR /* can't find a four-byte integer type! */
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif /* STDC */
|
|
||||||
#endif /* !NOBYFOUR */
|
|
||||||
|
|
||||||
/* Definitions for doing the crc four data bytes at a time. */
|
/* Definitions for doing the crc four data bytes at a time. */
|
||||||
|
#if !defined(NOBYFOUR) && defined(Z_U4)
|
||||||
|
# define BYFOUR
|
||||||
|
#endif
|
||||||
#ifdef BYFOUR
|
#ifdef BYFOUR
|
||||||
# define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \
|
|
||||||
(((w)&0xff00)<<8)+(((w)&0xff)<<24))
|
|
||||||
local unsigned long crc32_little OF((unsigned long,
|
local unsigned long crc32_little OF((unsigned long,
|
||||||
const unsigned char FAR *, unsigned));
|
const unsigned char FAR *, unsigned));
|
||||||
local unsigned long crc32_big OF((unsigned long,
|
local unsigned long crc32_big OF((unsigned long,
|
||||||
@ -68,16 +50,16 @@
|
|||||||
local unsigned long gf2_matrix_times OF((unsigned long *mat,
|
local unsigned long gf2_matrix_times OF((unsigned long *mat,
|
||||||
unsigned long vec));
|
unsigned long vec));
|
||||||
local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
|
local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
|
||||||
local uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2);
|
local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
|
||||||
|
|
||||||
|
|
||||||
#ifdef DYNAMIC_CRC_TABLE
|
#ifdef DYNAMIC_CRC_TABLE
|
||||||
|
|
||||||
local volatile int crc_table_empty = 1;
|
local volatile int crc_table_empty = 1;
|
||||||
local unsigned long FAR crc_table[TBLS][256];
|
local z_crc_t FAR crc_table[TBLS][256];
|
||||||
local void make_crc_table OF((void));
|
local void make_crc_table OF((void));
|
||||||
#ifdef MAKECRCH
|
#ifdef MAKECRCH
|
||||||
local void write_table OF((FILE *, const unsigned long FAR *));
|
local void write_table OF((FILE *, const z_crc_t FAR *));
|
||||||
#endif /* MAKECRCH */
|
#endif /* MAKECRCH */
|
||||||
/*
|
/*
|
||||||
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
|
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
|
||||||
@ -107,9 +89,9 @@ local void make_crc_table OF((void));
|
|||||||
*/
|
*/
|
||||||
local void make_crc_table()
|
local void make_crc_table()
|
||||||
{
|
{
|
||||||
unsigned long c;
|
z_crc_t c;
|
||||||
int n, k;
|
int n, k;
|
||||||
unsigned long poly; /* polynomial exclusive-or pattern */
|
z_crc_t poly; /* polynomial exclusive-or pattern */
|
||||||
/* terms of polynomial defining this crc (except x^32): */
|
/* terms of polynomial defining this crc (except x^32): */
|
||||||
static volatile int first = 1; /* flag to limit concurrent making */
|
static volatile int first = 1; /* flag to limit concurrent making */
|
||||||
static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
|
static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
|
||||||
@ -121,13 +103,13 @@ local void make_crc_table()
|
|||||||
first = 0;
|
first = 0;
|
||||||
|
|
||||||
/* make exclusive-or pattern from polynomial (0xedb88320UL) */
|
/* make exclusive-or pattern from polynomial (0xedb88320UL) */
|
||||||
poly = 0UL;
|
poly = 0;
|
||||||
for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++)
|
for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
|
||||||
poly |= 1UL << (31 - p[n]);
|
poly |= (z_crc_t)1 << (31 - p[n]);
|
||||||
|
|
||||||
/* generate a crc for every 8-bit value */
|
/* generate a crc for every 8-bit value */
|
||||||
for (n = 0; n < 256; n++) {
|
for (n = 0; n < 256; n++) {
|
||||||
c = (unsigned long)n;
|
c = (z_crc_t)n;
|
||||||
for (k = 0; k < 8; k++)
|
for (k = 0; k < 8; k++)
|
||||||
c = c & 1 ? poly ^ (c >> 1) : c >> 1;
|
c = c & 1 ? poly ^ (c >> 1) : c >> 1;
|
||||||
crc_table[0][n] = c;
|
crc_table[0][n] = c;
|
||||||
@ -138,11 +120,11 @@ local void make_crc_table()
|
|||||||
and then the byte reversal of those as well as the first table */
|
and then the byte reversal of those as well as the first table */
|
||||||
for (n = 0; n < 256; n++) {
|
for (n = 0; n < 256; n++) {
|
||||||
c = crc_table[0][n];
|
c = crc_table[0][n];
|
||||||
crc_table[4][n] = REV(c);
|
crc_table[4][n] = ZSWAP32(c);
|
||||||
for (k = 1; k < 4; k++) {
|
for (k = 1; k < 4; k++) {
|
||||||
c = crc_table[0][c & 0xff] ^ (c >> 8);
|
c = crc_table[0][c & 0xff] ^ (c >> 8);
|
||||||
crc_table[k][n] = c;
|
crc_table[k][n] = c;
|
||||||
crc_table[k + 4][n] = REV(c);
|
crc_table[k + 4][n] = ZSWAP32(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* BYFOUR */
|
#endif /* BYFOUR */
|
||||||
@ -164,7 +146,7 @@ local void make_crc_table()
|
|||||||
if (out == NULL) return;
|
if (out == NULL) return;
|
||||||
fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
|
fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
|
||||||
fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
|
fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
|
||||||
fprintf(out, "local const unsigned long FAR ");
|
fprintf(out, "local const z_crc_t FAR ");
|
||||||
fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
|
fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
|
||||||
write_table(out, crc_table[0]);
|
write_table(out, crc_table[0]);
|
||||||
# ifdef BYFOUR
|
# ifdef BYFOUR
|
||||||
@ -184,12 +166,13 @@ local void make_crc_table()
|
|||||||
#ifdef MAKECRCH
|
#ifdef MAKECRCH
|
||||||
local void write_table(out, table)
|
local void write_table(out, table)
|
||||||
FILE *out;
|
FILE *out;
|
||||||
const unsigned long FAR *table;
|
const z_crc_t FAR *table;
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
for (n = 0; n < 256; n++)
|
for (n = 0; n < 256; n++)
|
||||||
fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n],
|
fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
|
||||||
|
(unsigned long)(table[n]),
|
||||||
n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
|
n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
|
||||||
}
|
}
|
||||||
#endif /* MAKECRCH */
|
#endif /* MAKECRCH */
|
||||||
@ -204,13 +187,13 @@ local void write_table(out, table)
|
|||||||
/* =========================================================================
|
/* =========================================================================
|
||||||
* This function can be used by asm versions of crc32()
|
* This function can be used by asm versions of crc32()
|
||||||
*/
|
*/
|
||||||
const unsigned long FAR * ZEXPORT get_crc_table()
|
const z_crc_t FAR * ZEXPORT get_crc_table()
|
||||||
{
|
{
|
||||||
#ifdef DYNAMIC_CRC_TABLE
|
#ifdef DYNAMIC_CRC_TABLE
|
||||||
if (crc_table_empty)
|
if (crc_table_empty)
|
||||||
make_crc_table();
|
make_crc_table();
|
||||||
#endif /* DYNAMIC_CRC_TABLE */
|
#endif /* DYNAMIC_CRC_TABLE */
|
||||||
return (const unsigned long FAR *)crc_table;
|
return (const z_crc_t FAR *)crc_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
@ -232,7 +215,7 @@ unsigned long ZEXPORT crc32(crc, buf, len)
|
|||||||
|
|
||||||
#ifdef BYFOUR
|
#ifdef BYFOUR
|
||||||
if (sizeof(void *) == sizeof(ptrdiff_t)) {
|
if (sizeof(void *) == sizeof(ptrdiff_t)) {
|
||||||
u4 endian;
|
z_crc_t endian;
|
||||||
|
|
||||||
endian = 1;
|
endian = 1;
|
||||||
if (*((unsigned char *)(&endian)))
|
if (*((unsigned char *)(&endian)))
|
||||||
@ -266,17 +249,17 @@ local unsigned long crc32_little(crc, buf, len)
|
|||||||
const unsigned char FAR *buf;
|
const unsigned char FAR *buf;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
{
|
{
|
||||||
register u4 c;
|
register z_crc_t c;
|
||||||
register const u4 FAR *buf4;
|
register const z_crc_t FAR *buf4;
|
||||||
|
|
||||||
c = (u4)crc;
|
c = (z_crc_t)crc;
|
||||||
c = ~c;
|
c = ~c;
|
||||||
while (len && ((ptrdiff_t)buf & 3)) {
|
while (len && ((ptrdiff_t)buf & 3)) {
|
||||||
c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
|
c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
|
||||||
len--;
|
len--;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf4 = (const u4 FAR *)(const void FAR *)buf;
|
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
|
||||||
while (len >= 32) {
|
while (len >= 32) {
|
||||||
DOLIT32;
|
DOLIT32;
|
||||||
len -= 32;
|
len -= 32;
|
||||||
@ -306,17 +289,17 @@ local unsigned long crc32_big(crc, buf, len)
|
|||||||
const unsigned char FAR *buf;
|
const unsigned char FAR *buf;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
{
|
{
|
||||||
register u4 c;
|
register z_crc_t c;
|
||||||
register const u4 FAR *buf4;
|
register const z_crc_t FAR *buf4;
|
||||||
|
|
||||||
c = REV((u4)crc);
|
c = ZSWAP32((z_crc_t)crc);
|
||||||
c = ~c;
|
c = ~c;
|
||||||
while (len && ((ptrdiff_t)buf & 3)) {
|
while (len && ((ptrdiff_t)buf & 3)) {
|
||||||
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
|
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
|
||||||
len--;
|
len--;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf4 = (const u4 FAR *)(const void FAR *)buf;
|
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
|
||||||
buf4--;
|
buf4--;
|
||||||
while (len >= 32) {
|
while (len >= 32) {
|
||||||
DOBIG32;
|
DOBIG32;
|
||||||
@ -333,7 +316,7 @@ local unsigned long crc32_big(crc, buf, len)
|
|||||||
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
|
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
|
||||||
} while (--len);
|
} while (--len);
|
||||||
c = ~c;
|
c = ~c;
|
||||||
return (unsigned long)(REV(c));
|
return (unsigned long)(ZSWAP32(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* BYFOUR */
|
#endif /* BYFOUR */
|
@ -2,7 +2,7 @@
|
|||||||
* 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,
|
@ -1,5 +1,5 @@
|
|||||||
/* deflate.c -- compress data using the deflation algorithm
|
/* deflate.c -- compress data using the deflation algorithm
|
||||||
* Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
|
* Copyright (C) 1995-2012 Jean-loup Gailly and 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
* REFERENCES
|
* REFERENCES
|
||||||
*
|
*
|
||||||
* Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
|
* Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
|
||||||
* Available in http://www.ietf.org/rfc/rfc1951.txt
|
* Available in http://tools.ietf.org/html/rfc1951
|
||||||
*
|
*
|
||||||
* A description of the Rabin and Karp algorithm is given in the book
|
* A description of the Rabin and Karp algorithm is given in the book
|
||||||
* "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
|
* "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
|
||||||
@ -52,7 +52,7 @@
|
|||||||
#include "deflate.h"
|
#include "deflate.h"
|
||||||
|
|
||||||
const char deflate_copyright[] =
|
const char deflate_copyright[] =
|
||||||
" deflate 1.2.5 Copyright 1995-2010 Jean-loup Gailly and Mark Adler ";
|
" deflate 1.2.7 Copyright 1995-2012 Jean-loup Gailly and 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
|
||||||
@ -155,6 +155,9 @@ local const config configuration_table[10] = {
|
|||||||
struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
|
struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
|
||||||
|
#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Update a hash value with the given input byte
|
* Update a hash value with the given input byte
|
||||||
* IN assertion: all calls to to UPDATE_HASH are made with consecutive
|
* IN assertion: all calls to to UPDATE_HASH are made with consecutive
|
||||||
@ -235,10 +238,19 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
|
|||||||
|
|
||||||
strm->msg = Z_NULL;
|
strm->msg = Z_NULL;
|
||||||
if (strm->zalloc == (alloc_func)0) {
|
if (strm->zalloc == (alloc_func)0) {
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
#else
|
||||||
strm->zalloc = zcalloc;
|
strm->zalloc = zcalloc;
|
||||||
strm->opaque = (voidpf)0;
|
strm->opaque = (voidpf)0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (strm->zfree == (free_func)0) strm->zfree = zcfree;
|
if (strm->zfree == (free_func)0)
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
#else
|
||||||
|
strm->zfree = zcfree;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FASTEST
|
#ifdef FASTEST
|
||||||
if (level != 0) level = 1;
|
if (level != 0) level = 1;
|
||||||
@ -314,43 +326,70 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
|
|||||||
uInt dictLength;
|
uInt dictLength;
|
||||||
{
|
{
|
||||||
deflate_state *s;
|
deflate_state *s;
|
||||||
uInt length = dictLength;
|
uInt str, n;
|
||||||
uInt n;
|
int wrap;
|
||||||
IPos hash_head = 0;
|
unsigned avail;
|
||||||
|
unsigned char *next;
|
||||||
|
|
||||||
if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
|
if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
|
||||||
strm->state->wrap == 2 ||
|
return Z_STREAM_ERROR;
|
||||||
(strm->state->wrap == 1 && strm->state->status != INIT_STATE))
|
s = strm->state;
|
||||||
|
wrap = s->wrap;
|
||||||
|
if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
|
||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
|
|
||||||
s = strm->state;
|
/* when using zlib wrappers, compute Adler-32 for provided dictionary */
|
||||||
if (s->wrap)
|
if (wrap == 1)
|
||||||
strm->adler = adler32(strm->adler, dictionary, dictLength);
|
strm->adler = adler32(strm->adler, dictionary, dictLength);
|
||||||
|
s->wrap = 0; /* avoid computing Adler-32 in read_buf */
|
||||||
|
|
||||||
if (length < MIN_MATCH) return Z_OK;
|
/* if dictionary would fill window, just replace the history */
|
||||||
if (length > s->w_size) {
|
if (dictLength >= s->w_size) {
|
||||||
length = s->w_size;
|
if (wrap == 0) { /* already empty otherwise */
|
||||||
dictionary += dictLength - length; /* use the tail of the dictionary */
|
CLEAR_HASH(s);
|
||||||
|
s->strstart = 0;
|
||||||
|
s->block_start = 0L;
|
||||||
|
s->insert = 0;
|
||||||
|
}
|
||||||
|
dictionary += dictLength - s->w_size; /* use the tail */
|
||||||
|
dictLength = s->w_size;
|
||||||
}
|
}
|
||||||
zmemcpy(s->window, dictionary, length);
|
|
||||||
s->strstart = length;
|
|
||||||
s->block_start = (long)length;
|
|
||||||
|
|
||||||
/* Insert all strings in the hash table (except for the last two bytes).
|
/* insert dictionary into window and hash */
|
||||||
* s->lookahead stays null, so s->ins_h will be recomputed at the next
|
avail = strm->avail_in;
|
||||||
* call of fill_window.
|
next = strm->next_in;
|
||||||
*/
|
strm->avail_in = dictLength;
|
||||||
s->ins_h = s->window[0];
|
strm->next_in = (Bytef *)dictionary;
|
||||||
UPDATE_HASH(s, s->ins_h, s->window[1]);
|
fill_window(s);
|
||||||
for (n = 0; n <= length - MIN_MATCH; n++) {
|
while (s->lookahead >= MIN_MATCH) {
|
||||||
INSERT_STRING(s, n, hash_head);
|
str = s->strstart;
|
||||||
|
n = s->lookahead - (MIN_MATCH-1);
|
||||||
|
do {
|
||||||
|
UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
|
||||||
|
#ifndef FASTEST
|
||||||
|
s->prev[str & s->w_mask] = s->head[s->ins_h];
|
||||||
|
#endif
|
||||||
|
s->head[s->ins_h] = (Pos)str;
|
||||||
|
str++;
|
||||||
|
} while (--n);
|
||||||
|
s->strstart = str;
|
||||||
|
s->lookahead = MIN_MATCH-1;
|
||||||
|
fill_window(s);
|
||||||
}
|
}
|
||||||
if (hash_head) hash_head = 0; /* to make compiler happy */
|
s->strstart += s->lookahead;
|
||||||
|
s->block_start = (long)s->strstart;
|
||||||
|
s->insert = s->lookahead;
|
||||||
|
s->lookahead = 0;
|
||||||
|
s->match_length = s->prev_length = MIN_MATCH-1;
|
||||||
|
s->match_available = 0;
|
||||||
|
strm->next_in = next;
|
||||||
|
strm->avail_in = avail;
|
||||||
|
s->wrap = wrap;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
int ZEXPORT deflateReset (strm)
|
int ZEXPORT deflateResetKeep (strm)
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
{
|
{
|
||||||
deflate_state *s;
|
deflate_state *s;
|
||||||
@ -380,11 +419,22 @@ int ZEXPORT deflateReset (strm)
|
|||||||
s->last_flush = Z_NO_FLUSH;
|
s->last_flush = Z_NO_FLUSH;
|
||||||
|
|
||||||
_tr_init(s);
|
_tr_init(s);
|
||||||
lm_init(s);
|
|
||||||
|
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ========================================================================= */
|
||||||
|
int ZEXPORT deflateReset (strm)
|
||||||
|
z_streamp strm;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = deflateResetKeep(strm);
|
||||||
|
if (ret == Z_OK)
|
||||||
|
lm_init(strm->state);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
int ZEXPORT deflateSetHeader (strm, head)
|
int ZEXPORT deflateSetHeader (strm, head)
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
@ -396,15 +446,43 @@ int ZEXPORT deflateSetHeader (strm, head)
|
|||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ========================================================================= */
|
||||||
|
int ZEXPORT deflatePending (strm, pending, bits)
|
||||||
|
unsigned *pending;
|
||||||
|
int *bits;
|
||||||
|
z_streamp strm;
|
||||||
|
{
|
||||||
|
if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
||||||
|
if (pending != Z_NULL)
|
||||||
|
*pending = strm->state->pending;
|
||||||
|
if (bits != Z_NULL)
|
||||||
|
*bits = strm->state->bi_valid;
|
||||||
|
return Z_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
int ZEXPORT deflatePrime (strm, bits, value)
|
int ZEXPORT deflatePrime (strm, bits, value)
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
int bits;
|
int bits;
|
||||||
int value;
|
int value;
|
||||||
{
|
{
|
||||||
|
deflate_state *s;
|
||||||
|
int put;
|
||||||
|
|
||||||
if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
||||||
strm->state->bi_valid = bits;
|
s = strm->state;
|
||||||
strm->state->bi_buf = (ush)(value & ((1 << bits) - 1));
|
if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
|
||||||
|
return Z_BUF_ERROR;
|
||||||
|
do {
|
||||||
|
put = Buf_size - s->bi_valid;
|
||||||
|
if (put > bits)
|
||||||
|
put = bits;
|
||||||
|
s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
|
||||||
|
s->bi_valid += put;
|
||||||
|
_tr_flush_bits(s);
|
||||||
|
value >>= put;
|
||||||
|
bits -= put;
|
||||||
|
} while (bits);
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -562,19 +640,22 @@ local void putShortMSB (s, b)
|
|||||||
local void flush_pending(strm)
|
local void flush_pending(strm)
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
{
|
{
|
||||||
unsigned len = strm->state->pending;
|
unsigned len;
|
||||||
|
deflate_state *s = strm->state;
|
||||||
|
|
||||||
|
_tr_flush_bits(s);
|
||||||
|
len = s->pending;
|
||||||
if (len > strm->avail_out) len = strm->avail_out;
|
if (len > strm->avail_out) len = strm->avail_out;
|
||||||
if (len == 0) return;
|
if (len == 0) return;
|
||||||
|
|
||||||
zmemcpy(strm->next_out, strm->state->pending_out, len);
|
zmemcpy(strm->next_out, s->pending_out, len);
|
||||||
strm->next_out += len;
|
strm->next_out += len;
|
||||||
strm->state->pending_out += len;
|
s->pending_out += len;
|
||||||
strm->total_out += len;
|
strm->total_out += len;
|
||||||
strm->avail_out -= len;
|
strm->avail_out -= len;
|
||||||
strm->state->pending -= len;
|
s->pending -= len;
|
||||||
if (strm->state->pending == 0) {
|
if (s->pending == 0) {
|
||||||
strm->state->pending_out = strm->state->pending_buf;
|
s->pending_out = s->pending_buf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -801,7 +882,7 @@ int ZEXPORT deflate (strm, flush)
|
|||||||
* flushes. For repeated and useless calls with Z_FINISH, we keep
|
* flushes. For repeated and useless calls with Z_FINISH, we keep
|
||||||
* returning Z_STREAM_END instead of Z_BUF_ERROR.
|
* returning Z_STREAM_END instead of Z_BUF_ERROR.
|
||||||
*/
|
*/
|
||||||
} else if (strm->avail_in == 0 && flush <= old_flush &&
|
} else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
|
||||||
flush != Z_FINISH) {
|
flush != Z_FINISH) {
|
||||||
ERR_RETURN(strm, Z_BUF_ERROR);
|
ERR_RETURN(strm, Z_BUF_ERROR);
|
||||||
}
|
}
|
||||||
@ -850,6 +931,7 @@ int ZEXPORT deflate (strm, flush)
|
|||||||
if (s->lookahead == 0) {
|
if (s->lookahead == 0) {
|
||||||
s->strstart = 0;
|
s->strstart = 0;
|
||||||
s->block_start = 0L;
|
s->block_start = 0L;
|
||||||
|
s->insert = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -945,12 +1027,12 @@ int ZEXPORT deflateCopy (dest, source)
|
|||||||
|
|
||||||
ss = source->state;
|
ss = source->state;
|
||||||
|
|
||||||
zmemcpy(dest, source, sizeof(z_stream));
|
zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
|
||||||
|
|
||||||
ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
|
ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
|
||||||
if (ds == Z_NULL) return Z_MEM_ERROR;
|
if (ds == Z_NULL) return Z_MEM_ERROR;
|
||||||
dest->state = (struct internal_state FAR *) ds;
|
dest->state = (struct internal_state FAR *) ds;
|
||||||
zmemcpy(ds, ss, sizeof(deflate_state));
|
zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
|
||||||
ds->strm = dest;
|
ds->strm = dest;
|
||||||
|
|
||||||
ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
|
ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
|
||||||
@ -966,8 +1048,8 @@ int ZEXPORT deflateCopy (dest, source)
|
|||||||
}
|
}
|
||||||
/* following zmemcpy do not work for 16-bit MSDOS */
|
/* following zmemcpy do not work for 16-bit MSDOS */
|
||||||
zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
|
zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
|
||||||
zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
|
zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
|
||||||
zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
|
zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
|
||||||
zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
|
zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
|
||||||
|
|
||||||
ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
|
ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
|
||||||
@ -1001,15 +1083,15 @@ local int read_buf(strm, buf, size)
|
|||||||
|
|
||||||
strm->avail_in -= len;
|
strm->avail_in -= len;
|
||||||
|
|
||||||
|
zmemcpy(buf, strm->next_in, len);
|
||||||
if (strm->state->wrap == 1) {
|
if (strm->state->wrap == 1) {
|
||||||
strm->adler = adler32(strm->adler, strm->next_in, len);
|
strm->adler = adler32(strm->adler, buf, len);
|
||||||
}
|
}
|
||||||
#ifdef GZIP
|
#ifdef GZIP
|
||||||
else if (strm->state->wrap == 2) {
|
else if (strm->state->wrap == 2) {
|
||||||
strm->adler = crc32(strm->adler, strm->next_in, len);
|
strm->adler = crc32(strm->adler, buf, len);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
zmemcpy(buf, strm->next_in, len);
|
|
||||||
strm->next_in += len;
|
strm->next_in += len;
|
||||||
strm->total_in += len;
|
strm->total_in += len;
|
||||||
|
|
||||||
@ -1036,6 +1118,7 @@ local void lm_init (s)
|
|||||||
s->strstart = 0;
|
s->strstart = 0;
|
||||||
s->block_start = 0L;
|
s->block_start = 0L;
|
||||||
s->lookahead = 0;
|
s->lookahead = 0;
|
||||||
|
s->insert = 0;
|
||||||
s->match_length = s->prev_length = MIN_MATCH-1;
|
s->match_length = s->prev_length = MIN_MATCH-1;
|
||||||
s->match_available = 0;
|
s->match_available = 0;
|
||||||
s->ins_h = 0;
|
s->ins_h = 0;
|
||||||
@ -1310,6 +1393,8 @@ local void fill_window(s)
|
|||||||
unsigned more; /* Amount of free space at the end of the window. */
|
unsigned more; /* Amount of free space at the end of the window. */
|
||||||
uInt wsize = s->w_size;
|
uInt wsize = s->w_size;
|
||||||
|
|
||||||
|
Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
|
||||||
|
|
||||||
do {
|
do {
|
||||||
more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
|
more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
|
||||||
|
|
||||||
@ -1362,7 +1447,7 @@ local void fill_window(s)
|
|||||||
#endif
|
#endif
|
||||||
more += wsize;
|
more += wsize;
|
||||||
}
|
}
|
||||||
if (s->strm->avail_in == 0) return;
|
if (s->strm->avail_in == 0) break;
|
||||||
|
|
||||||
/* If there was no sliding:
|
/* If there was no sliding:
|
||||||
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
|
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
|
||||||
@ -1381,12 +1466,24 @@ local void fill_window(s)
|
|||||||
s->lookahead += n;
|
s->lookahead += n;
|
||||||
|
|
||||||
/* Initialize the hash value now that we have some input: */
|
/* Initialize the hash value now that we have some input: */
|
||||||
if (s->lookahead >= MIN_MATCH) {
|
if (s->lookahead + s->insert >= MIN_MATCH) {
|
||||||
s->ins_h = s->window[s->strstart];
|
uInt str = s->strstart - s->insert;
|
||||||
UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
|
s->ins_h = s->window[str];
|
||||||
|
UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
|
||||||
#if MIN_MATCH != 3
|
#if MIN_MATCH != 3
|
||||||
Call UPDATE_HASH() MIN_MATCH-3 more times
|
Call UPDATE_HASH() MIN_MATCH-3 more times
|
||||||
#endif
|
#endif
|
||||||
|
while (s->insert) {
|
||||||
|
UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
|
||||||
|
#ifndef FASTEST
|
||||||
|
s->prev[str & s->w_mask] = s->head[s->ins_h];
|
||||||
|
#endif
|
||||||
|
s->head[s->ins_h] = (Pos)str;
|
||||||
|
str++;
|
||||||
|
s->insert--;
|
||||||
|
if (s->lookahead + s->insert < MIN_MATCH)
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
|
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
|
||||||
* but this is not important since only literal bytes will be emitted.
|
* but this is not important since only literal bytes will be emitted.
|
||||||
@ -1427,6 +1524,9 @@ local void fill_window(s)
|
|||||||
s->high_water += init;
|
s->high_water += init;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
|
||||||
|
"not enough room for search");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
@ -1506,8 +1606,14 @@ local block_state deflate_stored(s, flush)
|
|||||||
FLUSH_BLOCK(s, 0);
|
FLUSH_BLOCK(s, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FLUSH_BLOCK(s, flush == Z_FINISH);
|
s->insert = 0;
|
||||||
return flush == Z_FINISH ? finish_done : block_done;
|
if (flush == Z_FINISH) {
|
||||||
|
FLUSH_BLOCK(s, 1);
|
||||||
|
return finish_done;
|
||||||
|
}
|
||||||
|
if ((long)s->strstart > s->block_start)
|
||||||
|
FLUSH_BLOCK(s, 0);
|
||||||
|
return block_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
@ -1603,8 +1709,14 @@ local block_state deflate_fast(s, flush)
|
|||||||
}
|
}
|
||||||
if (bflush) FLUSH_BLOCK(s, 0);
|
if (bflush) FLUSH_BLOCK(s, 0);
|
||||||
}
|
}
|
||||||
FLUSH_BLOCK(s, flush == Z_FINISH);
|
s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
|
||||||
return flush == Z_FINISH ? finish_done : block_done;
|
if (flush == Z_FINISH) {
|
||||||
|
FLUSH_BLOCK(s, 1);
|
||||||
|
return finish_done;
|
||||||
|
}
|
||||||
|
if (s->last_lit)
|
||||||
|
FLUSH_BLOCK(s, 0);
|
||||||
|
return block_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef FASTEST
|
#ifndef FASTEST
|
||||||
@ -1728,8 +1840,14 @@ local block_state deflate_slow(s, flush)
|
|||||||
_tr_tally_lit(s, s->window[s->strstart-1], bflush);
|
_tr_tally_lit(s, s->window[s->strstart-1], bflush);
|
||||||
s->match_available = 0;
|
s->match_available = 0;
|
||||||
}
|
}
|
||||||
FLUSH_BLOCK(s, flush == Z_FINISH);
|
s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
|
||||||
return flush == Z_FINISH ? finish_done : block_done;
|
if (flush == Z_FINISH) {
|
||||||
|
FLUSH_BLOCK(s, 1);
|
||||||
|
return finish_done;
|
||||||
|
}
|
||||||
|
if (s->last_lit)
|
||||||
|
FLUSH_BLOCK(s, 0);
|
||||||
|
return block_done;
|
||||||
}
|
}
|
||||||
#endif /* FASTEST */
|
#endif /* FASTEST */
|
||||||
|
|
||||||
@ -1749,11 +1867,11 @@ local block_state deflate_rle(s, flush)
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
/* Make sure that we always have enough lookahead, except
|
/* Make sure that we always have enough lookahead, except
|
||||||
* at the end of the input file. We need MAX_MATCH bytes
|
* at the end of the input file. We need MAX_MATCH bytes
|
||||||
* for the longest encodable run.
|
* for the longest run, plus one for the unrolled loop.
|
||||||
*/
|
*/
|
||||||
if (s->lookahead < MAX_MATCH) {
|
if (s->lookahead <= MAX_MATCH) {
|
||||||
fill_window(s);
|
fill_window(s);
|
||||||
if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) {
|
if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
|
||||||
return need_more;
|
return need_more;
|
||||||
}
|
}
|
||||||
if (s->lookahead == 0) break; /* flush the current block */
|
if (s->lookahead == 0) break; /* flush the current block */
|
||||||
@ -1776,6 +1894,7 @@ local block_state deflate_rle(s, flush)
|
|||||||
if (s->match_length > s->lookahead)
|
if (s->match_length > s->lookahead)
|
||||||
s->match_length = s->lookahead;
|
s->match_length = s->lookahead;
|
||||||
}
|
}
|
||||||
|
Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Emit match if have run of MIN_MATCH or longer, else emit literal */
|
/* Emit match if have run of MIN_MATCH or longer, else emit literal */
|
||||||
@ -1796,8 +1915,14 @@ local block_state deflate_rle(s, flush)
|
|||||||
}
|
}
|
||||||
if (bflush) FLUSH_BLOCK(s, 0);
|
if (bflush) FLUSH_BLOCK(s, 0);
|
||||||
}
|
}
|
||||||
FLUSH_BLOCK(s, flush == Z_FINISH);
|
s->insert = 0;
|
||||||
return flush == Z_FINISH ? finish_done : block_done;
|
if (flush == Z_FINISH) {
|
||||||
|
FLUSH_BLOCK(s, 1);
|
||||||
|
return finish_done;
|
||||||
|
}
|
||||||
|
if (s->last_lit)
|
||||||
|
FLUSH_BLOCK(s, 0);
|
||||||
|
return block_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
@ -1829,6 +1954,12 @@ local block_state deflate_huff(s, flush)
|
|||||||
s->strstart++;
|
s->strstart++;
|
||||||
if (bflush) FLUSH_BLOCK(s, 0);
|
if (bflush) FLUSH_BLOCK(s, 0);
|
||||||
}
|
}
|
||||||
FLUSH_BLOCK(s, flush == Z_FINISH);
|
s->insert = 0;
|
||||||
return flush == Z_FINISH ? finish_done : block_done;
|
if (flush == Z_FINISH) {
|
||||||
|
FLUSH_BLOCK(s, 1);
|
||||||
|
return finish_done;
|
||||||
|
}
|
||||||
|
if (s->last_lit)
|
||||||
|
FLUSH_BLOCK(s, 0);
|
||||||
|
return block_done;
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* deflate.h -- internal compression state
|
/* deflate.h -- internal compression state
|
||||||
* Copyright (C) 1995-2010 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -48,6 +48,9 @@
|
|||||||
#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 Buf_size 16
|
||||||
|
/* size of bit buffer in bi_buf */
|
||||||
|
|
||||||
#define INIT_STATE 42
|
#define INIT_STATE 42
|
||||||
#define EXTRA_STATE 69
|
#define EXTRA_STATE 69
|
||||||
#define NAME_STATE 73
|
#define NAME_STATE 73
|
||||||
@ -188,7 +191,7 @@ typedef struct internal_state {
|
|||||||
int nice_match; /* Stop searching when current match exceeds this */
|
int nice_match; /* Stop searching when current match exceeds this */
|
||||||
|
|
||||||
/* used by trees.c: */
|
/* used by trees.c: */
|
||||||
/* Didn't use ct_data typedef below to supress compiler warning */
|
/* Didn't use ct_data typedef below to suppress compiler warning */
|
||||||
struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
|
struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
|
||||||
struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
|
struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
|
||||||
struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
|
struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
|
||||||
@ -244,7 +247,7 @@ typedef struct internal_state {
|
|||||||
ulg opt_len; /* bit length of current block with optimal trees */
|
ulg opt_len; /* bit length of current block with optimal trees */
|
||||||
ulg static_len; /* bit length of current block with static trees */
|
ulg static_len; /* bit length of current block with static trees */
|
||||||
uInt matches; /* number of string matches in current block */
|
uInt matches; /* number of string matches in current block */
|
||||||
int last_eob_len; /* bit length of EOB code for last block */
|
uInt insert; /* bytes at end of window left to insert */
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
|
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
|
||||||
@ -294,6 +297,7 @@ void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
|
|||||||
int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
|
int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
|
||||||
void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
|
void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
|
||||||
ulg stored_len, int last));
|
ulg stored_len, int last));
|
||||||
|
void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
|
||||||
void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
|
void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
|
||||||
void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
|
void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
|
||||||
ulg stored_len, int last));
|
ulg stored_len, int last));
|
@ -1,5 +1,5 @@
|
|||||||
/* example.c -- usage example of the zlib compression library
|
/* example.c -- usage example of the zlib compression library
|
||||||
* Copyright (C) 1995-2006 Jean-loup Gailly.
|
* Copyright (C) 1995-2006, 2011 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -34,10 +34,6 @@ const char hello[] = "hello, hello!";
|
|||||||
const char dictionary[] = "hello";
|
const char dictionary[] = "hello";
|
||||||
uLong dictId; /* Adler32 value of the dictionary */
|
uLong dictId; /* Adler32 value of the dictionary */
|
||||||
|
|
||||||
void test_compress OF((Byte *compr, uLong comprLen,
|
|
||||||
Byte *uncompr, uLong uncomprLen));
|
|
||||||
void test_gzio OF((const char *fname,
|
|
||||||
Byte *uncompr, uLong uncomprLen));
|
|
||||||
void test_deflate OF((Byte *compr, uLong comprLen));
|
void test_deflate OF((Byte *compr, uLong comprLen));
|
||||||
void test_inflate OF((Byte *compr, uLong comprLen,
|
void test_inflate OF((Byte *compr, uLong comprLen,
|
||||||
Byte *uncompr, uLong uncomprLen));
|
Byte *uncompr, uLong uncomprLen));
|
||||||
@ -53,6 +49,39 @@ void test_dict_inflate OF((Byte *compr, uLong comprLen,
|
|||||||
Byte *uncompr, uLong uncomprLen));
|
Byte *uncompr, uLong uncomprLen));
|
||||||
int main OF((int argc, char *argv[]));
|
int main OF((int argc, char *argv[]));
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
|
||||||
|
void *myalloc OF((void *, unsigned, unsigned));
|
||||||
|
void myfree OF((void *, void *));
|
||||||
|
|
||||||
|
void *myalloc(q, n, m)
|
||||||
|
void *q;
|
||||||
|
unsigned n, m;
|
||||||
|
{
|
||||||
|
q = Z_NULL;
|
||||||
|
return calloc(n, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
void myfree(void *q, void *p)
|
||||||
|
{
|
||||||
|
q = Z_NULL;
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
static alloc_func zalloc = myalloc;
|
||||||
|
static free_func zfree = myfree;
|
||||||
|
|
||||||
|
#else /* !Z_SOLO */
|
||||||
|
|
||||||
|
static alloc_func zalloc = (alloc_func)0;
|
||||||
|
static free_func zfree = (free_func)0;
|
||||||
|
|
||||||
|
void test_compress OF((Byte *compr, uLong comprLen,
|
||||||
|
Byte *uncompr, uLong uncomprLen));
|
||||||
|
void test_gzio OF((const char *fname,
|
||||||
|
Byte *uncompr, uLong uncomprLen));
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Test compress() and uncompress()
|
* Test compress() and uncompress()
|
||||||
*/
|
*/
|
||||||
@ -163,6 +192,8 @@ void test_gzio(fname, uncompr, uncomprLen)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* Z_SOLO */
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Test deflate() with small buffers
|
* Test deflate() with small buffers
|
||||||
*/
|
*/
|
||||||
@ -174,8 +205,8 @@ void test_deflate(compr, comprLen)
|
|||||||
int err;
|
int err;
|
||||||
uLong len = (uLong)strlen(hello)+1;
|
uLong len = (uLong)strlen(hello)+1;
|
||||||
|
|
||||||
c_stream.zalloc = (alloc_func)0;
|
c_stream.zalloc = zalloc;
|
||||||
c_stream.zfree = (free_func)0;
|
c_stream.zfree = zfree;
|
||||||
c_stream.opaque = (voidpf)0;
|
c_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
|
err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
|
||||||
@ -213,8 +244,8 @@ void test_inflate(compr, comprLen, uncompr, uncomprLen)
|
|||||||
|
|
||||||
strcpy((char*)uncompr, "garbage");
|
strcpy((char*)uncompr, "garbage");
|
||||||
|
|
||||||
d_stream.zalloc = (alloc_func)0;
|
d_stream.zalloc = zalloc;
|
||||||
d_stream.zfree = (free_func)0;
|
d_stream.zfree = zfree;
|
||||||
d_stream.opaque = (voidpf)0;
|
d_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
d_stream.next_in = compr;
|
d_stream.next_in = compr;
|
||||||
@ -252,8 +283,8 @@ void test_large_deflate(compr, comprLen, uncompr, uncomprLen)
|
|||||||
z_stream c_stream; /* compression stream */
|
z_stream c_stream; /* compression stream */
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
c_stream.zalloc = (alloc_func)0;
|
c_stream.zalloc = zalloc;
|
||||||
c_stream.zfree = (free_func)0;
|
c_stream.zfree = zfree;
|
||||||
c_stream.opaque = (voidpf)0;
|
c_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
err = deflateInit(&c_stream, Z_BEST_SPEED);
|
err = deflateInit(&c_stream, Z_BEST_SPEED);
|
||||||
@ -309,8 +340,8 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen)
|
|||||||
|
|
||||||
strcpy((char*)uncompr, "garbage");
|
strcpy((char*)uncompr, "garbage");
|
||||||
|
|
||||||
d_stream.zalloc = (alloc_func)0;
|
d_stream.zalloc = zalloc;
|
||||||
d_stream.zfree = (free_func)0;
|
d_stream.zfree = zfree;
|
||||||
d_stream.opaque = (voidpf)0;
|
d_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
d_stream.next_in = compr;
|
d_stream.next_in = compr;
|
||||||
@ -349,8 +380,8 @@ void test_flush(compr, comprLen)
|
|||||||
int err;
|
int err;
|
||||||
uInt len = (uInt)strlen(hello)+1;
|
uInt len = (uInt)strlen(hello)+1;
|
||||||
|
|
||||||
c_stream.zalloc = (alloc_func)0;
|
c_stream.zalloc = zalloc;
|
||||||
c_stream.zfree = (free_func)0;
|
c_stream.zfree = zfree;
|
||||||
c_stream.opaque = (voidpf)0;
|
c_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
|
err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
|
||||||
@ -388,8 +419,8 @@ void test_sync(compr, comprLen, uncompr, uncomprLen)
|
|||||||
|
|
||||||
strcpy((char*)uncompr, "garbage");
|
strcpy((char*)uncompr, "garbage");
|
||||||
|
|
||||||
d_stream.zalloc = (alloc_func)0;
|
d_stream.zalloc = zalloc;
|
||||||
d_stream.zfree = (free_func)0;
|
d_stream.zfree = zfree;
|
||||||
d_stream.opaque = (voidpf)0;
|
d_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
d_stream.next_in = compr;
|
d_stream.next_in = compr;
|
||||||
@ -430,15 +461,15 @@ void test_dict_deflate(compr, comprLen)
|
|||||||
z_stream c_stream; /* compression stream */
|
z_stream c_stream; /* compression stream */
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
c_stream.zalloc = (alloc_func)0;
|
c_stream.zalloc = zalloc;
|
||||||
c_stream.zfree = (free_func)0;
|
c_stream.zfree = zfree;
|
||||||
c_stream.opaque = (voidpf)0;
|
c_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
err = deflateInit(&c_stream, Z_BEST_COMPRESSION);
|
err = deflateInit(&c_stream, Z_BEST_COMPRESSION);
|
||||||
CHECK_ERR(err, "deflateInit");
|
CHECK_ERR(err, "deflateInit");
|
||||||
|
|
||||||
err = deflateSetDictionary(&c_stream,
|
err = deflateSetDictionary(&c_stream,
|
||||||
(const Bytef*)dictionary, sizeof(dictionary));
|
(const Bytef*)dictionary, (int)sizeof(dictionary));
|
||||||
CHECK_ERR(err, "deflateSetDictionary");
|
CHECK_ERR(err, "deflateSetDictionary");
|
||||||
|
|
||||||
dictId = c_stream.adler;
|
dictId = c_stream.adler;
|
||||||
@ -469,8 +500,8 @@ void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
|
|||||||
|
|
||||||
strcpy((char*)uncompr, "garbage");
|
strcpy((char*)uncompr, "garbage");
|
||||||
|
|
||||||
d_stream.zalloc = (alloc_func)0;
|
d_stream.zalloc = zalloc;
|
||||||
d_stream.zfree = (free_func)0;
|
d_stream.zfree = zfree;
|
||||||
d_stream.opaque = (voidpf)0;
|
d_stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
d_stream.next_in = compr;
|
d_stream.next_in = compr;
|
||||||
@ -491,7 +522,7 @@ void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
|
err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
|
||||||
sizeof(dictionary));
|
(int)sizeof(dictionary));
|
||||||
}
|
}
|
||||||
CHECK_ERR(err, "inflate with dict");
|
CHECK_ERR(err, "inflate with dict");
|
||||||
}
|
}
|
||||||
@ -540,10 +571,15 @@ int main(argc, argv)
|
|||||||
printf("out of memory\n");
|
printf("out of memory\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
argc = strlen(argv[0]);
|
||||||
|
#else
|
||||||
test_compress(compr, comprLen, uncompr, uncomprLen);
|
test_compress(compr, comprLen, uncompr, uncomprLen);
|
||||||
|
|
||||||
test_gzio((argc > 1 ? argv[1] : TESTFILE),
|
test_gzio((argc > 1 ? argv[1] : TESTFILE),
|
||||||
uncompr, uncomprLen);
|
uncompr, uncomprLen);
|
||||||
|
#endif
|
||||||
|
|
||||||
test_deflate(compr, comprLen);
|
test_deflate(compr, comprLen);
|
||||||
test_inflate(compr, comprLen, uncompr, uncomprLen);
|
test_inflate(compr, comprLen, uncompr, uncomprLen);
|
@ -1,5 +1,5 @@
|
|||||||
/* gzguts.h -- zlib internal header definitions for gz* operations
|
/* gzguts.h -- zlib internal header definitions for gz* operations
|
||||||
* Copyright (C) 2004, 2005, 2010 Mark Adler
|
* Copyright (C) 2004, 2005, 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -12,7 +12,7 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
|
#ifdef HAVE_HIDDEN
|
||||||
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
||||||
#else
|
#else
|
||||||
# define ZLIB_INTERNAL
|
# define ZLIB_INTERNAL
|
||||||
@ -27,13 +27,65 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
|
||||||
|
# include <io.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NO_DEFLATE /* for compatibility with old definition */
|
#ifdef NO_DEFLATE /* for compatibility with old definition */
|
||||||
# define NO_GZCOMPRESS
|
# define NO_GZCOMPRESS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
|
||||||
# include <io.h>
|
# ifndef HAVE_VSNPRINTF
|
||||||
# define vsnprintf _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
|
#endif
|
||||||
|
|
||||||
#ifndef local
|
#ifndef local
|
||||||
@ -52,7 +104,7 @@
|
|||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
# define zstrerror() gz_strwinerror((DWORD)GetLastError())
|
# define zstrerror() gz_strwinerror((DWORD)GetLastError())
|
||||||
#else
|
#else
|
||||||
# ifdef STDC
|
# ifndef NO_STRERROR
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
# define zstrerror() strerror(errno)
|
# define zstrerror() strerror(errno)
|
||||||
# else
|
# else
|
||||||
@ -68,6 +120,13 @@
|
|||||||
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
|
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
|
||||||
#endif
|
#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 */
|
/* default i/o buffer size -- double this for output when reading */
|
||||||
#define GZBUFSIZE 8192
|
#define GZBUFSIZE 8192
|
||||||
|
|
||||||
@ -84,23 +143,25 @@
|
|||||||
|
|
||||||
/* internal gzip file state data structure */
|
/* internal gzip file state data structure */
|
||||||
typedef struct {
|
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 */
|
/* used for both reading and writing */
|
||||||
int mode; /* see gzip modes above */
|
int mode; /* see gzip modes above */
|
||||||
int fd; /* file descriptor */
|
int fd; /* file descriptor */
|
||||||
char *path; /* path or fd for error messages */
|
char *path; /* path or fd for error messages */
|
||||||
z_off64_t pos; /* current position in uncompressed data */
|
|
||||||
unsigned size; /* buffer size, zero if not allocated yet */
|
unsigned size; /* buffer size, zero if not allocated yet */
|
||||||
unsigned want; /* requested buffer size, default is GZBUFSIZE */
|
unsigned want; /* requested buffer size, default is GZBUFSIZE */
|
||||||
unsigned char *in; /* input buffer */
|
unsigned char *in; /* input buffer */
|
||||||
unsigned char *out; /* output buffer (double-sized when reading) */
|
unsigned char *out; /* output buffer (double-sized when reading) */
|
||||||
unsigned char *next; /* next output data to deliver or write */
|
int direct; /* 0 if processing gzip, 1 if transparent */
|
||||||
/* just for reading */
|
/* just for reading */
|
||||||
unsigned have; /* amount of output data unused at next */
|
|
||||||
int eof; /* true if end of input file reached */
|
|
||||||
z_off64_t start; /* where the gzip data started, for rewinding */
|
|
||||||
z_off64_t raw; /* where the raw data started, for seeking */
|
|
||||||
int how; /* 0: get header, 1: copy, 2: decompress */
|
int how; /* 0: get header, 1: copy, 2: decompress */
|
||||||
int direct; /* true if last read direct, false if gzip */
|
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 */
|
/* just for writing */
|
||||||
int level; /* compression level */
|
int level; /* compression level */
|
||||||
int strategy; /* compression strategy */
|
int strategy; /* compression strategy */
|
@ -1,19 +1,23 @@
|
|||||||
/* gzlib.c -- zlib functions common to reading and writing gzip files
|
/* gzlib.c -- zlib functions common to reading and writing gzip files
|
||||||
* Copyright (C) 2004, 2010 Mark Adler
|
* Copyright (C) 2004, 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gzguts.h"
|
#include "gzguts.h"
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(__BORLANDC__)
|
||||||
|
# define LSEEK _lseeki64
|
||||||
|
#else
|
||||||
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
||||||
# define LSEEK lseek64
|
# define LSEEK lseek64
|
||||||
#else
|
#else
|
||||||
# define LSEEK lseek
|
# define LSEEK lseek
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Local functions */
|
/* Local functions */
|
||||||
local void gz_reset OF((gz_statep));
|
local void gz_reset OF((gz_statep));
|
||||||
local gzFile gz_open OF((const char *, int, const char *));
|
local gzFile gz_open OF((const void *, int, const char *));
|
||||||
|
|
||||||
#if defined UNDER_CE
|
#if defined UNDER_CE
|
||||||
|
|
||||||
@ -71,25 +75,37 @@ char ZLIB_INTERNAL *gz_strwinerror (error)
|
|||||||
local void gz_reset(state)
|
local void gz_reset(state)
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
{
|
{
|
||||||
|
state->x.have = 0; /* no output data available */
|
||||||
if (state->mode == GZ_READ) { /* for reading ... */
|
if (state->mode == GZ_READ) { /* for reading ... */
|
||||||
state->have = 0; /* no output data available */
|
|
||||||
state->eof = 0; /* not at end of file */
|
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->how = LOOK; /* look for gzip header */
|
||||||
state->direct = 1; /* default for empty file */
|
|
||||||
}
|
}
|
||||||
state->seek = 0; /* no seek request pending */
|
state->seek = 0; /* no seek request pending */
|
||||||
gz_error(state, Z_OK, NULL); /* clear error */
|
gz_error(state, Z_OK, NULL); /* clear error */
|
||||||
state->pos = 0; /* no uncompressed data yet */
|
state->x.pos = 0; /* no uncompressed data yet */
|
||||||
state->strm.avail_in = 0; /* no input data yet */
|
state->strm.avail_in = 0; /* no input data yet */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open a gzip file either by name or file descriptor. */
|
/* Open a gzip file either by name or file descriptor. */
|
||||||
local gzFile gz_open(path, fd, mode)
|
local gzFile gz_open(path, fd, mode)
|
||||||
const char *path;
|
const void *path;
|
||||||
int fd;
|
int fd;
|
||||||
const char *mode;
|
const char *mode;
|
||||||
{
|
{
|
||||||
gz_statep state;
|
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 */
|
/* allocate gzFile structure to return */
|
||||||
state = malloc(sizeof(gz_state));
|
state = malloc(sizeof(gz_state));
|
||||||
@ -103,6 +119,7 @@ local gzFile gz_open(path, fd, mode)
|
|||||||
state->mode = GZ_NONE;
|
state->mode = GZ_NONE;
|
||||||
state->level = Z_DEFAULT_COMPRESSION;
|
state->level = Z_DEFAULT_COMPRESSION;
|
||||||
state->strategy = Z_DEFAULT_STRATEGY;
|
state->strategy = Z_DEFAULT_STRATEGY;
|
||||||
|
state->direct = 0;
|
||||||
while (*mode) {
|
while (*mode) {
|
||||||
if (*mode >= '0' && *mode <= '9')
|
if (*mode >= '0' && *mode <= '9')
|
||||||
state->level = *mode - '0';
|
state->level = *mode - '0';
|
||||||
@ -124,6 +141,16 @@ local gzFile gz_open(path, fd, mode)
|
|||||||
return NULL;
|
return NULL;
|
||||||
case 'b': /* ignore -- will request binary anyway */
|
case 'b': /* ignore -- will request binary anyway */
|
||||||
break;
|
break;
|
||||||
|
#ifdef O_CLOEXEC
|
||||||
|
case 'e':
|
||||||
|
cloexec = 1;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef O_EXCL
|
||||||
|
case 'x':
|
||||||
|
exclusive = 1;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case 'f':
|
case 'f':
|
||||||
state->strategy = Z_FILTERED;
|
state->strategy = Z_FILTERED;
|
||||||
break;
|
break;
|
||||||
@ -135,6 +162,8 @@ local gzFile gz_open(path, fd, mode)
|
|||||||
break;
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
state->strategy = Z_FIXED;
|
state->strategy = Z_FIXED;
|
||||||
|
case 'T':
|
||||||
|
state->direct = 1;
|
||||||
default: /* could consider as an error, but just ignore */
|
default: /* could consider as an error, but just ignore */
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
@ -147,30 +176,67 @@ local gzFile gz_open(path, fd, mode)
|
|||||||
return NULL;
|
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 */
|
/* save the path name for error messages */
|
||||||
state->path = malloc(strlen(path) + 1);
|
#ifdef _WIN32
|
||||||
|
if (fd == -2) {
|
||||||
|
len = wcstombs(NULL, path, 0);
|
||||||
|
if (len == (size_t)-1)
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
len = strlen(path);
|
||||||
|
state->path = malloc(len + 1);
|
||||||
if (state->path == NULL) {
|
if (state->path == NULL) {
|
||||||
free(state);
|
free(state);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
strcpy(state->path, path);
|
#ifdef _WIN32
|
||||||
|
if (fd == -2)
|
||||||
|
if (len)
|
||||||
|
wcstombs(state->path, path, len + 1);
|
||||||
|
else
|
||||||
|
*(state->path) = 0;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
strcpy(state->path, path);
|
||||||
|
|
||||||
/* open the file with the appropriate mode (or just use fd) */
|
/* compute the flags for open() */
|
||||||
state->fd = fd != -1 ? fd :
|
oflag =
|
||||||
open(path,
|
|
||||||
#ifdef O_LARGEFILE
|
#ifdef O_LARGEFILE
|
||||||
O_LARGEFILE |
|
O_LARGEFILE |
|
||||||
#endif
|
#endif
|
||||||
#ifdef O_BINARY
|
#ifdef O_BINARY
|
||||||
O_BINARY |
|
O_BINARY |
|
||||||
#endif
|
#endif
|
||||||
(state->mode == GZ_READ ?
|
#ifdef O_CLOEXEC
|
||||||
O_RDONLY :
|
(cloexec ? O_CLOEXEC : 0) |
|
||||||
(O_WRONLY | O_CREAT | (
|
#endif
|
||||||
state->mode == GZ_WRITE ?
|
(state->mode == GZ_READ ?
|
||||||
O_TRUNC :
|
O_RDONLY :
|
||||||
O_APPEND))),
|
(O_WRONLY | O_CREAT |
|
||||||
0666);
|
#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(path, oflag, 0666));
|
||||||
if (state->fd == -1) {
|
if (state->fd == -1) {
|
||||||
free(state->path);
|
free(state->path);
|
||||||
free(state);
|
free(state);
|
||||||
@ -224,6 +290,16 @@ gzFile ZEXPORT gzdopen(fd, mode)
|
|||||||
return gz;
|
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 -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzbuffer(file, size)
|
int ZEXPORT gzbuffer(file, size)
|
||||||
gzFile file;
|
gzFile file;
|
||||||
@ -243,8 +319,8 @@ int ZEXPORT gzbuffer(file, size)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* check and set requested size */
|
/* check and set requested size */
|
||||||
if (size == 0)
|
if (size < 2)
|
||||||
return -1;
|
size = 2; /* need two bytes to check magic header */
|
||||||
state->want = size;
|
state->want = size;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -261,7 +337,8 @@ int ZEXPORT gzrewind(file)
|
|||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
|
|
||||||
/* check that we're reading and that there's no error */
|
/* check that we're reading and that there's no error */
|
||||||
if (state->mode != GZ_READ || state->err != Z_OK)
|
if (state->mode != GZ_READ ||
|
||||||
|
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* back up and start over */
|
/* back up and start over */
|
||||||
@ -289,7 +366,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* check that there's no error */
|
/* check that there's no error */
|
||||||
if (state->err != Z_OK)
|
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* can only seek from start or relative to current position */
|
/* can only seek from start or relative to current position */
|
||||||
@ -298,31 +375,32 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
|||||||
|
|
||||||
/* normalize offset to a SEEK_CUR specification */
|
/* normalize offset to a SEEK_CUR specification */
|
||||||
if (whence == SEEK_SET)
|
if (whence == SEEK_SET)
|
||||||
offset -= state->pos;
|
offset -= state->x.pos;
|
||||||
else if (state->seek)
|
else if (state->seek)
|
||||||
offset += state->skip;
|
offset += state->skip;
|
||||||
state->seek = 0;
|
state->seek = 0;
|
||||||
|
|
||||||
/* if within raw area while reading, just go there */
|
/* if within raw area while reading, just go there */
|
||||||
if (state->mode == GZ_READ && state->how == COPY &&
|
if (state->mode == GZ_READ && state->how == COPY &&
|
||||||
state->pos + offset >= state->raw) {
|
state->x.pos + offset >= 0) {
|
||||||
ret = LSEEK(state->fd, offset - state->have, SEEK_CUR);
|
ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
return -1;
|
return -1;
|
||||||
state->have = 0;
|
state->x.have = 0;
|
||||||
state->eof = 0;
|
state->eof = 0;
|
||||||
|
state->past = 0;
|
||||||
state->seek = 0;
|
state->seek = 0;
|
||||||
gz_error(state, Z_OK, NULL);
|
gz_error(state, Z_OK, NULL);
|
||||||
state->strm.avail_in = 0;
|
state->strm.avail_in = 0;
|
||||||
state->pos += offset;
|
state->x.pos += offset;
|
||||||
return state->pos;
|
return state->x.pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* calculate skip amount, rewinding if needed for back seek when reading */
|
/* calculate skip amount, rewinding if needed for back seek when reading */
|
||||||
if (offset < 0) {
|
if (offset < 0) {
|
||||||
if (state->mode != GZ_READ) /* writing -- can't go backwards */
|
if (state->mode != GZ_READ) /* writing -- can't go backwards */
|
||||||
return -1;
|
return -1;
|
||||||
offset += state->pos;
|
offset += state->x.pos;
|
||||||
if (offset < 0) /* before start of file! */
|
if (offset < 0) /* before start of file! */
|
||||||
return -1;
|
return -1;
|
||||||
if (gzrewind(file) == -1) /* rewind, then skip to offset */
|
if (gzrewind(file) == -1) /* rewind, then skip to offset */
|
||||||
@ -331,11 +409,11 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
|||||||
|
|
||||||
/* if reading, skip what's in output buffer (one less gzgetc() check) */
|
/* if reading, skip what's in output buffer (one less gzgetc() check) */
|
||||||
if (state->mode == GZ_READ) {
|
if (state->mode == GZ_READ) {
|
||||||
n = GT_OFF(state->have) || (z_off64_t)state->have > offset ?
|
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
|
||||||
(unsigned)offset : state->have;
|
(unsigned)offset : state->x.have;
|
||||||
state->have -= n;
|
state->x.have -= n;
|
||||||
state->next += n;
|
state->x.next += n;
|
||||||
state->pos += n;
|
state->x.pos += n;
|
||||||
offset -= n;
|
offset -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,7 +422,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
|||||||
state->seek = 1;
|
state->seek = 1;
|
||||||
state->skip = offset;
|
state->skip = offset;
|
||||||
}
|
}
|
||||||
return state->pos + offset;
|
return state->x.pos + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
@ -373,7 +451,7 @@ z_off64_t ZEXPORT gztell64(file)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* return position */
|
/* return position */
|
||||||
return state->pos + (state->seek ? state->skip : 0);
|
return state->x.pos + (state->seek ? state->skip : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
@ -433,8 +511,7 @@ int ZEXPORT gzeof(file)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* return end-of-file state */
|
/* return end-of-file state */
|
||||||
return state->mode == GZ_READ ?
|
return state->mode == GZ_READ ? state->past : 0;
|
||||||
(state->eof && state->strm.avail_in == 0 && state->have == 0) : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
@ -471,8 +548,10 @@ void ZEXPORT gzclearerr(file)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* clear error and end-of-file */
|
/* clear error and end-of-file */
|
||||||
if (state->mode == GZ_READ)
|
if (state->mode == GZ_READ) {
|
||||||
state->eof = 0;
|
state->eof = 0;
|
||||||
|
state->past = 0;
|
||||||
|
}
|
||||||
gz_error(state, Z_OK, NULL);
|
gz_error(state, Z_OK, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,6 +573,10 @@ void ZLIB_INTERNAL gz_error(state, err, msg)
|
|||||||
state->msg = NULL;
|
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 */
|
/* set error code, and if no message, then done */
|
||||||
state->err = err;
|
state->err = err;
|
||||||
if (msg == NULL)
|
if (msg == NULL)
|
@ -1,5 +1,5 @@
|
|||||||
/* gzread.c -- zlib functions for reading gzip files
|
/* gzread.c -- zlib functions for reading gzip files
|
||||||
* Copyright (C) 2004, 2005, 2010 Mark Adler
|
* Copyright (C) 2004, 2005, 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -8,10 +8,9 @@
|
|||||||
/* Local functions */
|
/* Local functions */
|
||||||
local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
|
local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
|
||||||
local int gz_avail OF((gz_statep));
|
local int gz_avail OF((gz_statep));
|
||||||
local int gz_next4 OF((gz_statep, unsigned long *));
|
local int gz_look OF((gz_statep));
|
||||||
local int gz_head OF((gz_statep));
|
|
||||||
local int gz_decomp OF((gz_statep));
|
local int gz_decomp OF((gz_statep));
|
||||||
local int gz_make OF((gz_statep));
|
local int gz_fetch OF((gz_statep));
|
||||||
local int gz_skip OF((gz_statep, z_off64_t));
|
local int gz_skip OF((gz_statep, z_off64_t));
|
||||||
|
|
||||||
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
|
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
|
||||||
@ -46,67 +45,47 @@ local int gz_load(state, buf, len, have)
|
|||||||
error, 0 otherwise. Note that the eof flag is set when the end of the input
|
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
|
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.
|
that data has been used, no more attempts will be made to read the file.
|
||||||
gz_avail() assumes that strm->avail_in == 0. */
|
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)
|
local int gz_avail(state)
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
{
|
{
|
||||||
|
unsigned got;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
if (state->err != Z_OK)
|
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
|
||||||
return -1;
|
return -1;
|
||||||
if (state->eof == 0) {
|
if (state->eof == 0) {
|
||||||
if (gz_load(state, state->in, state->size,
|
if (strm->avail_in) { /* copy what's there to the start */
|
||||||
(unsigned *)&(strm->avail_in)) == -1)
|
unsigned char *p = state->in, *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;
|
return -1;
|
||||||
|
strm->avail_in += got;
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get next byte from input, or -1 if end or error. */
|
/* Look for gzip header, set up for inflate or copy. state->x.have must be 0.
|
||||||
#define NEXT() ((strm->avail_in == 0 && gz_avail(state) == -1) ? -1 : \
|
|
||||||
(strm->avail_in == 0 ? -1 : \
|
|
||||||
(strm->avail_in--, *(strm->next_in)++)))
|
|
||||||
|
|
||||||
/* Get a four-byte little-endian integer and return 0 on success and the value
|
|
||||||
in *ret. Otherwise -1 is returned and *ret is not modified. */
|
|
||||||
local int gz_next4(state, ret)
|
|
||||||
gz_statep state;
|
|
||||||
unsigned long *ret;
|
|
||||||
{
|
|
||||||
int ch;
|
|
||||||
unsigned long val;
|
|
||||||
z_streamp strm = &(state->strm);
|
|
||||||
|
|
||||||
val = NEXT();
|
|
||||||
val += (unsigned)NEXT() << 8;
|
|
||||||
val += (unsigned long)NEXT() << 16;
|
|
||||||
ch = NEXT();
|
|
||||||
if (ch == -1)
|
|
||||||
return -1;
|
|
||||||
val += (unsigned long)ch << 24;
|
|
||||||
*ret = val;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look for gzip header, set up for inflate or copy. state->have must be zero.
|
|
||||||
If this is the first time in, allocate required memory. state->how will be
|
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
|
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
|
if there is no gzip header and direct copying will be performed, or it will
|
||||||
be set to GZIP for decompression, and the gzip header will be skipped so
|
be set to GZIP for decompression. If direct copying, then leftover input
|
||||||
that the next available input data is the raw deflate stream. If direct
|
data from the input buffer will be copied to the output buffer. In that
|
||||||
copying, then leftover input data from the input buffer will be copied to
|
case, all further file reads will be directly to either the output buffer or
|
||||||
the output buffer. In that case, all further file reads will be directly to
|
a user buffer. If decompressing, the inflate state will be initialized.
|
||||||
either the output buffer or a user buffer. If decompressing, the inflate
|
gz_look() will return 0 on success or -1 on failure. */
|
||||||
state and the check value will be initialized. gz_head() will return 0 on
|
local int gz_look(state)
|
||||||
success or -1 on failure. Failures may include read errors or gzip header
|
|
||||||
errors. */
|
|
||||||
local int gz_head(state)
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
{
|
{
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
int flags;
|
|
||||||
unsigned len;
|
|
||||||
|
|
||||||
/* allocate read buffers and inflate memory */
|
/* allocate read buffers and inflate memory */
|
||||||
if (state->size == 0) {
|
if (state->size == 0) {
|
||||||
@ -129,7 +108,7 @@ local int gz_head(state)
|
|||||||
state->strm.opaque = Z_NULL;
|
state->strm.opaque = Z_NULL;
|
||||||
state->strm.avail_in = 0;
|
state->strm.avail_in = 0;
|
||||||
state->strm.next_in = Z_NULL;
|
state->strm.next_in = Z_NULL;
|
||||||
if (inflateInit2(&(state->strm), -15) != Z_OK) { /* raw inflate */
|
if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */
|
||||||
free(state->out);
|
free(state->out);
|
||||||
free(state->in);
|
free(state->in);
|
||||||
state->size = 0;
|
state->size = 0;
|
||||||
@ -138,83 +117,45 @@ local int gz_head(state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get some data in the input buffer */
|
/* get at least the magic bytes in the input buffer */
|
||||||
if (strm->avail_in == 0) {
|
if (strm->avail_in < 2) {
|
||||||
if (gz_avail(state) == -1)
|
if (gz_avail(state) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
if (strm->avail_in == 0)
|
if (strm->avail_in == 0)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* look for the gzip magic header bytes 31 and 139 */
|
/* look for gzip magic bytes -- if there, do gzip decoding (note: there is
|
||||||
if (strm->next_in[0] == 31) {
|
a logical dilemma here when considering the case of a partially written
|
||||||
strm->avail_in--;
|
gzip file, to wit, if a single 31 byte is written, then we cannot tell
|
||||||
strm->next_in++;
|
whether this is a single-byte file, or just a partially written gzip
|
||||||
if (strm->avail_in == 0 && gz_avail(state) == -1)
|
file -- for here we assume that if a gzip file is being written, then
|
||||||
return -1;
|
the header will be written in a single operation, so that reading a
|
||||||
if (strm->avail_in && strm->next_in[0] == 139) {
|
single byte is sufficient indication that it is not a gzip file) */
|
||||||
/* we have a gzip header, woo hoo! */
|
if (strm->avail_in > 1 &&
|
||||||
strm->avail_in--;
|
strm->next_in[0] == 31 && strm->next_in[1] == 139) {
|
||||||
strm->next_in++;
|
inflateReset(strm);
|
||||||
|
state->how = GZIP;
|
||||||
/* skip rest of header */
|
state->direct = 0;
|
||||||
if (NEXT() != 8) { /* compression method */
|
return 0;
|
||||||
gz_error(state, Z_DATA_ERROR, "unknown compression method");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
flags = NEXT();
|
|
||||||
if (flags & 0xe0) { /* reserved flag bits */
|
|
||||||
gz_error(state, Z_DATA_ERROR, "unknown header flags set");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
NEXT(); /* modification time */
|
|
||||||
NEXT();
|
|
||||||
NEXT();
|
|
||||||
NEXT();
|
|
||||||
NEXT(); /* extra flags */
|
|
||||||
NEXT(); /* operating system */
|
|
||||||
if (flags & 4) { /* extra field */
|
|
||||||
len = (unsigned)NEXT();
|
|
||||||
len += (unsigned)NEXT() << 8;
|
|
||||||
while (len--)
|
|
||||||
if (NEXT() < 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (flags & 8) /* file name */
|
|
||||||
while (NEXT() > 0)
|
|
||||||
;
|
|
||||||
if (flags & 16) /* comment */
|
|
||||||
while (NEXT() > 0)
|
|
||||||
;
|
|
||||||
if (flags & 2) { /* header crc */
|
|
||||||
NEXT();
|
|
||||||
NEXT();
|
|
||||||
}
|
|
||||||
/* an unexpected end of file is not checked for here -- it will be
|
|
||||||
noticed on the first request for uncompressed data */
|
|
||||||
|
|
||||||
/* set up for decompression */
|
|
||||||
inflateReset(strm);
|
|
||||||
strm->adler = crc32(0L, Z_NULL, 0);
|
|
||||||
state->how = GZIP;
|
|
||||||
state->direct = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* not a gzip file -- save first byte (31) and fall to raw i/o */
|
|
||||||
state->out[0] = 31;
|
|
||||||
state->have = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* doing raw i/o, save start of raw data for seeking, copy any leftover
|
/* no gzip header -- if we were decoding gzip before, then this is trailing
|
||||||
input to output -- this assumes that the output buffer is larger than
|
garbage. Ignore the trailing garbage and finish. */
|
||||||
the input buffer, which also assures space for gzungetc() */
|
if (state->direct == 0) {
|
||||||
state->raw = state->pos;
|
strm->avail_in = 0;
|
||||||
state->next = state->out;
|
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) {
|
if (strm->avail_in) {
|
||||||
memcpy(state->next + state->have, strm->next_in, strm->avail_in);
|
memcpy(state->x.next, strm->next_in, strm->avail_in);
|
||||||
state->have += strm->avail_in;
|
state->x.have = strm->avail_in;
|
||||||
strm->avail_in = 0;
|
strm->avail_in = 0;
|
||||||
}
|
}
|
||||||
state->how = COPY;
|
state->how = COPY;
|
||||||
@ -223,19 +164,15 @@ local int gz_head(state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Decompress from input to the provided next_out and avail_out in the state.
|
/* Decompress from input to the provided next_out and avail_out in the state.
|
||||||
If the end of the compressed data is reached, then verify the gzip trailer
|
On return, state->x.have and state->x.next point to the just decompressed
|
||||||
check value and length (modulo 2^32). state->have and state->next are set
|
data. If the gzip stream completes, state->how is reset to LOOK to look for
|
||||||
to point to the just decompressed data, and the crc is updated. If the
|
the next gzip stream or raw data, once state->x.have is depleted. Returns 0
|
||||||
trailer is verified, state->how is reset to LOOK to look for the next gzip
|
on success, -1 on failure. */
|
||||||
stream or raw data, once state->have is depleted. Returns 0 on success, -1
|
|
||||||
on failure. Failures may include invalid compressed data or a failed gzip
|
|
||||||
trailer verification. */
|
|
||||||
local int gz_decomp(state)
|
local int gz_decomp(state)
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = Z_OK;
|
||||||
unsigned had;
|
unsigned had;
|
||||||
unsigned long crc, len;
|
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
/* fill output buffer up to end of deflate stream */
|
/* fill output buffer up to end of deflate stream */
|
||||||
@ -245,15 +182,15 @@ local int gz_decomp(state)
|
|||||||
if (strm->avail_in == 0 && gz_avail(state) == -1)
|
if (strm->avail_in == 0 && gz_avail(state) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
if (strm->avail_in == 0) {
|
if (strm->avail_in == 0) {
|
||||||
gz_error(state, Z_DATA_ERROR, "unexpected end of file");
|
gz_error(state, Z_BUF_ERROR, "unexpected end of file");
|
||||||
return -1;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* decompress and handle errors */
|
/* decompress and handle errors */
|
||||||
ret = inflate(strm, Z_NO_FLUSH);
|
ret = inflate(strm, Z_NO_FLUSH);
|
||||||
if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
|
if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
|
||||||
gz_error(state, Z_STREAM_ERROR,
|
gz_error(state, Z_STREAM_ERROR,
|
||||||
"internal error: inflate stream corrupt");
|
"internal error: inflate stream corrupt");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (ret == Z_MEM_ERROR) {
|
if (ret == Z_MEM_ERROR) {
|
||||||
@ -262,67 +199,55 @@ local int gz_decomp(state)
|
|||||||
}
|
}
|
||||||
if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
|
if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
|
||||||
gz_error(state, Z_DATA_ERROR,
|
gz_error(state, Z_DATA_ERROR,
|
||||||
strm->msg == NULL ? "compressed data error" : strm->msg);
|
strm->msg == NULL ? "compressed data error" : strm->msg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} while (strm->avail_out && ret != Z_STREAM_END);
|
} while (strm->avail_out && ret != Z_STREAM_END);
|
||||||
|
|
||||||
/* update available output and crc check value */
|
/* update available output */
|
||||||
state->have = had - strm->avail_out;
|
state->x.have = had - strm->avail_out;
|
||||||
state->next = strm->next_out - state->have;
|
state->x.next = strm->next_out - state->x.have;
|
||||||
strm->adler = crc32(strm->adler, state->next, state->have);
|
|
||||||
|
|
||||||
/* check gzip trailer if at end of deflate stream */
|
/* if the gzip stream completed successfully, look for another */
|
||||||
if (ret == Z_STREAM_END) {
|
if (ret == Z_STREAM_END)
|
||||||
if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) {
|
state->how = LOOK;
|
||||||
gz_error(state, Z_DATA_ERROR, "unexpected end of file");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (crc != strm->adler) {
|
|
||||||
gz_error(state, Z_DATA_ERROR, "incorrect data check");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (len != (strm->total_out & 0xffffffffL)) {
|
|
||||||
gz_error(state, Z_DATA_ERROR, "incorrect length check");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
state->how = LOOK; /* ready for next stream, once have is 0 (leave
|
|
||||||
state->direct unchanged to remember how) */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* good decompression */
|
/* good decompression */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make data and put in the output buffer. Assumes that state->have == 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
|
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
|
file depending on state->how. If state->how is LOOK, then a gzip header is
|
||||||
looked for (and skipped if found) to determine wither to copy or decompress.
|
looked for to determine whether to copy or decompress. Returns -1 on error,
|
||||||
Returns -1 on error, otherwise 0. gz_make() will leave state->have as COPY
|
otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
|
||||||
or GZIP unless the end of the input file has been reached and all data has
|
end of the input file has been reached and all data has been processed. */
|
||||||
been processed. */
|
local int gz_fetch(state)
|
||||||
local int gz_make(state)
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
{
|
{
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
if (state->how == LOOK) { /* look for gzip header */
|
do {
|
||||||
if (gz_head(state) == -1)
|
switch(state->how) {
|
||||||
return -1;
|
case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
|
||||||
if (state->have) /* got some data from gz_head() */
|
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;
|
return 0;
|
||||||
}
|
case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
|
||||||
if (state->how == COPY) { /* straight copy */
|
strm->avail_out = state->size << 1;
|
||||||
if (gz_load(state, state->out, state->size << 1, &(state->have)) == -1)
|
strm->next_out = state->out;
|
||||||
return -1;
|
if (gz_decomp(state) == -1)
|
||||||
state->next = state->out;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (state->how == GZIP) { /* decompress */
|
} while (state->x.have == 0 && (!state->eof || strm->avail_in));
|
||||||
strm->avail_out = state->size << 1;
|
|
||||||
strm->next_out = state->out;
|
|
||||||
if (gz_decomp(state) == -1)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,12 +261,12 @@ local int gz_skip(state, len)
|
|||||||
/* skip over len bytes or reach end-of-file, whichever comes first */
|
/* skip over len bytes or reach end-of-file, whichever comes first */
|
||||||
while (len)
|
while (len)
|
||||||
/* skip over whatever is in output buffer */
|
/* skip over whatever is in output buffer */
|
||||||
if (state->have) {
|
if (state->x.have) {
|
||||||
n = GT_OFF(state->have) || (z_off64_t)state->have > len ?
|
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
|
||||||
(unsigned)len : state->have;
|
(unsigned)len : state->x.have;
|
||||||
state->have -= n;
|
state->x.have -= n;
|
||||||
state->next += n;
|
state->x.next += n;
|
||||||
state->pos += n;
|
state->x.pos += n;
|
||||||
len -= n;
|
len -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,7 +277,7 @@ local int gz_skip(state, len)
|
|||||||
/* need more data to skip -- load up output buffer */
|
/* need more data to skip -- load up output buffer */
|
||||||
else {
|
else {
|
||||||
/* get more output, looking for header if required */
|
/* get more output, looking for header if required */
|
||||||
if (gz_make(state) == -1)
|
if (gz_fetch(state) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -374,14 +299,15 @@ int ZEXPORT gzread(file, buf, len)
|
|||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
strm = &(state->strm);
|
strm = &(state->strm);
|
||||||
|
|
||||||
/* check that we're reading and that there's no error */
|
/* check that we're reading and that there's no (serious) error */
|
||||||
if (state->mode != GZ_READ || state->err != Z_OK)
|
if (state->mode != GZ_READ ||
|
||||||
|
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* since an int is returned, make sure len fits in one, otherwise return
|
/* since an int is returned, make sure len fits in one, otherwise return
|
||||||
with an error (this avoids the flaw in the interface) */
|
with an error (this avoids the flaw in the interface) */
|
||||||
if ((int)len < 0) {
|
if ((int)len < 0) {
|
||||||
gz_error(state, Z_BUF_ERROR, "requested length does not fit in int");
|
gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -400,24 +326,26 @@ int ZEXPORT gzread(file, buf, len)
|
|||||||
got = 0;
|
got = 0;
|
||||||
do {
|
do {
|
||||||
/* first just try copying data from the output buffer */
|
/* first just try copying data from the output buffer */
|
||||||
if (state->have) {
|
if (state->x.have) {
|
||||||
n = state->have > len ? len : state->have;
|
n = state->x.have > len ? len : state->x.have;
|
||||||
memcpy(buf, state->next, n);
|
memcpy(buf, state->x.next, n);
|
||||||
state->next += n;
|
state->x.next += n;
|
||||||
state->have -= n;
|
state->x.have -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* output buffer empty -- return if we're at the end of the input */
|
/* output buffer empty -- return if we're at the end of the input */
|
||||||
else if (state->eof && strm->avail_in == 0)
|
else if (state->eof && strm->avail_in == 0) {
|
||||||
|
state->past = 1; /* tried to read past end */
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* need output data -- for small len or new stream load up our output
|
/* need output data -- for small len or new stream load up our output
|
||||||
buffer */
|
buffer */
|
||||||
else if (state->how == LOOK || len < (state->size << 1)) {
|
else if (state->how == LOOK || len < (state->size << 1)) {
|
||||||
/* get more output, looking for header if required */
|
/* get more output, looking for header if required */
|
||||||
if (gz_make(state) == -1)
|
if (gz_fetch(state) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
continue; /* no progress yet -- go back to memcpy() above */
|
continue; /* no progress yet -- go back to copy above */
|
||||||
/* the copy above assures that we will leave with space in the
|
/* the copy above assures that we will leave with space in the
|
||||||
output buffer, allowing at least one gzungetc() to succeed */
|
output buffer, allowing at least one gzungetc() to succeed */
|
||||||
}
|
}
|
||||||
@ -434,15 +362,15 @@ int ZEXPORT gzread(file, buf, len)
|
|||||||
strm->next_out = buf;
|
strm->next_out = buf;
|
||||||
if (gz_decomp(state) == -1)
|
if (gz_decomp(state) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
n = state->have;
|
n = state->x.have;
|
||||||
state->have = 0;
|
state->x.have = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update progress */
|
/* update progress */
|
||||||
len -= n;
|
len -= n;
|
||||||
buf = (char *)buf + n;
|
buf = (char *)buf + n;
|
||||||
got += n;
|
got += n;
|
||||||
state->pos += n;
|
state->x.pos += n;
|
||||||
} while (len);
|
} while (len);
|
||||||
|
|
||||||
/* return number of bytes read into user buffer (will fit in int) */
|
/* return number of bytes read into user buffer (will fit in int) */
|
||||||
@ -450,6 +378,7 @@ int ZEXPORT gzread(file, buf, len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
|
#undef gzgetc
|
||||||
int ZEXPORT gzgetc(file)
|
int ZEXPORT gzgetc(file)
|
||||||
gzFile file;
|
gzFile file;
|
||||||
{
|
{
|
||||||
@ -462,15 +391,16 @@ int ZEXPORT gzgetc(file)
|
|||||||
return -1;
|
return -1;
|
||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
|
|
||||||
/* check that we're reading and that there's no error */
|
/* check that we're reading and that there's no (serious) error */
|
||||||
if (state->mode != GZ_READ || state->err != Z_OK)
|
if (state->mode != GZ_READ ||
|
||||||
|
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* try output buffer (no need to check for skip request) */
|
/* try output buffer (no need to check for skip request) */
|
||||||
if (state->have) {
|
if (state->x.have) {
|
||||||
state->have--;
|
state->x.have--;
|
||||||
state->pos++;
|
state->x.pos++;
|
||||||
return *(state->next)++;
|
return *(state->x.next)++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nothing there -- try gzread() */
|
/* nothing there -- try gzread() */
|
||||||
@ -478,6 +408,12 @@ int ZEXPORT gzgetc(file)
|
|||||||
return ret < 1 ? -1 : buf[0];
|
return ret < 1 ? -1 : buf[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ZEXPORT gzgetc_(file)
|
||||||
|
gzFile file;
|
||||||
|
{
|
||||||
|
return gzgetc(file);
|
||||||
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzungetc(c, file)
|
int ZEXPORT gzungetc(c, file)
|
||||||
int c;
|
int c;
|
||||||
@ -490,8 +426,9 @@ int ZEXPORT gzungetc(c, file)
|
|||||||
return -1;
|
return -1;
|
||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
|
|
||||||
/* check that we're reading and that there's no error */
|
/* check that we're reading and that there's no (serious) error */
|
||||||
if (state->mode != GZ_READ || state->err != Z_OK)
|
if (state->mode != GZ_READ ||
|
||||||
|
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* process a skip request */
|
/* process a skip request */
|
||||||
@ -506,32 +443,34 @@ int ZEXPORT gzungetc(c, file)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* if output buffer empty, put byte at end (allows more pushing) */
|
/* if output buffer empty, put byte at end (allows more pushing) */
|
||||||
if (state->have == 0) {
|
if (state->x.have == 0) {
|
||||||
state->have = 1;
|
state->x.have = 1;
|
||||||
state->next = state->out + (state->size << 1) - 1;
|
state->x.next = state->out + (state->size << 1) - 1;
|
||||||
state->next[0] = c;
|
state->x.next[0] = c;
|
||||||
state->pos--;
|
state->x.pos--;
|
||||||
|
state->past = 0;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if no room, give up (must have already done a gzungetc()) */
|
/* if no room, give up (must have already done a gzungetc()) */
|
||||||
if (state->have == (state->size << 1)) {
|
if (state->x.have == (state->size << 1)) {
|
||||||
gz_error(state, Z_BUF_ERROR, "out of room to push characters");
|
gz_error(state, Z_DATA_ERROR, "out of room to push characters");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* slide output data if needed and insert byte before existing data */
|
/* slide output data if needed and insert byte before existing data */
|
||||||
if (state->next == state->out) {
|
if (state->x.next == state->out) {
|
||||||
unsigned char *src = state->out + state->have;
|
unsigned char *src = state->out + state->x.have;
|
||||||
unsigned char *dest = state->out + (state->size << 1);
|
unsigned char *dest = state->out + (state->size << 1);
|
||||||
while (src > state->out)
|
while (src > state->out)
|
||||||
*--dest = *--src;
|
*--dest = *--src;
|
||||||
state->next = dest;
|
state->x.next = dest;
|
||||||
}
|
}
|
||||||
state->have++;
|
state->x.have++;
|
||||||
state->next--;
|
state->x.next--;
|
||||||
state->next[0] = c;
|
state->x.next[0] = c;
|
||||||
state->pos--;
|
state->x.pos--;
|
||||||
|
state->past = 0;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,8 +490,9 @@ char * ZEXPORT gzgets(file, buf, len)
|
|||||||
return NULL;
|
return NULL;
|
||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
|
|
||||||
/* check that we're reading and that there's no error */
|
/* check that we're reading and that there's no (serious) error */
|
||||||
if (state->mode != GZ_READ || state->err != Z_OK)
|
if (state->mode != GZ_READ ||
|
||||||
|
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* process a skip request */
|
/* process a skip request */
|
||||||
@ -569,32 +509,31 @@ char * ZEXPORT gzgets(file, buf, len)
|
|||||||
left = (unsigned)len - 1;
|
left = (unsigned)len - 1;
|
||||||
if (left) do {
|
if (left) do {
|
||||||
/* assure that something is in the output buffer */
|
/* assure that something is in the output buffer */
|
||||||
if (state->have == 0) {
|
if (state->x.have == 0 && gz_fetch(state) == -1)
|
||||||
if (gz_make(state) == -1)
|
return NULL; /* error */
|
||||||
return NULL; /* error */
|
if (state->x.have == 0) { /* end of file */
|
||||||
if (state->have == 0) { /* end of file */
|
state->past = 1; /* read past end */
|
||||||
if (buf == str) /* got bupkus */
|
break; /* return what we have */
|
||||||
return NULL;
|
|
||||||
break; /* got something -- return it */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* look for end-of-line in current output buffer */
|
/* look for end-of-line in current output buffer */
|
||||||
n = state->have > left ? left : state->have;
|
n = state->x.have > left ? left : state->x.have;
|
||||||
eol = memchr(state->next, '\n', n);
|
eol = memchr(state->x.next, '\n', n);
|
||||||
if (eol != NULL)
|
if (eol != NULL)
|
||||||
n = (unsigned)(eol - state->next) + 1;
|
n = (unsigned)(eol - state->x.next) + 1;
|
||||||
|
|
||||||
/* copy through end-of-line, or remainder if not found */
|
/* copy through end-of-line, or remainder if not found */
|
||||||
memcpy(buf, state->next, n);
|
memcpy(buf, state->x.next, n);
|
||||||
state->have -= n;
|
state->x.have -= n;
|
||||||
state->next += n;
|
state->x.next += n;
|
||||||
state->pos += n;
|
state->x.pos += n;
|
||||||
left -= n;
|
left -= n;
|
||||||
buf += n;
|
buf += n;
|
||||||
} while (left && eol == NULL);
|
} while (left && eol == NULL);
|
||||||
|
|
||||||
/* found end-of-line or out of space -- terminate string and return it */
|
/* return terminated string, or if nothing, end of file */
|
||||||
|
if (buf == str)
|
||||||
|
return NULL;
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
@ -610,16 +549,12 @@ int ZEXPORT gzdirect(file)
|
|||||||
return 0;
|
return 0;
|
||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
|
|
||||||
/* check that we're reading */
|
|
||||||
if (state->mode != GZ_READ)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* if the state is not known, but we can find out, then do so (this is
|
/* if the state is not known, but we can find out, then do so (this is
|
||||||
mainly for right after a gzopen() or gzdopen()) */
|
mainly for right after a gzopen() or gzdopen()) */
|
||||||
if (state->how == LOOK && state->have == 0)
|
if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
|
||||||
(void)gz_head(state);
|
(void)gz_look(state);
|
||||||
|
|
||||||
/* return 1 if reading direct, 0 if decompressing a gzip stream */
|
/* return 1 if transparent, 0 if processing a gzip stream */
|
||||||
return state->direct;
|
return state->direct;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,7 +562,7 @@ int ZEXPORT gzdirect(file)
|
|||||||
int ZEXPORT gzclose_r(file)
|
int ZEXPORT gzclose_r(file)
|
||||||
gzFile file;
|
gzFile file;
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, err;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
@ -645,9 +580,10 @@ int ZEXPORT gzclose_r(file)
|
|||||||
free(state->out);
|
free(state->out);
|
||||||
free(state->in);
|
free(state->in);
|
||||||
}
|
}
|
||||||
|
err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
|
||||||
gz_error(state, Z_OK, NULL);
|
gz_error(state, Z_OK, NULL);
|
||||||
free(state->path);
|
free(state->path);
|
||||||
ret = close(state->fd);
|
ret = close(state->fd);
|
||||||
free(state);
|
free(state);
|
||||||
return ret ? Z_ERRNO : Z_OK;
|
return ret ? Z_ERRNO : err;
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* gzwrite.c -- zlib functions for writing gzip files
|
/* gzwrite.c -- zlib functions for writing gzip files
|
||||||
* Copyright (C) 2004, 2005, 2010 Mark Adler
|
* Copyright (C) 2004, 2005, 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -18,44 +18,55 @@ local int gz_init(state)
|
|||||||
int ret;
|
int ret;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
/* allocate input and output buffers */
|
/* allocate input buffer */
|
||||||
state->in = malloc(state->want);
|
state->in = malloc(state->want);
|
||||||
state->out = malloc(state->want);
|
if (state->in == NULL) {
|
||||||
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");
|
gz_error(state, Z_MEM_ERROR, "out of memory");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate deflate memory, set up for gzip compression */
|
/* only need output buffer and deflate state if compressing */
|
||||||
strm->zalloc = Z_NULL;
|
if (!state->direct) {
|
||||||
strm->zfree = Z_NULL;
|
/* allocate output buffer */
|
||||||
strm->opaque = Z_NULL;
|
state->out = malloc(state->want);
|
||||||
ret = deflateInit2(strm, state->level, Z_DEFLATED,
|
if (state->out == NULL) {
|
||||||
15 + 16, 8, state->strategy);
|
free(state->in);
|
||||||
if (ret != Z_OK) {
|
gz_error(state, Z_MEM_ERROR, "out of memory");
|
||||||
free(state->in);
|
return -1;
|
||||||
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 */
|
/* mark state as initialized */
|
||||||
state->size = state->want;
|
state->size = state->want;
|
||||||
|
|
||||||
/* initialize write buffer */
|
/* initialize write buffer if compressing */
|
||||||
strm->avail_out = state->size;
|
if (!state->direct) {
|
||||||
strm->next_out = state->out;
|
strm->avail_out = state->size;
|
||||||
state->next = strm->next_out;
|
strm->next_out = state->out;
|
||||||
|
state->x.next = strm->next_out;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compress whatever is at avail_in and next_in and write to the output file.
|
/* 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.
|
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,
|
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. */
|
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)
|
local int gz_comp(state, flush)
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
int flush;
|
int flush;
|
||||||
@ -68,6 +79,17 @@ local int gz_comp(state, flush)
|
|||||||
if (state->size == 0 && gz_init(state) == -1)
|
if (state->size == 0 && gz_init(state) == -1)
|
||||||
return -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 */
|
/* run deflate() on provided input until it produces no more output */
|
||||||
ret = Z_OK;
|
ret = Z_OK;
|
||||||
do {
|
do {
|
||||||
@ -75,8 +97,8 @@ local int gz_comp(state, flush)
|
|||||||
doing Z_FINISH then don't write until we get to Z_STREAM_END */
|
doing Z_FINISH then don't write until we get to Z_STREAM_END */
|
||||||
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
|
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
|
||||||
(flush != Z_FINISH || ret == Z_STREAM_END))) {
|
(flush != Z_FINISH || ret == Z_STREAM_END))) {
|
||||||
have = (unsigned)(strm->next_out - state->next);
|
have = (unsigned)(strm->next_out - state->x.next);
|
||||||
if (have && ((got = write(state->fd, state->next, have)) < 0 ||
|
if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
|
||||||
(unsigned)got != have)) {
|
(unsigned)got != have)) {
|
||||||
gz_error(state, Z_ERRNO, zstrerror());
|
gz_error(state, Z_ERRNO, zstrerror());
|
||||||
return -1;
|
return -1;
|
||||||
@ -85,7 +107,7 @@ local int gz_comp(state, flush)
|
|||||||
strm->avail_out = state->size;
|
strm->avail_out = state->size;
|
||||||
strm->next_out = state->out;
|
strm->next_out = state->out;
|
||||||
}
|
}
|
||||||
state->next = strm->next_out;
|
state->x.next = strm->next_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compress */
|
/* compress */
|
||||||
@ -131,7 +153,7 @@ local int gz_zero(state, len)
|
|||||||
}
|
}
|
||||||
strm->avail_in = n;
|
strm->avail_in = n;
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
state->pos += n;
|
state->x.pos += n;
|
||||||
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
len -= n;
|
len -= n;
|
||||||
@ -163,7 +185,7 @@ int ZEXPORT gzwrite(file, buf, len)
|
|||||||
/* since an int is returned, make sure len fits in one, otherwise return
|
/* since an int is returned, make sure len fits in one, otherwise return
|
||||||
with an error (this avoids the flaw in the interface) */
|
with an error (this avoids the flaw in the interface) */
|
||||||
if ((int)len < 0) {
|
if ((int)len < 0) {
|
||||||
gz_error(state, Z_BUF_ERROR, "requested length does not fit in int");
|
gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +215,7 @@ int ZEXPORT gzwrite(file, buf, len)
|
|||||||
n = len;
|
n = len;
|
||||||
memcpy(strm->next_in + strm->avail_in, buf, n);
|
memcpy(strm->next_in + strm->avail_in, buf, n);
|
||||||
strm->avail_in += n;
|
strm->avail_in += n;
|
||||||
state->pos += n;
|
state->x.pos += n;
|
||||||
buf = (char *)buf + n;
|
buf = (char *)buf + n;
|
||||||
len -= n;
|
len -= n;
|
||||||
if (len && gz_comp(state, Z_NO_FLUSH) == -1)
|
if (len && gz_comp(state, Z_NO_FLUSH) == -1)
|
||||||
@ -208,7 +230,7 @@ int ZEXPORT gzwrite(file, buf, len)
|
|||||||
/* directly compress user buffer to file */
|
/* directly compress user buffer to file */
|
||||||
strm->avail_in = len;
|
strm->avail_in = len;
|
||||||
strm->next_in = (voidp)buf;
|
strm->next_in = (voidp)buf;
|
||||||
state->pos += len;
|
state->x.pos += len;
|
||||||
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -249,15 +271,15 @@ int ZEXPORT gzputc(file, c)
|
|||||||
if (strm->avail_in == 0)
|
if (strm->avail_in == 0)
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
strm->next_in[strm->avail_in++] = c;
|
strm->next_in[strm->avail_in++] = c;
|
||||||
state->pos++;
|
state->x.pos++;
|
||||||
return c;
|
return c & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* no room in buffer or not initialized, use gz_write() */
|
/* no room in buffer or not initialized, use gz_write() */
|
||||||
buf[0] = c;
|
buf[0] = c;
|
||||||
if (gzwrite(file, buf, 1) != 1)
|
if (gzwrite(file, buf, 1) != 1)
|
||||||
return -1;
|
return -1;
|
||||||
return c;
|
return c & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
@ -274,7 +296,7 @@ int ZEXPORT gzputs(file, str)
|
|||||||
return ret == 0 && len != 0 ? -1 : ret;
|
return ret == 0 && len != 0 ? -1 : ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef STDC
|
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
@ -316,19 +338,19 @@ int ZEXPORTVA gzprintf (gzFile file, const char *format, ...)
|
|||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
#ifdef NO_vsnprintf
|
#ifdef NO_vsnprintf
|
||||||
# ifdef HAS_vsprintf_void
|
# ifdef HAS_vsprintf_void
|
||||||
(void)vsprintf(state->in, format, va);
|
(void)vsprintf((char *)(state->in), format, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
for (len = 0; len < size; len++)
|
for (len = 0; len < size; len++)
|
||||||
if (state->in[len] == 0) break;
|
if (state->in[len] == 0) break;
|
||||||
# else
|
# else
|
||||||
len = vsprintf(state->in, format, va);
|
len = vsprintf((char *)(state->in), format, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef HAS_vsnprintf_void
|
# ifdef HAS_vsnprintf_void
|
||||||
(void)vsnprintf(state->in, size, format, va);
|
(void)vsnprintf((char *)(state->in), size, format, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
len = strlen(state->in);
|
len = strlen((char *)(state->in));
|
||||||
# else
|
# else
|
||||||
len = vsnprintf((char *)(state->in), size, format, va);
|
len = vsnprintf((char *)(state->in), size, format, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
@ -342,11 +364,11 @@ int ZEXPORTVA gzprintf (gzFile file, const char *format, ...)
|
|||||||
/* update buffer and position, defer compression until needed */
|
/* update buffer and position, defer compression until needed */
|
||||||
strm->avail_in = (unsigned)len;
|
strm->avail_in = (unsigned)len;
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
state->pos += len;
|
state->x.pos += len;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !STDC */
|
#else /* !STDC && !Z_HAVE_STDARG_H */
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
||||||
@ -366,6 +388,10 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
|||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
strm = &(state->strm);
|
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 */
|
/* check that we're writing and that there's no error */
|
||||||
if (state->mode != GZ_WRITE || state->err != Z_OK)
|
if (state->mode != GZ_WRITE || state->err != Z_OK)
|
||||||
return 0;
|
return 0;
|
||||||
@ -390,22 +416,23 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
|||||||
state->in[size - 1] = 0;
|
state->in[size - 1] = 0;
|
||||||
#ifdef NO_snprintf
|
#ifdef NO_snprintf
|
||||||
# ifdef HAS_sprintf_void
|
# ifdef HAS_sprintf_void
|
||||||
sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8,
|
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);
|
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
|
||||||
for (len = 0; len < size; len++)
|
for (len = 0; len < size; len++)
|
||||||
if (state->in[len] == 0) break;
|
if (state->in[len] == 0) break;
|
||||||
# else
|
# else
|
||||||
len = sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8,
|
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);
|
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef HAS_snprintf_void
|
# ifdef HAS_snprintf_void
|
||||||
snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8,
|
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);
|
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
|
||||||
len = strlen(state->in);
|
len = strlen((char *)(state->in));
|
||||||
# else
|
# else
|
||||||
len = snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8,
|
len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
|
||||||
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
|
a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
|
||||||
|
a19, a20);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -416,7 +443,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
|||||||
/* update buffer and position, defer compression until needed */
|
/* update buffer and position, defer compression until needed */
|
||||||
strm->avail_in = (unsigned)len;
|
strm->avail_in = (unsigned)len;
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
state->pos += len;
|
state->x.pos += len;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,7 +527,7 @@ int ZEXPORT gzsetparams(file, level, strategy)
|
|||||||
int ZEXPORT gzclose_w(file)
|
int ZEXPORT gzclose_w(file)
|
||||||
gzFile file;
|
gzFile file;
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = Z_OK;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
@ -515,17 +542,24 @@ int ZEXPORT gzclose_w(file)
|
|||||||
/* check for seek request */
|
/* check for seek request */
|
||||||
if (state->seek) {
|
if (state->seek) {
|
||||||
state->seek = 0;
|
state->seek = 0;
|
||||||
ret += gz_zero(state, state->skip);
|
if (gz_zero(state, state->skip) == -1)
|
||||||
|
ret = state->err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flush, free memory, and close file */
|
/* flush, free memory, and close file */
|
||||||
ret += gz_comp(state, Z_FINISH);
|
if (state->size) {
|
||||||
(void)deflateEnd(&(state->strm));
|
if (gz_comp(state, Z_FINISH) == -1)
|
||||||
free(state->out);
|
ret = state->err;
|
||||||
free(state->in);
|
if (!state->direct) {
|
||||||
|
(void)deflateEnd(&(state->strm));
|
||||||
|
free(state->out);
|
||||||
|
}
|
||||||
|
free(state->in);
|
||||||
|
}
|
||||||
gz_error(state, Z_OK, NULL);
|
gz_error(state, Z_OK, NULL);
|
||||||
free(state->path);
|
free(state->path);
|
||||||
ret += close(state->fd);
|
if (close(state->fd) == -1)
|
||||||
|
ret = Z_ERRNO;
|
||||||
free(state);
|
free(state);
|
||||||
return ret ? Z_ERRNO : Z_OK;
|
return ret;
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* infback.c -- inflate using a call-back interface
|
/* infback.c -- inflate using a call-back interface
|
||||||
* Copyright (C) 1995-2009 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -42,10 +42,19 @@ int stream_size;
|
|||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
strm->msg = Z_NULL; /* in case we return an error */
|
strm->msg = Z_NULL; /* in case we return an error */
|
||||||
if (strm->zalloc == (alloc_func)0) {
|
if (strm->zalloc == (alloc_func)0) {
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
#else
|
||||||
strm->zalloc = zcalloc;
|
strm->zalloc = zcalloc;
|
||||||
strm->opaque = (voidpf)0;
|
strm->opaque = (voidpf)0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (strm->zfree == (free_func)0) strm->zfree = zcfree;
|
if (strm->zfree == (free_func)0)
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
#else
|
||||||
|
strm->zfree = zcfree;
|
||||||
|
#endif
|
||||||
state = (struct inflate_state FAR *)ZALLOC(strm, 1,
|
state = (struct inflate_state FAR *)ZALLOC(strm, 1,
|
||||||
sizeof(struct inflate_state));
|
sizeof(struct inflate_state));
|
||||||
if (state == Z_NULL) return Z_MEM_ERROR;
|
if (state == Z_NULL) return Z_MEM_ERROR;
|
||||||
@ -394,7 +403,6 @@ void FAR *out_desc;
|
|||||||
PULLBYTE();
|
PULLBYTE();
|
||||||
}
|
}
|
||||||
if (here.val < 16) {
|
if (here.val < 16) {
|
||||||
NEEDBITS(here.bits);
|
|
||||||
DROPBITS(here.bits);
|
DROPBITS(here.bits);
|
||||||
state->lens[state->have++] = here.val;
|
state->lens[state->have++] = here.val;
|
||||||
}
|
}
|
@ -2,9 +2,9 @@
|
|||||||
* 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] = {
|
@ -1,5 +1,5 @@
|
|||||||
/* inflate.c -- zlib decompression
|
/* inflate.c -- zlib decompression
|
||||||
* Copyright (C) 1995-2010 Mark Adler
|
* Copyright (C) 1995-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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ local int updatewindow OF((z_streamp strm, unsigned out));
|
|||||||
local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
|
local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
|
||||||
unsigned len));
|
unsigned len));
|
||||||
|
|
||||||
int ZEXPORT inflateReset(strm)
|
int ZEXPORT inflateResetKeep(strm)
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
{
|
{
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
@ -109,15 +109,13 @@ z_streamp strm;
|
|||||||
state = (struct inflate_state FAR *)strm->state;
|
state = (struct inflate_state FAR *)strm->state;
|
||||||
strm->total_in = strm->total_out = state->total = 0;
|
strm->total_in = strm->total_out = state->total = 0;
|
||||||
strm->msg = Z_NULL;
|
strm->msg = Z_NULL;
|
||||||
strm->adler = 1; /* to support ill-conceived Java test suite */
|
if (state->wrap) /* to support ill-conceived Java test suite */
|
||||||
|
strm->adler = state->wrap & 1;
|
||||||
state->mode = HEAD;
|
state->mode = HEAD;
|
||||||
state->last = 0;
|
state->last = 0;
|
||||||
state->havedict = 0;
|
state->havedict = 0;
|
||||||
state->dmax = 32768U;
|
state->dmax = 32768U;
|
||||||
state->head = Z_NULL;
|
state->head = Z_NULL;
|
||||||
state->wsize = 0;
|
|
||||||
state->whave = 0;
|
|
||||||
state->wnext = 0;
|
|
||||||
state->hold = 0;
|
state->hold = 0;
|
||||||
state->bits = 0;
|
state->bits = 0;
|
||||||
state->lencode = state->distcode = state->next = state->codes;
|
state->lencode = state->distcode = state->next = state->codes;
|
||||||
@ -127,6 +125,19 @@ z_streamp strm;
|
|||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ZEXPORT inflateReset(strm)
|
||||||
|
z_streamp strm;
|
||||||
|
{
|
||||||
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
|
if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
||||||
|
state = (struct inflate_state FAR *)strm->state;
|
||||||
|
state->wsize = 0;
|
||||||
|
state->whave = 0;
|
||||||
|
state->wnext = 0;
|
||||||
|
return inflateResetKeep(strm);
|
||||||
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateReset2(strm, windowBits)
|
int ZEXPORT inflateReset2(strm, windowBits)
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
int windowBits;
|
int windowBits;
|
||||||
@ -180,10 +191,19 @@ int stream_size;
|
|||||||
if (strm == Z_NULL) return Z_STREAM_ERROR;
|
if (strm == Z_NULL) return Z_STREAM_ERROR;
|
||||||
strm->msg = Z_NULL; /* in case we return an error */
|
strm->msg = Z_NULL; /* in case we return an error */
|
||||||
if (strm->zalloc == (alloc_func)0) {
|
if (strm->zalloc == (alloc_func)0) {
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
#else
|
||||||
strm->zalloc = zcalloc;
|
strm->zalloc = zcalloc;
|
||||||
strm->opaque = (voidpf)0;
|
strm->opaque = (voidpf)0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (strm->zfree == (free_func)0) strm->zfree = zcfree;
|
if (strm->zfree == (free_func)0)
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
#else
|
||||||
|
strm->zfree = zcfree;
|
||||||
|
#endif
|
||||||
state = (struct inflate_state FAR *)
|
state = (struct inflate_state FAR *)
|
||||||
ZALLOC(strm, 1, sizeof(struct inflate_state));
|
ZALLOC(strm, 1, sizeof(struct inflate_state));
|
||||||
if (state == Z_NULL) return Z_MEM_ERROR;
|
if (state == Z_NULL) return Z_MEM_ERROR;
|
||||||
@ -321,8 +341,8 @@ void makefixed()
|
|||||||
low = 0;
|
low = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if ((low % 7) == 0) printf("\n ");
|
if ((low % 7) == 0) printf("\n ");
|
||||||
printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
|
printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
|
||||||
state.lencode[low].val);
|
state.lencode[low].bits, state.lencode[low].val);
|
||||||
if (++low == size) break;
|
if (++low == size) break;
|
||||||
putchar(',');
|
putchar(',');
|
||||||
}
|
}
|
||||||
@ -499,11 +519,6 @@ unsigned out;
|
|||||||
bits -= bits & 7; \
|
bits -= bits & 7; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* Reverse the bytes in a 32-bit value */
|
|
||||||
#define REVERSE(q) \
|
|
||||||
((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
|
|
||||||
(((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
inflate() uses a state machine to process as much input data and generate as
|
inflate() uses a state machine to process as much input data and generate as
|
||||||
much output data as possible before returning. The state machine is
|
much output data as possible before returning. The state machine is
|
||||||
@ -797,7 +812,7 @@ int flush;
|
|||||||
#endif
|
#endif
|
||||||
case DICTID:
|
case DICTID:
|
||||||
NEEDBITS(32);
|
NEEDBITS(32);
|
||||||
strm->adler = state->check = REVERSE(hold);
|
strm->adler = state->check = ZSWAP32(hold);
|
||||||
INITBITS();
|
INITBITS();
|
||||||
state->mode = DICT;
|
state->mode = DICT;
|
||||||
case DICT:
|
case DICT:
|
||||||
@ -925,7 +940,6 @@ int flush;
|
|||||||
PULLBYTE();
|
PULLBYTE();
|
||||||
}
|
}
|
||||||
if (here.val < 16) {
|
if (here.val < 16) {
|
||||||
NEEDBITS(here.bits);
|
|
||||||
DROPBITS(here.bits);
|
DROPBITS(here.bits);
|
||||||
state->lens[state->have++] = here.val;
|
state->lens[state->have++] = here.val;
|
||||||
}
|
}
|
||||||
@ -1170,7 +1184,7 @@ int flush;
|
|||||||
#ifdef GUNZIP
|
#ifdef GUNZIP
|
||||||
state->flags ? hold :
|
state->flags ? hold :
|
||||||
#endif
|
#endif
|
||||||
REVERSE(hold)) != state->check) {
|
ZSWAP32(hold)) != state->check) {
|
||||||
strm->msg = (char *)"incorrect data check";
|
strm->msg = (char *)"incorrect data check";
|
||||||
state->mode = BAD;
|
state->mode = BAD;
|
||||||
break;
|
break;
|
||||||
@ -1214,7 +1228,8 @@ int flush;
|
|||||||
*/
|
*/
|
||||||
inf_leave:
|
inf_leave:
|
||||||
RESTORE();
|
RESTORE();
|
||||||
if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
|
if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
|
||||||
|
(state->mode < CHECK || flush != Z_FINISH)))
|
||||||
if (updatewindow(strm, out)) {
|
if (updatewindow(strm, out)) {
|
||||||
state->mode = MEM;
|
state->mode = MEM;
|
||||||
return Z_MEM_ERROR;
|
return Z_MEM_ERROR;
|
||||||
@ -1255,7 +1270,10 @@ const Bytef *dictionary;
|
|||||||
uInt dictLength;
|
uInt dictLength;
|
||||||
{
|
{
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
unsigned long id;
|
unsigned long dictid;
|
||||||
|
unsigned char *next;
|
||||||
|
unsigned avail;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* check state */
|
/* check state */
|
||||||
if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
||||||
@ -1263,29 +1281,27 @@ uInt dictLength;
|
|||||||
if (state->wrap != 0 && state->mode != DICT)
|
if (state->wrap != 0 && state->mode != DICT)
|
||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
|
|
||||||
/* check for correct dictionary id */
|
/* check for correct dictionary identifier */
|
||||||
if (state->mode == DICT) {
|
if (state->mode == DICT) {
|
||||||
id = adler32(0L, Z_NULL, 0);
|
dictid = adler32(0L, Z_NULL, 0);
|
||||||
id = adler32(id, dictionary, dictLength);
|
dictid = adler32(dictid, dictionary, dictLength);
|
||||||
if (id != state->check)
|
if (dictid != state->check)
|
||||||
return Z_DATA_ERROR;
|
return Z_DATA_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy dictionary to window */
|
/* copy dictionary to window using updatewindow(), which will amend the
|
||||||
if (updatewindow(strm, strm->avail_out)) {
|
existing dictionary if appropriate */
|
||||||
|
next = strm->next_out;
|
||||||
|
avail = strm->avail_out;
|
||||||
|
strm->next_out = (Bytef *)dictionary + dictLength;
|
||||||
|
strm->avail_out = 0;
|
||||||
|
ret = updatewindow(strm, dictLength);
|
||||||
|
strm->avail_out = avail;
|
||||||
|
strm->next_out = next;
|
||||||
|
if (ret) {
|
||||||
state->mode = MEM;
|
state->mode = MEM;
|
||||||
return Z_MEM_ERROR;
|
return Z_MEM_ERROR;
|
||||||
}
|
}
|
||||||
if (dictLength > state->wsize) {
|
|
||||||
zmemcpy(state->window, dictionary + dictLength - state->wsize,
|
|
||||||
state->wsize);
|
|
||||||
state->whave = state->wsize;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
zmemcpy(state->window + state->wsize - dictLength, dictionary,
|
|
||||||
dictLength);
|
|
||||||
state->whave = dictLength;
|
|
||||||
}
|
|
||||||
state->havedict = 1;
|
state->havedict = 1;
|
||||||
Tracev((stderr, "inflate: dictionary set\n"));
|
Tracev((stderr, "inflate: dictionary set\n"));
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
@ -1433,8 +1449,8 @@ z_streamp source;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* copy state */
|
/* copy state */
|
||||||
zmemcpy(dest, source, sizeof(z_stream));
|
zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
|
||||||
zmemcpy(copy, state, sizeof(struct inflate_state));
|
zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
|
||||||
if (state->lencode >= state->codes &&
|
if (state->lencode >= state->codes &&
|
||||||
state->lencode <= state->codes + ENOUGH - 1) {
|
state->lencode <= state->codes + ENOUGH - 1) {
|
||||||
copy->lencode = copy->codes + (state->lencode - state->codes);
|
copy->lencode = copy->codes + (state->lencode - state->codes);
|
@ -1,5 +1,5 @@
|
|||||||
/* inftrees.c -- generate Huffman trees for efficient decoding
|
/* inftrees.c -- generate Huffman trees for efficient decoding
|
||||||
* Copyright (C) 1995-2010 Mark Adler
|
* Copyright (C) 1995-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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
#define MAXBITS 15
|
#define MAXBITS 15
|
||||||
|
|
||||||
const char inflate_copyright[] =
|
const char inflate_copyright[] =
|
||||||
" inflate 1.2.5 Copyright 1995-2010 Mark Adler ";
|
" inflate 1.2.7 Copyright 1995-2012 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
|
||||||
@ -62,7 +62,7 @@ unsigned short FAR *work;
|
|||||||
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, 73, 195};
|
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 78, 68};
|
||||||
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,
|
||||||
@ -289,38 +289,14 @@ unsigned short FAR *work;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* 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;
|
||||||
here.op = (unsigned char)64; /* invalid code marker */
|
next[huff] = here;
|
||||||
here.bits = (unsigned char)(len - drop);
|
|
||||||
here.val = (unsigned short)0;
|
|
||||||
while (huff != 0) {
|
|
||||||
/* when done with sub-table, drop back to root table */
|
|
||||||
if (drop != 0 && (huff & mask) != low) {
|
|
||||||
drop = 0;
|
|
||||||
len = root;
|
|
||||||
next = *table;
|
|
||||||
here.bits = (unsigned char)len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* put invalid code marker in table */
|
|
||||||
next[huff >> drop] = here;
|
|
||||||
|
|
||||||
/* 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 */
|
/* set return parameters */
|
@ -1,5 +1,5 @@
|
|||||||
/* minigzip.c -- simulate gzip using the zlib compression library
|
/* minigzip.c -- simulate gzip using the zlib compression library
|
||||||
* Copyright (C) 1995-2006, 2010 Jean-loup Gailly.
|
* Copyright (C) 1995-2006, 2010, 2011 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -138,6 +138,197 @@ static void pwinerror (s)
|
|||||||
# define local
|
# define local
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
/* for Z_SOLO, create simplified gz* functions using deflate and inflate */
|
||||||
|
|
||||||
|
#if defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)
|
||||||
|
# include <unistd.h> /* for unlink() */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void *myalloc OF((void *, unsigned, unsigned));
|
||||||
|
void myfree OF((void *, void *));
|
||||||
|
|
||||||
|
void *myalloc(q, n, m)
|
||||||
|
void *q;
|
||||||
|
unsigned n, m;
|
||||||
|
{
|
||||||
|
q = Z_NULL;
|
||||||
|
return calloc(n, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
void myfree(q, p)
|
||||||
|
void *q, *p;
|
||||||
|
{
|
||||||
|
q = Z_NULL;
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct gzFile_s {
|
||||||
|
FILE *file;
|
||||||
|
int write;
|
||||||
|
int err;
|
||||||
|
char *msg;
|
||||||
|
z_stream strm;
|
||||||
|
} *gzFile;
|
||||||
|
|
||||||
|
gzFile gzopen OF((const char *, const char *));
|
||||||
|
gzFile gzdopen OF((int, const char *));
|
||||||
|
gzFile gz_open OF((const char *, int, const char *));
|
||||||
|
|
||||||
|
gzFile gzopen(path, mode)
|
||||||
|
const char *path;
|
||||||
|
const char *mode;
|
||||||
|
{
|
||||||
|
return gz_open(path, -1, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
gzFile gzdopen(fd, mode)
|
||||||
|
int fd;
|
||||||
|
const char *mode;
|
||||||
|
{
|
||||||
|
return gz_open(NULL, fd, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
gzFile gz_open(path, fd, mode)
|
||||||
|
const char *path;
|
||||||
|
int fd;
|
||||||
|
const char *mode;
|
||||||
|
{
|
||||||
|
gzFile gz;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
gz = malloc(sizeof(struct gzFile_s));
|
||||||
|
if (gz == NULL)
|
||||||
|
return NULL;
|
||||||
|
gz->write = strchr(mode, 'w') != NULL;
|
||||||
|
gz->strm.zalloc = myalloc;
|
||||||
|
gz->strm.zfree = myfree;
|
||||||
|
gz->strm.opaque = Z_NULL;
|
||||||
|
if (gz->write)
|
||||||
|
ret = deflateInit2(&(gz->strm), -1, 8, 15 + 16, 8, 0);
|
||||||
|
else {
|
||||||
|
gz->strm.next_in = 0;
|
||||||
|
gz->strm.avail_in = Z_NULL;
|
||||||
|
ret = inflateInit2(&(gz->strm), 15 + 16);
|
||||||
|
}
|
||||||
|
if (ret != Z_OK) {
|
||||||
|
free(gz);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
gz->file = path == NULL ? fdopen(fd, gz->write ? "wb" : "rb") :
|
||||||
|
fopen(path, gz->write ? "wb" : "rb");
|
||||||
|
if (gz->file == NULL) {
|
||||||
|
gz->write ? deflateEnd(&(gz->strm)) : inflateEnd(&(gz->strm));
|
||||||
|
free(gz);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
gz->err = 0;
|
||||||
|
gz->msg = "";
|
||||||
|
return gz;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gzwrite OF((gzFile, const void *, unsigned));
|
||||||
|
|
||||||
|
int gzwrite(gz, buf, len)
|
||||||
|
gzFile gz;
|
||||||
|
const void *buf;
|
||||||
|
unsigned len;
|
||||||
|
{
|
||||||
|
z_stream *strm;
|
||||||
|
unsigned char out[BUFLEN];
|
||||||
|
|
||||||
|
if (gz == NULL || !gz->write)
|
||||||
|
return 0;
|
||||||
|
strm = &(gz->strm);
|
||||||
|
strm->next_in = (void *)buf;
|
||||||
|
strm->avail_in = len;
|
||||||
|
do {
|
||||||
|
strm->next_out = out;
|
||||||
|
strm->avail_out = BUFLEN;
|
||||||
|
(void)deflate(strm, Z_NO_FLUSH);
|
||||||
|
fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
|
||||||
|
} while (strm->avail_out == 0);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gzread OF((gzFile, void *, unsigned));
|
||||||
|
|
||||||
|
int gzread(gz, buf, len)
|
||||||
|
gzFile gz;
|
||||||
|
void *buf;
|
||||||
|
unsigned len;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
unsigned got;
|
||||||
|
unsigned char in[1];
|
||||||
|
z_stream *strm;
|
||||||
|
|
||||||
|
if (gz == NULL || gz->write)
|
||||||
|
return 0;
|
||||||
|
if (gz->err)
|
||||||
|
return 0;
|
||||||
|
strm = &(gz->strm);
|
||||||
|
strm->next_out = (void *)buf;
|
||||||
|
strm->avail_out = len;
|
||||||
|
do {
|
||||||
|
got = fread(in, 1, 1, gz->file);
|
||||||
|
if (got == 0)
|
||||||
|
break;
|
||||||
|
strm->next_in = in;
|
||||||
|
strm->avail_in = 1;
|
||||||
|
ret = inflate(strm, Z_NO_FLUSH);
|
||||||
|
if (ret == Z_DATA_ERROR) {
|
||||||
|
gz->err = Z_DATA_ERROR;
|
||||||
|
gz->msg = strm->msg;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (ret == Z_STREAM_END)
|
||||||
|
inflateReset(strm);
|
||||||
|
} while (strm->avail_out);
|
||||||
|
return len - strm->avail_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gzclose OF((gzFile));
|
||||||
|
|
||||||
|
int gzclose(gz)
|
||||||
|
gzFile gz;
|
||||||
|
{
|
||||||
|
z_stream *strm;
|
||||||
|
unsigned char out[BUFLEN];
|
||||||
|
|
||||||
|
if (gz == NULL)
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
strm = &(gz->strm);
|
||||||
|
if (gz->write) {
|
||||||
|
strm->next_in = Z_NULL;
|
||||||
|
strm->avail_in = 0;
|
||||||
|
do {
|
||||||
|
strm->next_out = out;
|
||||||
|
strm->avail_out = BUFLEN;
|
||||||
|
(void)deflate(strm, Z_FINISH);
|
||||||
|
fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
|
||||||
|
} while (strm->avail_out == 0);
|
||||||
|
deflateEnd(strm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
inflateEnd(strm);
|
||||||
|
fclose(gz->file);
|
||||||
|
free(gz);
|
||||||
|
return Z_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *gzerror OF((gzFile, int *));
|
||||||
|
|
||||||
|
const char *gzerror(gz, err)
|
||||||
|
gzFile gz;
|
||||||
|
int *err;
|
||||||
|
{
|
||||||
|
*err = gz->err;
|
||||||
|
return gz->msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
char *prog;
|
char *prog;
|
||||||
|
|
||||||
void error OF((const char *msg));
|
void error OF((const char *msg));
|
@ -1,5 +1,5 @@
|
|||||||
/* trees.c -- output deflated data using Huffman coding
|
/* trees.c -- output deflated data using Huffman coding
|
||||||
* Copyright (C) 1995-2010 Jean-loup Gailly
|
* Copyright (C) 1995-2012 Jean-loup Gailly
|
||||||
* detect_data_type() function provided freely by Cosmin Truta, 2006
|
* detect_data_type() function provided freely by Cosmin Truta, 2006
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
@ -74,11 +74,6 @@ local const uch bl_order[BL_CODES]
|
|||||||
* probability, to avoid transmitting the lengths for unused bit length codes.
|
* probability, to avoid transmitting the lengths for unused bit length codes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Buf_size (8 * 2*sizeof(char))
|
|
||||||
/* Number of bits used within bi_buf. (bi_buf might be implemented on
|
|
||||||
* more than 16 bits on some systems.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Local data. These are initialized only once.
|
* Local data. These are initialized only once.
|
||||||
*/
|
*/
|
||||||
@ -399,7 +394,6 @@ void ZLIB_INTERNAL _tr_init(s)
|
|||||||
|
|
||||||
s->bi_buf = 0;
|
s->bi_buf = 0;
|
||||||
s->bi_valid = 0;
|
s->bi_valid = 0;
|
||||||
s->last_eob_len = 8; /* enough lookahead for inflate */
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
s->compressed_len = 0L;
|
s->compressed_len = 0L;
|
||||||
s->bits_sent = 0L;
|
s->bits_sent = 0L;
|
||||||
@ -882,16 +876,18 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
|
|||||||
copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
|
copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
* Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
|
||||||
|
*/
|
||||||
|
void ZLIB_INTERNAL _tr_flush_bits(s)
|
||||||
|
deflate_state *s;
|
||||||
|
{
|
||||||
|
bi_flush(s);
|
||||||
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Send one empty static block to give enough lookahead for inflate.
|
* Send one empty static block to give enough lookahead for inflate.
|
||||||
* This takes 10 bits, of which 7 may remain in the bit buffer.
|
* This takes 10 bits, of which 7 may remain in the bit buffer.
|
||||||
* The current inflate code requires 9 bits of lookahead. If the
|
|
||||||
* last two codes for the previous block (real code plus EOB) were coded
|
|
||||||
* on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
|
|
||||||
* the last real code. In this case we send two empty static blocks instead
|
|
||||||
* of one. (There are no problems if the previous block is stored or fixed.)
|
|
||||||
* To simplify the code, we assume the worst case of last real code encoded
|
|
||||||
* on one bit only.
|
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL _tr_align(s)
|
void ZLIB_INTERNAL _tr_align(s)
|
||||||
deflate_state *s;
|
deflate_state *s;
|
||||||
@ -902,20 +898,6 @@ void ZLIB_INTERNAL _tr_align(s)
|
|||||||
s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
|
s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
|
||||||
#endif
|
#endif
|
||||||
bi_flush(s);
|
bi_flush(s);
|
||||||
/* Of the 10 bits for the empty block, we have already sent
|
|
||||||
* (10 - bi_valid) bits. The lookahead for the last real code (before
|
|
||||||
* the EOB of the previous block) was thus at least one plus the length
|
|
||||||
* of the EOB plus what we have just sent of the empty static block.
|
|
||||||
*/
|
|
||||||
if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
|
|
||||||
send_bits(s, STATIC_TREES<<1, 3);
|
|
||||||
send_code(s, END_BLOCK, static_ltree);
|
|
||||||
#ifdef DEBUG
|
|
||||||
s->compressed_len += 10L;
|
|
||||||
#endif
|
|
||||||
bi_flush(s);
|
|
||||||
}
|
|
||||||
s->last_eob_len = 7;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
@ -1118,7 +1100,6 @@ local void compress_block(s, ltree, dtree)
|
|||||||
} while (lx < s->last_lit);
|
} while (lx < s->last_lit);
|
||||||
|
|
||||||
send_code(s, END_BLOCK, ltree);
|
send_code(s, END_BLOCK, ltree);
|
||||||
s->last_eob_len = ltree[END_BLOCK].Len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
@ -1226,7 +1207,6 @@ local void copy_block(s, buf, len, header)
|
|||||||
int header; /* true if block header must be written */
|
int header; /* true if block header must be written */
|
||||||
{
|
{
|
||||||
bi_windup(s); /* align on byte boundary */
|
bi_windup(s); /* align on byte boundary */
|
||||||
s->last_eob_len = 8; /* enough lookahead for inflate */
|
|
||||||
|
|
||||||
if (header) {
|
if (header) {
|
||||||
put_short(s, (ush)len);
|
put_short(s, (ush)len);
|
@ -1,5 +1,5 @@
|
|||||||
/* zconf.h -- configuration of the zlib compression library
|
/* zconf.h -- configuration of the zlib compression library
|
||||||
* Copyright (C) 1995-2010 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -15,6 +15,7 @@
|
|||||||
* this permanently in zconf.h using "./configure --zprefix".
|
* this permanently in zconf.h using "./configure --zprefix".
|
||||||
*/
|
*/
|
||||||
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
|
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
|
||||||
|
# define Z_PREFIX_SET
|
||||||
|
|
||||||
/* all linked symbols */
|
/* all linked symbols */
|
||||||
# define _dist_code z__dist_code
|
# define _dist_code z__dist_code
|
||||||
@ -27,9 +28,11 @@
|
|||||||
# define adler32 z_adler32
|
# define adler32 z_adler32
|
||||||
# define adler32_combine z_adler32_combine
|
# define adler32_combine z_adler32_combine
|
||||||
# define adler32_combine64 z_adler32_combine64
|
# define adler32_combine64 z_adler32_combine64
|
||||||
# define compress z_compress
|
# ifndef Z_SOLO
|
||||||
# define compress2 z_compress2
|
# define compress z_compress
|
||||||
# define compressBound z_compressBound
|
# define compress2 z_compress2
|
||||||
|
# define compressBound z_compressBound
|
||||||
|
# endif
|
||||||
# define crc32 z_crc32
|
# define crc32 z_crc32
|
||||||
# define crc32_combine z_crc32_combine
|
# define crc32_combine z_crc32_combine
|
||||||
# define crc32_combine64 z_crc32_combine64
|
# define crc32_combine64 z_crc32_combine64
|
||||||
@ -40,44 +43,52 @@
|
|||||||
# define deflateInit2_ z_deflateInit2_
|
# define deflateInit2_ z_deflateInit2_
|
||||||
# define deflateInit_ z_deflateInit_
|
# define deflateInit_ z_deflateInit_
|
||||||
# define deflateParams z_deflateParams
|
# define deflateParams z_deflateParams
|
||||||
|
# define deflatePending z_deflatePending
|
||||||
# define deflatePrime z_deflatePrime
|
# define deflatePrime z_deflatePrime
|
||||||
# define deflateReset z_deflateReset
|
# define deflateReset z_deflateReset
|
||||||
|
# define deflateResetKeep z_deflateResetKeep
|
||||||
# define deflateSetDictionary z_deflateSetDictionary
|
# define deflateSetDictionary z_deflateSetDictionary
|
||||||
# define deflateSetHeader z_deflateSetHeader
|
# define deflateSetHeader z_deflateSetHeader
|
||||||
# define deflateTune z_deflateTune
|
# define deflateTune z_deflateTune
|
||||||
# define deflate_copyright z_deflate_copyright
|
# define deflate_copyright z_deflate_copyright
|
||||||
# define get_crc_table z_get_crc_table
|
# define get_crc_table z_get_crc_table
|
||||||
# define gz_error z_gz_error
|
# ifndef Z_SOLO
|
||||||
# define gz_intmax z_gz_intmax
|
# define gz_error z_gz_error
|
||||||
# define gz_strwinerror z_gz_strwinerror
|
# define gz_intmax z_gz_intmax
|
||||||
# define gzbuffer z_gzbuffer
|
# define gz_strwinerror z_gz_strwinerror
|
||||||
# define gzclearerr z_gzclearerr
|
# define gzbuffer z_gzbuffer
|
||||||
# define gzclose z_gzclose
|
# define gzclearerr z_gzclearerr
|
||||||
# define gzclose_r z_gzclose_r
|
# define gzclose z_gzclose
|
||||||
# define gzclose_w z_gzclose_w
|
# define gzclose_r z_gzclose_r
|
||||||
# define gzdirect z_gzdirect
|
# define gzclose_w z_gzclose_w
|
||||||
# define gzdopen z_gzdopen
|
# define gzdirect z_gzdirect
|
||||||
# define gzeof z_gzeof
|
# define gzdopen z_gzdopen
|
||||||
# define gzerror z_gzerror
|
# define gzeof z_gzeof
|
||||||
# define gzflush z_gzflush
|
# define gzerror z_gzerror
|
||||||
# define gzgetc z_gzgetc
|
# define gzflush z_gzflush
|
||||||
# define gzgets z_gzgets
|
# define gzgetc z_gzgetc
|
||||||
# define gzoffset z_gzoffset
|
# define gzgetc_ z_gzgetc_
|
||||||
# define gzoffset64 z_gzoffset64
|
# define gzgets z_gzgets
|
||||||
# define gzopen z_gzopen
|
# define gzoffset z_gzoffset
|
||||||
# define gzopen64 z_gzopen64
|
# define gzoffset64 z_gzoffset64
|
||||||
# define gzprintf z_gzprintf
|
# define gzopen z_gzopen
|
||||||
# define gzputc z_gzputc
|
# define gzopen64 z_gzopen64
|
||||||
# define gzputs z_gzputs
|
# ifdef _WIN32
|
||||||
# define gzread z_gzread
|
# define gzopen_w z_gzopen_w
|
||||||
# define gzrewind z_gzrewind
|
# endif
|
||||||
# define gzseek z_gzseek
|
# define gzprintf z_gzprintf
|
||||||
# define gzseek64 z_gzseek64
|
# define gzputc z_gzputc
|
||||||
# define gzsetparams z_gzsetparams
|
# define gzputs z_gzputs
|
||||||
# define gztell z_gztell
|
# define gzread z_gzread
|
||||||
# define gztell64 z_gztell64
|
# define gzrewind z_gzrewind
|
||||||
# define gzungetc z_gzungetc
|
# define gzseek z_gzseek
|
||||||
# define gzwrite z_gzwrite
|
# 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 inflate z_inflate
|
||||||
# define inflateBack z_inflateBack
|
# define inflateBack z_inflateBack
|
||||||
# define inflateBackEnd z_inflateBackEnd
|
# define inflateBackEnd z_inflateBackEnd
|
||||||
@ -95,13 +106,18 @@
|
|||||||
# define inflateSync z_inflateSync
|
# define inflateSync z_inflateSync
|
||||||
# define inflateSyncPoint z_inflateSyncPoint
|
# define inflateSyncPoint z_inflateSyncPoint
|
||||||
# define inflateUndermine z_inflateUndermine
|
# define inflateUndermine z_inflateUndermine
|
||||||
|
# define inflateResetKeep z_inflateResetKeep
|
||||||
# define inflate_copyright z_inflate_copyright
|
# define inflate_copyright z_inflate_copyright
|
||||||
# define inflate_fast z_inflate_fast
|
# define inflate_fast z_inflate_fast
|
||||||
# define inflate_table z_inflate_table
|
# define inflate_table z_inflate_table
|
||||||
# define uncompress z_uncompress
|
# ifndef Z_SOLO
|
||||||
|
# define uncompress z_uncompress
|
||||||
|
# endif
|
||||||
# define zError z_zError
|
# define zError z_zError
|
||||||
# define zcalloc z_zcalloc
|
# ifndef Z_SOLO
|
||||||
# define zcfree z_zcfree
|
# define zcalloc z_zcalloc
|
||||||
|
# define zcfree z_zcfree
|
||||||
|
# endif
|
||||||
# define zlibCompileFlags z_zlibCompileFlags
|
# define zlibCompileFlags z_zlibCompileFlags
|
||||||
# define zlibVersion z_zlibVersion
|
# define zlibVersion z_zlibVersion
|
||||||
|
|
||||||
@ -111,7 +127,9 @@
|
|||||||
# define alloc_func z_alloc_func
|
# define alloc_func z_alloc_func
|
||||||
# define charf z_charf
|
# define charf z_charf
|
||||||
# define free_func z_free_func
|
# define free_func z_free_func
|
||||||
# define gzFile z_gzFile
|
# ifndef Z_SOLO
|
||||||
|
# define gzFile z_gzFile
|
||||||
|
# endif
|
||||||
# define gz_header z_gz_header
|
# define gz_header z_gz_header
|
||||||
# define gz_headerp z_gz_headerp
|
# define gz_headerp z_gz_headerp
|
||||||
# define in_func z_in_func
|
# define in_func z_in_func
|
||||||
@ -197,6 +215,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
|
||||||
@ -243,6 +267,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
|
||||||
@ -356,12 +388,45 @@ typedef uLong FAR uLongf;
|
|||||||
typedef Byte *voidp;
|
typedef Byte *voidp;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ./configure may #define Z_U4 here */
|
||||||
|
|
||||||
|
#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
|
||||||
|
# include <limits.h>
|
||||||
|
# if (UINT_MAX == 0xffffffffUL)
|
||||||
|
# define Z_U4 unsigned
|
||||||
|
# else
|
||||||
|
# if (ULONG_MAX == 0xffffffffUL)
|
||||||
|
# define Z_U4 unsigned long
|
||||||
|
# else
|
||||||
|
# if (USHRT_MAX == 0xffffffffUL)
|
||||||
|
# define Z_U4 unsigned short
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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 */
|
#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
|
||||||
# define Z_HAVE_UNISTD_H
|
# define Z_HAVE_UNISTD_H
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
|
||||||
|
# define Z_HAVE_STDARG_H
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef STDC
|
#ifdef STDC
|
||||||
# include <sys/types.h> /* for off_t */
|
# ifndef Z_SOLO
|
||||||
|
# include <sys/types.h> /* for off_t */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# include <stddef.h> /* for wchar_t */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
|
/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
|
||||||
@ -370,21 +435,38 @@ typedef uLong FAR uLongf;
|
|||||||
* both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
|
* both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
|
||||||
* equivalently requesting no 64-bit operations
|
* equivalently requesting no 64-bit operations
|
||||||
*/
|
*/
|
||||||
#if -_LARGEFILE64_SOURCE - -1 == 1
|
#if defined(LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
|
||||||
# undef _LARGEFILE64_SOURCE
|
# undef _LARGEFILE64_SOURCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
|
#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
|
||||||
# include <unistd.h> /* for SEEK_* and off_t */
|
# define Z_HAVE_UNISTD_H
|
||||||
# ifdef VMS
|
#endif
|
||||||
# include <unixio.h> /* for off_t */
|
#ifndef Z_SOLO
|
||||||
# endif
|
# if defined(Z_HAVE_UNISTD_H) || defined(LARGEFILE64_SOURCE)
|
||||||
# ifndef z_off_t
|
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
|
||||||
# define z_off_t off_t
|
# ifdef VMS
|
||||||
|
# include <unixio.h> /* for off_t */
|
||||||
|
# endif
|
||||||
|
# ifndef z_off_t
|
||||||
|
# define z_off_t off_t
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SEEK_SET
|
#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" */
|
||||||
@ -394,18 +476,14 @@ typedef uLong FAR uLongf;
|
|||||||
# define z_off_t long
|
# define z_off_t long
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
#if !defined(_WIN32) && defined(Z_LARGE64)
|
||||||
# define z_off64_t off64_t
|
# define z_off64_t off64_t
|
||||||
#else
|
#else
|
||||||
# define z_off64_t z_off_t
|
# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
|
||||||
#endif
|
# define z_off64_t __int64
|
||||||
|
# else
|
||||||
#if defined(__OS400__)
|
# define z_off64_t z_off_t
|
||||||
# define NO_vsnprintf
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__MVS__)
|
|
||||||
# define NO_vsnprintf
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* MVS linker does not support external names larger than 8 bytes */
|
/* MVS linker does not support external names larger than 8 bytes */
|
@ -1,7 +1,7 @@
|
|||||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
||||||
version 1.2.5, April 19th, 2010
|
version 1.2.7, May 2nd, 2012
|
||||||
|
|
||||||
Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
|
Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
@ -24,8 +24,8 @@
|
|||||||
|
|
||||||
|
|
||||||
The data format used by the zlib library is described by RFCs (Request for
|
The data format used by the zlib library is described by RFCs (Request for
|
||||||
Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
|
Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
|
||||||
(zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
|
(zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ZLIB_H
|
#ifndef ZLIB_H
|
||||||
@ -37,11 +37,11 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ZLIB_VERSION "1.2.5"
|
#define ZLIB_VERSION "1.2.7"
|
||||||
#define ZLIB_VERNUM 0x1250
|
#define ZLIB_VERNUM 0x1270
|
||||||
#define ZLIB_VER_MAJOR 1
|
#define ZLIB_VER_MAJOR 1
|
||||||
#define ZLIB_VER_MINOR 2
|
#define ZLIB_VER_MINOR 2
|
||||||
#define ZLIB_VER_REVISION 5
|
#define ZLIB_VER_REVISION 7
|
||||||
#define ZLIB_VER_SUBREVISION 0
|
#define ZLIB_VER_SUBREVISION 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -83,15 +83,15 @@ typedef void (*free_func) OF((voidpf opaque, voidpf address));
|
|||||||
struct internal_state;
|
struct internal_state;
|
||||||
|
|
||||||
typedef struct z_stream_s {
|
typedef struct z_stream_s {
|
||||||
Bytef *next_in; /* next input byte */
|
z_const Bytef *next_in; /* next input byte */
|
||||||
uInt avail_in; /* number of bytes available at next_in */
|
uInt avail_in; /* number of bytes available at next_in */
|
||||||
uLong total_in; /* total nb of input bytes read so far */
|
uLong total_in; /* total number of input bytes read so far */
|
||||||
|
|
||||||
Bytef *next_out; /* next output byte should be put there */
|
Bytef *next_out; /* next output byte should be put there */
|
||||||
uInt avail_out; /* remaining free space at next_out */
|
uInt avail_out; /* remaining free space at next_out */
|
||||||
uLong total_out; /* total nb of bytes output so far */
|
uLong total_out; /* total number of bytes output so far */
|
||||||
|
|
||||||
char *msg; /* last error message, NULL if no error */
|
z_const char *msg; /* last error message, NULL if no error */
|
||||||
struct internal_state FAR *state; /* not visible by applications */
|
struct internal_state FAR *state; /* not visible by applications */
|
||||||
|
|
||||||
alloc_func zalloc; /* used to allocate the internal state */
|
alloc_func zalloc; /* used to allocate the internal state */
|
||||||
@ -327,8 +327,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
|
|||||||
|
|
||||||
Z_FINISH can be used immediately after deflateInit if all the compression
|
Z_FINISH can be used immediately after deflateInit if all the compression
|
||||||
is to be done in a single step. In this case, avail_out must be at least the
|
is to be done in a single step. In this case, avail_out must be at least the
|
||||||
value returned by deflateBound (see below). If deflate does not return
|
value returned by deflateBound (see below). Then deflate is guaranteed to
|
||||||
Z_STREAM_END, then it must be called again as described above.
|
return Z_STREAM_END. If not enough output space is provided, deflate will
|
||||||
|
not return Z_STREAM_END, and it must be called again as described above.
|
||||||
|
|
||||||
deflate() sets strm->adler to the adler32 checksum of all input read
|
deflate() sets strm->adler to the adler32 checksum of all input read
|
||||||
so far (that is, total_in bytes).
|
so far (that is, total_in bytes).
|
||||||
@ -451,23 +452,29 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
|
|||||||
error. However if all decompression is to be performed in a single step (a
|
error. However if all decompression is to be performed in a single step (a
|
||||||
single call of inflate), the parameter flush should be set to Z_FINISH. In
|
single call of inflate), the parameter flush should be set to Z_FINISH. In
|
||||||
this case all pending input is processed and all pending output is flushed;
|
this case all pending input is processed and all pending output is flushed;
|
||||||
avail_out must be large enough to hold all the uncompressed data. (The size
|
avail_out must be large enough to hold all of the uncompressed data for the
|
||||||
of the uncompressed data may have been saved by the compressor for this
|
operation to complete. (The size of the uncompressed data may have been
|
||||||
purpose.) The next operation on this stream must be inflateEnd to deallocate
|
saved by the compressor for this purpose.) The use of Z_FINISH is not
|
||||||
the decompression state. The use of Z_FINISH is never required, but can be
|
required to perform an inflation in one step. However it may be used to
|
||||||
used to inform inflate that a faster approach may be used for the single
|
inform inflate that a faster approach can be used for the single inflate()
|
||||||
inflate() call.
|
call. Z_FINISH also informs inflate to not maintain a sliding window if the
|
||||||
|
stream completes, which reduces inflate's memory footprint. If the stream
|
||||||
|
does not complete, either because not all of the stream is provided or not
|
||||||
|
enough output space is provided, then a sliding window will be allocated and
|
||||||
|
inflate() can be called again to continue the operation as if Z_NO_FLUSH had
|
||||||
|
been used.
|
||||||
|
|
||||||
In this implementation, inflate() always flushes as much output as
|
In this implementation, inflate() always flushes as much output as
|
||||||
possible to the output buffer, and always uses the faster approach on the
|
possible to the output buffer, and always uses the faster approach on the
|
||||||
first call. So the only effect of the flush parameter in this implementation
|
first call. So the effects of the flush parameter in this implementation are
|
||||||
is on the return value of inflate(), as noted below, or when it returns early
|
on the return value of inflate() as noted below, when inflate() returns early
|
||||||
because Z_BLOCK or Z_TREES is used.
|
when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
|
||||||
|
memory for a sliding window when Z_FINISH is used.
|
||||||
|
|
||||||
If a preset dictionary is needed after this call (see inflateSetDictionary
|
If a preset dictionary is needed after this call (see inflateSetDictionary
|
||||||
below), inflate sets strm->adler to the adler32 checksum of the dictionary
|
below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
|
||||||
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
|
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
|
||||||
strm->adler to the adler32 checksum of all output produced so far (that is,
|
strm->adler to the Adler-32 checksum of all output produced so far (that is,
|
||||||
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
|
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
|
||||||
below. At the end of the stream, inflate() checks that its computed adler32
|
below. At the end of the stream, inflate() checks that its computed adler32
|
||||||
checksum is equal to that saved by the compressor and returns Z_STREAM_END
|
checksum is equal to that saved by the compressor and returns Z_STREAM_END
|
||||||
@ -478,7 +485,9 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
|
|||||||
initializing with inflateInit2(). Any information contained in the gzip
|
initializing with inflateInit2(). Any information contained in the gzip
|
||||||
header is not retained, so applications that need that information should
|
header is not retained, so applications that need that information should
|
||||||
instead use raw inflate, see inflateInit2() below, or inflateBack() and
|
instead use raw inflate, see inflateInit2() below, or inflateBack() and
|
||||||
perform their own processing of the gzip header and trailer.
|
perform their own processing of the gzip header and trailer. When processing
|
||||||
|
gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
|
||||||
|
producted so far. The CRC-32 is checked against the gzip trailer.
|
||||||
|
|
||||||
inflate() returns Z_OK if some progress has been made (more input processed
|
inflate() returns Z_OK if some progress has been made (more input processed
|
||||||
or more output produced), Z_STREAM_END if the end of the compressed data has
|
or more output produced), Z_STREAM_END if the end of the compressed data has
|
||||||
@ -580,10 +589,15 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
|
|||||||
uInt dictLength));
|
uInt dictLength));
|
||||||
/*
|
/*
|
||||||
Initializes the compression dictionary from the given byte sequence
|
Initializes the compression dictionary from the given byte sequence
|
||||||
without producing any compressed output. This function must be called
|
without producing any compressed output. When using the zlib format, this
|
||||||
immediately after deflateInit, deflateInit2 or deflateReset, before any call
|
function must be called immediately after deflateInit, deflateInit2 or
|
||||||
of deflate. The compressor and decompressor must use exactly the same
|
deflateReset, and before any call of deflate. When doing raw deflate, this
|
||||||
dictionary (see inflateSetDictionary).
|
function must be called either before any call of deflate, or immediately
|
||||||
|
after the completion of a deflate block, i.e. after all input has been
|
||||||
|
consumed and all output has been delivered when using any of the flush
|
||||||
|
options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The
|
||||||
|
compressor and decompressor must use exactly the same dictionary (see
|
||||||
|
inflateSetDictionary).
|
||||||
|
|
||||||
The dictionary should consist of strings (byte sequences) that are likely
|
The dictionary should consist of strings (byte sequences) that are likely
|
||||||
to be encountered later in the data to be compressed, with the most commonly
|
to be encountered later in the data to be compressed, with the most commonly
|
||||||
@ -610,8 +624,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
|
|||||||
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
|
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
|
||||||
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
|
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
|
||||||
inconsistent (for example if deflate has already been called for this stream
|
inconsistent (for example if deflate has already been called for this stream
|
||||||
or if the compression method is bsort). deflateSetDictionary does not
|
or if not at a block boundary for raw deflate). deflateSetDictionary does
|
||||||
perform any compression: this will be done by deflate().
|
not perform any compression: this will be done by deflate().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
|
ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
|
||||||
@ -688,9 +702,29 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
|
|||||||
deflation of sourceLen bytes. It must be called after deflateInit() or
|
deflation of sourceLen bytes. It must be called after deflateInit() or
|
||||||
deflateInit2(), and after deflateSetHeader(), if used. This would be used
|
deflateInit2(), and after deflateSetHeader(), if used. This would be used
|
||||||
to allocate an output buffer for deflation in a single pass, and so would be
|
to allocate an output buffer for deflation in a single pass, and so would be
|
||||||
called before deflate().
|
called before deflate(). If that first deflate() call is provided the
|
||||||
|
sourceLen input bytes, an output buffer allocated to the size returned by
|
||||||
|
deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
|
||||||
|
to return Z_STREAM_END. Note that it is possible for the compressed size to
|
||||||
|
be larger than the value returned by deflateBound() if flush options other
|
||||||
|
than Z_FINISH or Z_NO_FLUSH are used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
|
||||||
|
unsigned *pending,
|
||||||
|
int *bits));
|
||||||
|
/*
|
||||||
|
deflatePending() returns the number of bytes and bits of output that have
|
||||||
|
been generated, but not yet provided in the available output. The bytes not
|
||||||
|
provided would be due to the available output space having being consumed.
|
||||||
|
The number of bits of output not provided are between 0 and 7, where they
|
||||||
|
await more bits to join them in order to fill out a full byte. If pending
|
||||||
|
or bits are Z_NULL, then those values are not set.
|
||||||
|
|
||||||
|
deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
|
||||||
|
stream state was inconsistent.
|
||||||
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
|
ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
|
||||||
int bits,
|
int bits,
|
||||||
int value));
|
int value));
|
||||||
@ -703,8 +737,9 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
|
|||||||
than or equal to 16, and that many of the least significant bits of value
|
than or equal to 16, and that many of the least significant bits of value
|
||||||
will be inserted in the output.
|
will be inserted in the output.
|
||||||
|
|
||||||
deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
|
deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
|
||||||
stream state was inconsistent.
|
room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
|
||||||
|
source stream state was inconsistent.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
|
ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
|
||||||
@ -790,10 +825,11 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
|
|||||||
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
|
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
|
||||||
can be determined from the adler32 value returned by that call of inflate.
|
can be determined from the adler32 value returned by that call of inflate.
|
||||||
The compressor and decompressor must use exactly the same dictionary (see
|
The compressor and decompressor must use exactly the same dictionary (see
|
||||||
deflateSetDictionary). For raw inflate, this function can be called
|
deflateSetDictionary). For raw inflate, this function can be called at any
|
||||||
immediately after inflateInit2() or inflateReset() and before any call of
|
time to set the dictionary. If the provided dictionary is smaller than the
|
||||||
inflate() to set the dictionary. The application must insure that the
|
window and there is already data in the window, then the provided dictionary
|
||||||
dictionary that was used for compression is provided.
|
will amend what's there. The application must insure that the dictionary
|
||||||
|
that was used for compression is provided.
|
||||||
|
|
||||||
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
|
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
|
||||||
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
|
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
|
||||||
@ -805,17 +841,21 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
|
|||||||
|
|
||||||
ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
|
ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
|
||||||
/*
|
/*
|
||||||
Skips invalid compressed data until a full flush point (see above the
|
Skips invalid compressed data until a possible full flush point (see above
|
||||||
description of deflate with Z_FULL_FLUSH) can be found, or until all
|
for the description of deflate with Z_FULL_FLUSH) can be found, or until all
|
||||||
available input is skipped. No output is provided.
|
available input is skipped. No output is provided.
|
||||||
|
|
||||||
inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
|
inflateSync searches for a 00 00 FF FF pattern in the compressed data.
|
||||||
if no more input was provided, Z_DATA_ERROR if no flush point has been
|
All full flush points have this pattern, but not all occurences of this
|
||||||
found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the
|
pattern are full flush points.
|
||||||
success case, the application may save the current current value of total_in
|
|
||||||
which indicates where valid compressed data was found. In the error case,
|
inflateSync returns Z_OK if a possible full flush point has been found,
|
||||||
the application may repeatedly call inflateSync, providing more input each
|
Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
|
||||||
time, until success or end of the input data.
|
has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
|
||||||
|
In the success case, the application may save the current current value of
|
||||||
|
total_in which indicates where valid compressed data was found. In the
|
||||||
|
error case, the application may repeatedly call inflateSync, providing more
|
||||||
|
input each time, until success or end of the input data.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
|
ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
|
||||||
@ -962,7 +1002,7 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
|
|||||||
See inflateBack() for the usage of these routines.
|
See inflateBack() for the usage of these routines.
|
||||||
|
|
||||||
inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
|
inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
|
||||||
the paramaters are invalid, Z_MEM_ERROR if the internal state could not be
|
the parameters are invalid, Z_MEM_ERROR if the internal state could not be
|
||||||
allocated, or Z_VERSION_ERROR if the version of the library does not match
|
allocated, or Z_VERSION_ERROR if the version of the library does not match
|
||||||
the version of the header file.
|
the version of the header file.
|
||||||
*/
|
*/
|
||||||
@ -1088,6 +1128,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
|
|||||||
27-31: 0 (reserved)
|
27-31: 0 (reserved)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef Z_SOLO
|
||||||
|
|
||||||
/* utility functions */
|
/* utility functions */
|
||||||
|
|
||||||
@ -1149,10 +1190,11 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
|
|||||||
|
|
||||||
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
|
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
|
enough memory, Z_BUF_ERROR if there was not enough room in the output
|
||||||
buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
|
buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In
|
||||||
|
the case where there is not enough room, uncompress() will fill the output
|
||||||
|
buffer with the uncompressed data up to that point.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* gzip file access functions */
|
/* gzip file access functions */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1162,7 +1204,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
|
|||||||
wrapper, documented in RFC 1952, wrapped around a deflate stream.
|
wrapper, documented in RFC 1952, wrapped around a deflate stream.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef voidp gzFile; /* opaque gzip file descriptor */
|
typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
|
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
|
||||||
@ -1172,13 +1214,28 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
|
|||||||
a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
|
a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
|
||||||
compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
|
compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
|
||||||
for fixed code compression as in "wb9F". (See the description of
|
for fixed code compression as in "wb9F". (See the description of
|
||||||
deflateInit2 for more information about the strategy parameter.) Also "a"
|
deflateInit2 for more information about the strategy parameter.) 'T' will
|
||||||
can be used instead of "w" to request that the gzip stream that will be
|
request transparent writing or appending with no compression and not using
|
||||||
written be appended to the file. "+" will result in an error, since reading
|
the gzip format.
|
||||||
and writing to the same gzip file is not supported.
|
|
||||||
|
"a" can be used instead of "w" to request that the gzip stream that will
|
||||||
|
be written be appended to the file. "+" will result in an error, since
|
||||||
|
reading and writing to the same gzip file is not supported. The addition of
|
||||||
|
"x" when writing will create the file exclusively, which fails if the file
|
||||||
|
already exists. On systems that support it, the addition of "e" when
|
||||||
|
reading or writing will set the flag to close the file on an execve() call.
|
||||||
|
|
||||||
|
These functions, as well as gzip, will read and decode a sequence of gzip
|
||||||
|
streams in a file. The append function of gzopen() can be used to create
|
||||||
|
such a file. (Also see gzflush() for another way to do this.) When
|
||||||
|
appending, gzopen does not test whether the file begins with a gzip stream,
|
||||||
|
nor does it look for the end of the gzip streams to begin appending. gzopen
|
||||||
|
will simply append a gzip stream to the existing file.
|
||||||
|
|
||||||
gzopen can be used to read a file which is not in gzip format; in this
|
gzopen can be used to read a file which is not in gzip format; in this
|
||||||
case gzread will directly read from the file without decompression.
|
case gzread will directly read from the file without decompression. When
|
||||||
|
reading, this will be detected automatically by looking for the magic two-
|
||||||
|
byte gzip header.
|
||||||
|
|
||||||
gzopen returns NULL if the file could not be opened, if there was
|
gzopen returns NULL if the file could not be opened, if there was
|
||||||
insufficient memory to allocate the gzFile state, or if an invalid mode was
|
insufficient memory to allocate the gzFile state, or if an invalid mode was
|
||||||
@ -1197,7 +1254,11 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
|
|||||||
descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
|
descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
|
||||||
fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
|
fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
|
||||||
mode);. The duplicated descriptor should be saved to avoid a leak, since
|
mode);. The duplicated descriptor should be saved to avoid a leak, since
|
||||||
gzdopen does not close fd if it fails.
|
gzdopen does not close fd if it fails. If you are using fileno() to get the
|
||||||
|
file descriptor from a FILE *, then you will have to use dup() to avoid
|
||||||
|
double-close()ing the file descriptor. Both gzclose() and fclose() will
|
||||||
|
close the associated file descriptor, so they need to have different file
|
||||||
|
descriptors.
|
||||||
|
|
||||||
gzdopen returns NULL if there was insufficient memory to allocate the
|
gzdopen returns NULL if there was insufficient memory to allocate the
|
||||||
gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
|
gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
|
||||||
@ -1235,14 +1296,26 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
|
|||||||
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
|
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
|
||||||
/*
|
/*
|
||||||
Reads the given number of uncompressed bytes from the compressed file. If
|
Reads the given number of uncompressed bytes from the compressed file. If
|
||||||
the input file was not in gzip format, gzread copies the given number of
|
the input file is not in gzip format, gzread copies the given number of
|
||||||
bytes into the buffer.
|
bytes into the buffer directly from the file.
|
||||||
|
|
||||||
After reaching the end of a gzip stream in the input, gzread will continue
|
After reaching the end of a gzip stream in the input, gzread will continue
|
||||||
to read, looking for another gzip stream, or failing that, reading the rest
|
to read, looking for another gzip stream. Any number of gzip streams may be
|
||||||
of the input file directly without decompression. The entire input file
|
concatenated in the input file, and will all be decompressed by gzread().
|
||||||
will be read if gzread is called until it returns less than the requested
|
If something other than a gzip stream is encountered after a gzip stream,
|
||||||
len.
|
that remaining trailing garbage is ignored (and no error is returned).
|
||||||
|
|
||||||
|
gzread can be used to read a gzip file that is being concurrently written.
|
||||||
|
Upon reaching the end of the input, gzread will return with the available
|
||||||
|
data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
|
||||||
|
gzclearerr can be used to clear the end of file indicator in order to permit
|
||||||
|
gzread to be tried again. Z_OK indicates that a gzip stream was completed
|
||||||
|
on the last gzread. Z_BUF_ERROR indicates that the input file ended in the
|
||||||
|
middle of a gzip stream. Note that gzread does not return -1 in the event
|
||||||
|
of an incomplete gzip stream. This error is deferred until gzclose(), which
|
||||||
|
will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
|
||||||
|
stream. Alternatively, gzerror can be used before gzclose to detect this
|
||||||
|
case.
|
||||||
|
|
||||||
gzread returns the number of uncompressed bytes actually read, less than
|
gzread returns the number of uncompressed bytes actually read, less than
|
||||||
len for end of file, or -1 for error.
|
len for end of file, or -1 for error.
|
||||||
@ -1256,7 +1329,7 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
|
|||||||
error.
|
error.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
|
ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
|
||||||
/*
|
/*
|
||||||
Converts, formats, and writes the arguments to the compressed file under
|
Converts, formats, and writes the arguments to the compressed file under
|
||||||
control of the format string, as in fprintf. gzprintf returns the number of
|
control of the format string, as in fprintf. gzprintf returns the number of
|
||||||
@ -1301,7 +1374,10 @@ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
|
|||||||
ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
|
ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
|
||||||
/*
|
/*
|
||||||
Reads one byte from the compressed file. gzgetc returns this byte or -1
|
Reads one byte from the compressed file. gzgetc returns this byte or -1
|
||||||
in case of end of file or error.
|
in case of end of file or error. This is implemented as a macro for speed.
|
||||||
|
As such, it does not do all of the checking the other functions do. I.e.
|
||||||
|
it does not check to see if file is NULL, nor whether the structure file
|
||||||
|
points to has been clobbered or not.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
|
ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
|
||||||
@ -1397,9 +1473,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file));
|
|||||||
ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
|
ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
|
||||||
/*
|
/*
|
||||||
Returns true (1) if file is being copied directly while reading, or false
|
Returns true (1) if file is being copied directly while reading, or false
|
||||||
(0) if file is a gzip stream being decompressed. This state can change from
|
(0) if file is a gzip stream being decompressed.
|
||||||
false to true while reading the input file if the end of a gzip stream is
|
|
||||||
reached, but is followed by data that is not another gzip stream.
|
|
||||||
|
|
||||||
If the input file is empty, gzdirect() will return true, since the input
|
If the input file is empty, gzdirect() will return true, since the input
|
||||||
does not contain a gzip stream.
|
does not contain a gzip stream.
|
||||||
@ -1408,6 +1482,13 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
|
|||||||
cause buffers to be allocated to allow reading the file to determine if it
|
cause buffers to be allocated to allow reading the file to determine if it
|
||||||
is a gzip file. Therefore if gzbuffer() is used, it should be called before
|
is a gzip file. Therefore if gzbuffer() is used, it should be called before
|
||||||
gzdirect().
|
gzdirect().
|
||||||
|
|
||||||
|
When writing, gzdirect() returns true (1) if transparent writing was
|
||||||
|
requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note:
|
||||||
|
gzdirect() is not needed when writing. Transparent writing must be
|
||||||
|
explicitly requested, so the application already knows the answer. When
|
||||||
|
linking statically, using gzdirect() will include all of the zlib code for
|
||||||
|
gzip file reading and decompression, which may not be desired.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT gzclose OF((gzFile file));
|
ZEXTERN int ZEXPORT gzclose OF((gzFile file));
|
||||||
@ -1419,7 +1500,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file));
|
|||||||
must not be called more than once on the same allocation.
|
must not be called more than once on the same allocation.
|
||||||
|
|
||||||
gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
|
gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
|
||||||
file operation error, or Z_OK on success.
|
file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
|
||||||
|
last read ended in the middle of a gzip stream, or Z_OK on success.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
|
ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
|
||||||
@ -1457,6 +1539,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
|
|||||||
file that is being written concurrently.
|
file that is being written concurrently.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#endif /* !Z_SOLO */
|
||||||
|
|
||||||
/* checksum functions */
|
/* checksum functions */
|
||||||
|
|
||||||
@ -1492,16 +1575,17 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
|
|||||||
Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
|
Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
|
||||||
and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
|
and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
|
||||||
each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
|
each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
|
||||||
seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
|
seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
|
||||||
|
that the z_off_t type (like off_t) is a signed integer. If len2 is
|
||||||
|
negative, the result has no meaning or utility.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
|
ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
|
||||||
/*
|
/*
|
||||||
Update a running CRC-32 with the bytes buf[0..len-1] and return the
|
Update a running CRC-32 with the bytes buf[0..len-1] and return the
|
||||||
updated CRC-32. If buf is Z_NULL, this function returns the required
|
updated CRC-32. If buf is Z_NULL, this function returns the required
|
||||||
initial value for the for the crc. Pre- and post-conditioning (one's
|
initial value for the crc. Pre- and post-conditioning (one's complement) is
|
||||||
complement) is performed within this function so it shouldn't be done by the
|
performed within this function so it shouldn't be done by the application.
|
||||||
application.
|
|
||||||
|
|
||||||
Usage example:
|
Usage example:
|
||||||
|
|
||||||
@ -1544,17 +1628,42 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
|
|||||||
const char *version,
|
const char *version,
|
||||||
int stream_size));
|
int stream_size));
|
||||||
#define deflateInit(strm, level) \
|
#define deflateInit(strm, level) \
|
||||||
deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
|
deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
|
||||||
#define inflateInit(strm) \
|
#define inflateInit(strm) \
|
||||||
inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
|
inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
|
||||||
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
|
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
|
||||||
deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
|
deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
|
||||||
(strategy), ZLIB_VERSION, sizeof(z_stream))
|
(strategy), ZLIB_VERSION, (int)sizeof(z_stream))
|
||||||
#define inflateInit2(strm, windowBits) \
|
#define inflateInit2(strm, windowBits) \
|
||||||
inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
|
inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
|
||||||
|
(int)sizeof(z_stream))
|
||||||
#define inflateBackInit(strm, windowBits, window) \
|
#define inflateBackInit(strm, windowBits, window) \
|
||||||
inflateBackInit_((strm), (windowBits), (window), \
|
inflateBackInit_((strm), (windowBits), (window), \
|
||||||
ZLIB_VERSION, sizeof(z_stream))
|
ZLIB_VERSION, (int)sizeof(z_stream))
|
||||||
|
|
||||||
|
#ifndef Z_SOLO
|
||||||
|
|
||||||
|
/* gzgetc() macro and its supporting function and exposed data structure. Note
|
||||||
|
* that the real internal state is much larger than the exposed structure.
|
||||||
|
* This abbreviated structure exposes just enough for the gzgetc() macro. The
|
||||||
|
* user should not mess with these exposed elements, since their names or
|
||||||
|
* behavior could change in the future, perhaps even capriciously. They can
|
||||||
|
* only be used by the gzgetc() macro. You have been warned.
|
||||||
|
*/
|
||||||
|
struct gzFile_s {
|
||||||
|
unsigned have;
|
||||||
|
unsigned char *next;
|
||||||
|
z_off64_t pos;
|
||||||
|
};
|
||||||
|
ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
|
||||||
|
#ifdef Z_PREFIX_SET
|
||||||
|
# undef z_gzgetc
|
||||||
|
# define z_gzgetc(g) \
|
||||||
|
((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
|
||||||
|
#else
|
||||||
|
# define gzgetc(g) \
|
||||||
|
((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
|
||||||
|
#endif
|
||||||
|
|
||||||
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
|
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
|
||||||
* change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
|
* change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
|
||||||
@ -1562,7 +1671,7 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
|
|||||||
* functions are changed to 64 bits) -- in case these are set on systems
|
* functions are changed to 64 bits) -- in case these are set on systems
|
||||||
* without large file support, _LFS64_LARGEFILE must also be true
|
* without large file support, _LFS64_LARGEFILE must also be true
|
||||||
*/
|
*/
|
||||||
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
#ifdef Z_LARGE64
|
||||||
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
|
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 gzseek64 OF((gzFile, z_off64_t, int));
|
||||||
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
|
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
|
||||||
@ -1571,14 +1680,23 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
|
|||||||
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
|
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0
|
#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
|
||||||
# define gzopen gzopen64
|
# ifdef Z_PREFIX_SET
|
||||||
# define gzseek gzseek64
|
# define z_gzopen z_gzopen64
|
||||||
# define gztell gztell64
|
# define z_gzseek z_gzseek64
|
||||||
# define gzoffset gzoffset64
|
# define z_gztell z_gztell64
|
||||||
# define adler32_combine adler32_combine64
|
# define z_gzoffset z_gzoffset64
|
||||||
# define crc32_combine crc32_combine64
|
# define z_adler32_combine z_adler32_combine64
|
||||||
# ifdef _LARGEFILE64_SOURCE
|
# define z_crc32_combine z_crc32_combine64
|
||||||
|
# else
|
||||||
|
# define gzopen gzopen64
|
||||||
|
# define gzseek gzseek64
|
||||||
|
# define gztell gztell64
|
||||||
|
# define gzoffset gzoffset64
|
||||||
|
# define adler32_combine adler32_combine64
|
||||||
|
# define crc32_combine crc32_combine64
|
||||||
|
# endif
|
||||||
|
# ifndef Z_LARGE64
|
||||||
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
|
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
|
||||||
ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
|
ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
|
||||||
ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
|
ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
|
||||||
@ -1595,6 +1713,13 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
|
|||||||
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
|
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#else /* Z_SOLO */
|
||||||
|
|
||||||
|
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
|
||||||
|
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
|
||||||
|
|
||||||
|
#endif /* !Z_SOLO */
|
||||||
|
|
||||||
/* hack for buggy compilers */
|
/* hack for buggy compilers */
|
||||||
#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
|
#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
|
||||||
struct internal_state {int dummy;};
|
struct internal_state {int dummy;};
|
||||||
@ -1603,8 +1728,14 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
|
|||||||
/* undocumented functions */
|
/* undocumented functions */
|
||||||
ZEXTERN const char * ZEXPORT zError OF((int));
|
ZEXTERN const char * ZEXPORT zError OF((int));
|
||||||
ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
|
ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
|
||||||
ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
|
ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
|
||||||
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
|
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
|
||||||
|
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
|
||||||
|
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
|
||||||
|
#if defined(_WIN32) && !defined(Z_SOLO)
|
||||||
|
ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
|
||||||
|
const char *mode));
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
@ -1,11 +1,14 @@
|
|||||||
/* zutil.c -- target dependent utility functions for the compression library
|
/* zutil.c -- target dependent utility functions for the compression library
|
||||||
* Copyright (C) 1995-2005, 2010 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 "zutil.h"
|
#include "zutil.h"
|
||||||
|
#ifndef Z_SOLO
|
||||||
|
# include "gzguts.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NO_DUMMY_DECL
|
#ifndef NO_DUMMY_DECL
|
||||||
struct internal_state {int dummy;}; /* for buggy compilers */
|
struct internal_state {int dummy;}; /* for buggy compilers */
|
||||||
@ -85,27 +88,27 @@ uLong ZEXPORT zlibCompileFlags()
|
|||||||
#ifdef FASTEST
|
#ifdef FASTEST
|
||||||
flags += 1L << 21;
|
flags += 1L << 21;
|
||||||
#endif
|
#endif
|
||||||
#ifdef STDC
|
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
|
||||||
# ifdef NO_vsnprintf
|
# ifdef NO_vsnprintf
|
||||||
flags += 1L << 25;
|
flags += 1L << 25;
|
||||||
# ifdef HAS_vsprintf_void
|
# ifdef HAS_vsprintf_void
|
||||||
flags += 1L << 26;
|
flags += 1L << 26;
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
# ifdef HAS_vsnprintf_void
|
# ifdef HAS_vsnprintf_void
|
||||||
flags += 1L << 26;
|
flags += 1L << 26;
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
flags += 1L << 24;
|
flags += 1L << 24;
|
||||||
# ifdef NO_snprintf
|
# ifdef NO_snprintf
|
||||||
flags += 1L << 25;
|
flags += 1L << 25;
|
||||||
# ifdef HAS_sprintf_void
|
# ifdef HAS_sprintf_void
|
||||||
flags += 1L << 26;
|
flags += 1L << 26;
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
# ifdef HAS_snprintf_void
|
# ifdef HAS_snprintf_void
|
||||||
flags += 1L << 26;
|
flags += 1L << 26;
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -181,6 +184,7 @@ void ZLIB_INTERNAL zmemzero(dest, len)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef Z_SOLO
|
||||||
|
|
||||||
#ifdef SYS16BIT
|
#ifdef SYS16BIT
|
||||||
|
|
||||||
@ -316,3 +320,5 @@ void ZLIB_INTERNAL zcfree (opaque, ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif /* MY_ZCALLOC */
|
#endif /* MY_ZCALLOC */
|
||||||
|
|
||||||
|
#endif /* !Z_SOLO */
|
@ -1,5 +1,5 @@
|
|||||||
/* zutil.h -- internal interface and configuration of the compression library
|
/* zutil.h -- internal interface and configuration of the compression library
|
||||||
* Copyright (C) 1995-2010 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -13,7 +13,7 @@
|
|||||||
#ifndef ZUTIL_H
|
#ifndef ZUTIL_H
|
||||||
#define ZUTIL_H
|
#define ZUTIL_H
|
||||||
|
|
||||||
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
|
#ifdef HAVE_HIDDEN
|
||||||
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
||||||
#else
|
#else
|
||||||
# define ZLIB_INTERNAL
|
# define ZLIB_INTERNAL
|
||||||
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
|
|
||||||
#ifdef STDC
|
#if defined(STDC) && !defined(Z_SOLO)
|
||||||
# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
|
# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
# endif
|
# endif
|
||||||
@ -29,6 +29,10 @@
|
|||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef Z_SOLO
|
||||||
|
typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef local
|
#ifndef local
|
||||||
# define local static
|
# define local static
|
||||||
#endif
|
#endif
|
||||||
@ -78,16 +82,18 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||||||
|
|
||||||
#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
|
#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
|
||||||
# define OS_CODE 0x00
|
# define OS_CODE 0x00
|
||||||
# if defined(__TURBOC__) || defined(__BORLANDC__)
|
# ifndef Z_SOLO
|
||||||
# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
|
# if defined(__TURBOC__) || defined(__BORLANDC__)
|
||||||
/* Allow compilation with ANSI keywords only enabled */
|
# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
|
||||||
void _Cdecl farfree( void *block );
|
/* Allow compilation with ANSI keywords only enabled */
|
||||||
void *_Cdecl farmalloc( unsigned long nbytes );
|
void _Cdecl farfree( void *block );
|
||||||
# else
|
void *_Cdecl farmalloc( unsigned long nbytes );
|
||||||
# include <alloc.h>
|
# else
|
||||||
|
# include <alloc.h>
|
||||||
|
# endif
|
||||||
|
# else /* MSC or DJGPP */
|
||||||
|
# include <malloc.h>
|
||||||
# endif
|
# endif
|
||||||
# else /* MSC or DJGPP */
|
|
||||||
# include <malloc.h>
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -107,18 +113,20 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||||||
|
|
||||||
#ifdef OS2
|
#ifdef OS2
|
||||||
# define OS_CODE 0x06
|
# define OS_CODE 0x06
|
||||||
# ifdef M_I86
|
# if defined(M_I86) && !defined(Z_SOLO)
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MACOS) || defined(TARGET_OS_MAC)
|
#if defined(MACOS) || defined(TARGET_OS_MAC)
|
||||||
# define OS_CODE 0x07
|
# define OS_CODE 0x07
|
||||||
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
|
# ifndef Z_SOLO
|
||||||
# include <unix.h> /* for fdopen */
|
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
|
||||||
# else
|
# include <unix.h> /* for fdopen */
|
||||||
# ifndef fdopen
|
# else
|
||||||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
# ifndef fdopen
|
||||||
|
# define fdopen(fd,mode) NULL /* No fdopen() */
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -153,14 +161,14 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__BORLANDC__)
|
#if defined(__BORLANDC__) && !defined(MSDOS)
|
||||||
#pragma warn -8004
|
#pragma warn -8004
|
||||||
#pragma warn -8008
|
#pragma warn -8008
|
||||||
#pragma warn -8066
|
#pragma warn -8066
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* provide prototypes for these when building zlib without LFS */
|
/* provide prototypes for these when building zlib without LFS */
|
||||||
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
|
#if !defined(_WIN32) && (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
|
||||||
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
|
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
|
||||||
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
|
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
|
||||||
#endif
|
#endif
|
||||||
@ -177,42 +185,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||||||
|
|
||||||
/* functions */
|
/* functions */
|
||||||
|
|
||||||
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
|
#if defined(pyr) || defined(Z_SOLO)
|
||||||
# ifndef HAVE_VSNPRINTF
|
|
||||||
# define HAVE_VSNPRINTF
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#if defined(__CYGWIN__)
|
|
||||||
# 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
|
|
||||||
#endif
|
|
||||||
#ifdef VMS
|
|
||||||
# define NO_vsnprintf
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(pyr)
|
|
||||||
# define NO_MEMCPY
|
# define NO_MEMCPY
|
||||||
#endif
|
#endif
|
||||||
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
|
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
|
||||||
@ -261,14 +234,19 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||||||
# define Tracecv(c,x)
|
# define Tracecv(c,x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef Z_SOLO
|
||||||
voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
|
voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
|
||||||
unsigned size));
|
unsigned size));
|
||||||
void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
|
void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ZALLOC(strm, items, size) \
|
#define ZALLOC(strm, items, size) \
|
||||||
(*((strm)->zalloc))((strm)->opaque, (items), (size))
|
(*((strm)->zalloc))((strm)->opaque, (items), (size))
|
||||||
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
|
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
|
||||||
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
|
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
|
||||||
|
|
||||||
|
/* Reverse the bytes in a 32-bit value */
|
||||||
|
#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
|
||||||
|
(((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
|
||||||
|
|
||||||
#endif /* ZUTIL_H */
|
#endif /* ZUTIL_H */
|
Loading…
Reference in New Issue
Block a user