mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
				synced 2025-11-02 19:48:00 +00:00 
			
		
		
		
	added Crypto and Zip
This commit is contained in:
		
							
								
								
									
										20
									
								
								Zip/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Zip/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/Makefile#2 $
 | 
			
		||||
#
 | 
			
		||||
# Makefile for Poco Zip
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/global
 | 
			
		||||
 | 
			
		||||
objects = AutoDetectStream Compress Decompress ParseCallback PartialStream \
 | 
			
		||||
	SkipCallback ZipArchive ZipArchiveInfo ZipDataInfo \
 | 
			
		||||
	ZipFileInfo ZipLocalFileHeader ZipStream ZipUtil ZipCommon ZipException \
 | 
			
		||||
	Add Delete Keep Rename Replace ZipManipulator ZipOperation
 | 
			
		||||
 | 
			
		||||
target         = PocoZip
 | 
			
		||||
target_version = $(LIBVERSION)
 | 
			
		||||
target_libs    = PocoFoundation
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/lib
 | 
			
		||||
							
								
								
									
										16
									
								
								Zip/Zip.vmsbuild
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Zip/Zip.vmsbuild
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
#
 | 
			
		||||
# Zip.vmsbuild
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/Zip.vmsbuild#1 $
 | 
			
		||||
#
 | 
			
		||||
LIB=PocoZip
 | 
			
		||||
Decompress
 | 
			
		||||
ParseCallback
 | 
			
		||||
PartialStream
 | 
			
		||||
SkipCallback
 | 
			
		||||
ZipArchive
 | 
			
		||||
ZipArchiveInfo
 | 
			
		||||
ZipFileInfo
 | 
			
		||||
ZipLocalFileHeader
 | 
			
		||||
ZipStream
 | 
			
		||||
ZipUtil
 | 
			
		||||
							
								
								
									
										30
									
								
								Zip/Zip_VS71.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Zip/Zip_VS71.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 8.00
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Zip", "Zip_VS71.vcproj", "{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_VS71.vcproj", "{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61} = {4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfiguration) = preSolution
 | 
			
		||||
		debug_shared = debug_shared
 | 
			
		||||
		release_shared = release_shared
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfiguration) = postSolution
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.debug_shared.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.debug_shared.Build.0 = debug_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.release_shared.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.release_shared.Build.0 = release_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.debug_shared.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.debug_shared.Build.0 = debug_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.release_shared.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.release_shared.Build.0 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityGlobals) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityAddIns) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										307
									
								
								Zip/Zip_VS71.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								Zip/Zip_VS71.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,307 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="Zip"
 | 
			
		||||
	ProjectGUID="{4ac75ead-bfcf-41e6-ab1f-0da203cc7c61}"
 | 
			
		||||
	RootNamespace="Zip"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\Foundation\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;POCO_DLL;Zip_EXPORTS"
 | 
			
		||||
				StringPooling="TRUE"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="TRUE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
				CompileAs="0"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib"
 | 
			
		||||
				OutputFile="..\bin\PocoZipd.dll"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				SuppressStartupBanner="TRUE"
 | 
			
		||||
				AdditionalLibraryDirectories="..\lib"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="..\bin\PocoZipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeForWindows98="1"
 | 
			
		||||
				ImportLibrary="..\lib\PocoZipd.lib"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="TRUE"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="TRUE"
 | 
			
		||||
				OptimizeForProcessor="3"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\Foundation\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;POCO_DLL;Zip_EXPORTS"
 | 
			
		||||
				GeneratePreprocessedFile="0"
 | 
			
		||||
				KeepComments="FALSE"
 | 
			
		||||
				StringPooling="TRUE"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="FALSE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="0"
 | 
			
		||||
				CompileAs="0"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib"
 | 
			
		||||
				OutputFile="..\bin\PocoZip.dll"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				SuppressStartupBanner="TRUE"
 | 
			
		||||
				AdditionalLibraryDirectories="..\lib"
 | 
			
		||||
				GenerateDebugInformation="FALSE"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				OptimizeForWindows98="1"
 | 
			
		||||
				ImportLibrary="..\lib\PocoZip.lib"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Zip"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\AutoDetectStream.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Compress.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Decompress.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ParseCallback.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\PartialStream.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\SkipCallback.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Zip.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipArchive.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipArchiveInfo.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipCommon.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipDataInfo.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipException.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipFileInfo.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipLocalFileHeader.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipStream.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipUtil.h">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\AutoDetectStream.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Compress.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Decompress.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ParseCallback.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStream.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\SkipCallback.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipArchive.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipArchiveInfo.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipCommon.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipDataInfo.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipException.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipFileInfo.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipLocalFileHeader.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipStream.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipUtil.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Manipulation"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Add.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Delete.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Keep.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Rename.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Replace.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipManipulator.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipOperation.h">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Add.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Delete.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Keep.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Rename.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Replace.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipManipulator.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipOperation.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										28
									
								
								Zip/Zip_VS80.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Zip/Zip_VS80.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 9.00
 | 
			
		||||
# Visual Studio 2005
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Zip", "Zip_VS80.vcproj", "{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_VS80.vcproj", "{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61} = {4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		debug_shared|Win32 = debug_shared|Win32
 | 
			
		||||
		release_shared|Win32 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										413
									
								
								Zip/Zip_VS80.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										413
									
								
								Zip/Zip_VS80.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,413 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="8,00"
 | 
			
		||||
	Name="Zip"
 | 
			
		||||
	ProjectGUID="{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}"
 | 
			
		||||
	RootNamespace="Zip"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\Foundation\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;POCO_DLL;Zip_EXPORTS"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
				CompileAs="0"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib"
 | 
			
		||||
				OutputFile="..\bin\PocoZipd.dll"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				SuppressStartupBanner="true"
 | 
			
		||||
				AdditionalLibraryDirectories="..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="..\bin\PocoZipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeForWindows98="1"
 | 
			
		||||
				ImportLibrary="..\lib\PocoZipd.lib"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\Foundation\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;POCO_DLL;Zip_EXPORTS"
 | 
			
		||||
				GeneratePreprocessedFile="0"
 | 
			
		||||
				KeepComments="false"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="0"
 | 
			
		||||
				CompileAs="0"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib"
 | 
			
		||||
				OutputFile="..\bin\PocoZip.dll"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				SuppressStartupBanner="true"
 | 
			
		||||
				AdditionalLibraryDirectories="..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				OptimizeForWindows98="1"
 | 
			
		||||
				ImportLibrary="..\lib\PocoZip.lib"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Zip"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\AutoDetectStream.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Compress.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Decompress.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ParseCallback.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\PartialStream.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\SkipCallback.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Zip.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipArchive.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipArchiveInfo.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipCommon.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipDataInfo.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipException.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipFileInfo.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipLocalFileHeader.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipStream.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipUtil.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\AutoDetectStream.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Compress.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Decompress.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ParseCallback.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStream.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\SkipCallback.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipArchive.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipArchiveInfo.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipCommon.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipDataInfo.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipException.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipFileInfo.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipLocalFileHeader.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipStream.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipUtil.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Manipulation"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Add.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Delete.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Keep.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Rename.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Replace.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipManipulator.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipOperation.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Add.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Delete.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Keep.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Rename.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Replace.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipManipulator.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipOperation.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										28
									
								
								Zip/Zip_vs90.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Zip/Zip_vs90.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 10.00
 | 
			
		||||
# Visual Studio 2008
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Zip", "Zip_vs90.vcproj", "{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_vs90.vcproj", "{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61} = {4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		debug_shared|Win32 = debug_shared|Win32
 | 
			
		||||
		release_shared|Win32 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										413
									
								
								Zip/Zip_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										413
									
								
								Zip/Zip_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,413 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="9.00"
 | 
			
		||||
	Name="Zip"
 | 
			
		||||
	ProjectGUID="{4AC75EAD-BFCF-41E6-AB1F-0DA203CC7C61}"
 | 
			
		||||
	RootNamespace="Zip"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\Foundation\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;POCO_DLL;Zip_EXPORTS"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
				CompileAs="0"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib"
 | 
			
		||||
				OutputFile="..\bin\PocoZipd.dll"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				SuppressStartupBanner="true"
 | 
			
		||||
				AdditionalLibraryDirectories="..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="..\bin\PocoZipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeForWindows98="0"
 | 
			
		||||
				ImportLibrary="..\lib\PocoZipd.lib"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\Foundation\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;POCO_DLL;Zip_EXPORTS"
 | 
			
		||||
				GeneratePreprocessedFile="0"
 | 
			
		||||
				KeepComments="false"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="0"
 | 
			
		||||
				CompileAs="0"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib"
 | 
			
		||||
				OutputFile="..\bin\PocoZip.dll"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				SuppressStartupBanner="true"
 | 
			
		||||
				AdditionalLibraryDirectories="..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				OptimizeForWindows98="0"
 | 
			
		||||
				ImportLibrary="..\lib\PocoZip.lib"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Zip"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\AutoDetectStream.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Compress.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Decompress.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ParseCallback.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\PartialStream.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\SkipCallback.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Zip.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipArchive.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipArchiveInfo.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipCommon.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipDataInfo.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipException.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipFileInfo.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipLocalFileHeader.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipStream.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipUtil.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\AutoDetectStream.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Compress.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Decompress.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ParseCallback.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStream.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\SkipCallback.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipArchive.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipArchiveInfo.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipCommon.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipDataInfo.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipException.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipFileInfo.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipLocalFileHeader.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipStream.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipUtil.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Manipulation"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Add.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Delete.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Keep.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Rename.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\Replace.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipManipulator.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\include\Poco\Zip\ZipOperation.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Add.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Delete.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Keep.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Rename.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\Replace.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipManipulator.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipOperation.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										4
									
								
								Zip/dependencies
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Zip/dependencies
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
Foundation
 | 
			
		||||
Net
 | 
			
		||||
Util
 | 
			
		||||
XML
 | 
			
		||||
							
								
								
									
										1636
									
								
								Zip/doc/ZIP Spec.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1636
									
								
								Zip/doc/ZIP Spec.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										161
									
								
								Zip/doc/ZipUserGuide.page
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								Zip/doc/ZipUserGuide.page
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,161 @@
 | 
			
		||||
POCO Zip User Guide
 | 
			
		||||
Zip
 | 
			
		||||
 | 
			
		||||
!!!Introduction
 | 
			
		||||
POCO Zip adds support for parsing and creating Zip files. It offers the following features:
 | 
			
		||||
  * decompress from local files
 | 
			
		||||
  * decompress from network files while they are downloaded
 | 
			
		||||
  * compress to local files
 | 
			
		||||
  * compress directly to a network destination
 | 
			
		||||
 | 
			
		||||
!!Restrictions
 | 
			
		||||
  * POCO Zip does not support the DEFLATE64 algorithm.
 | 
			
		||||
  * encrypted files are not supported
 | 
			
		||||
  
 | 
			
		||||
!!!Main Classes
 | 
			
		||||
Most users will work with two common classes: <*Compress*> and <*Decompress*>
 | 
			
		||||
 | 
			
		||||
!!Compress
 | 
			
		||||
Compress is a helper class that simplifies creation of Zip files.
 | 
			
		||||
Creating a Zip file is a basically a three-step process:
 | 
			
		||||
  * Create the Compress object: Specify the output stream and define if it is seekable (set to true for local files, to false for network files)
 | 
			
		||||
 | 
			
		||||
     Compress(std::ostream& out, bool seekableOut);
 | 
			
		||||
----
 | 
			
		||||
  * Add entries: either add single files or directory entries
 | 
			
		||||
  
 | 
			
		||||
    void addFile(std::istream& input, 
 | 
			
		||||
                 const Poco::DateTime& lastModifiedAt, 
 | 
			
		||||
                 const Poco::Path& fileName, 
 | 
			
		||||
                 ZipCommon::CompressionMethod cm = ZipCommon::CM_DEFLATE, 
 | 
			
		||||
                 ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM);
 | 
			
		||||
        /// Adds a single file to the Zip File. fileName must not be a directory name.
 | 
			
		||||
 | 
			
		||||
    void addFile(const Poco::Path& file, 
 | 
			
		||||
                 const Poco::Path& fileName, 
 | 
			
		||||
                 ZipCommon::CompressionMethod cm = ZipCommon::CM_DEFLATE, 
 | 
			
		||||
                 ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM);
 | 
			
		||||
        /// Adds a single file to the Zip File. fileName must not be a directory name. The file must exist physically!
 | 
			
		||||
 | 
			
		||||
    void addDirectory(const Poco::Path& entryName, const Poco::DateTime& lastModifiedAt);
 | 
			
		||||
        /// Adds a directory entry excluding all children to the Zip file, entryName must not be empty.
 | 
			
		||||
 | 
			
		||||
    void addRecursive(const Poco::Path& entry, 
 | 
			
		||||
                      ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM, 
 | 
			
		||||
                      bool excludeRoot = true, 
 | 
			
		||||
                      const Poco::Path& name = Poco::Path());
 | 
			
		||||
        /// Adds a directory entry recursively to the zip file, set excludeRoot to false to exclude the parent directory.
 | 
			
		||||
        /// The name specifies under which path the entries are added in the Zip file.
 | 
			
		||||
----
 | 
			
		||||
Note that one must always define a name when adding a file entry, otherwise the compresser can not decide if the file should be added with an absolute or a relative path. 
 | 
			
		||||
Assume you are adding the file <*c:\\data\\hello.txt*> twice to a Zip:
 | 
			
		||||
 | 
			
		||||
    // MUST use binary!
 | 
			
		||||
    std::ofstream out("test.zip", std::ios::binary);
 | 
			
		||||
    Compress c(out, true);
 | 
			
		||||
    Poco::Path aFile("c:\\data\\hello.txt");
 | 
			
		||||
    c.addFile(theFile, "hello.txt");
 | 
			
		||||
    c.addFile(theFile, theFile);
 | 
			
		||||
    c.close(); // MUST be done to finalize the Zip file
 | 
			
		||||
----
 | 
			
		||||
A Zip file stores entries internally in UNIX path style. The Zip file created above will contain the following entries:
 | 
			
		||||
 | 
			
		||||
    hello.txt
 | 
			
		||||
    data/
 | 
			
		||||
    data/hello.txt
 | 
			
		||||
----
 | 
			
		||||
The directory entry <*data/*> was automatically added.
 | 
			
		||||
 | 
			
		||||
When adding directories recursively, the same principle applies. You specify the root directory that should be added and an optional path name where entries are added in the Zip file.
 | 
			
		||||
Assume you have the following directory structure:
 | 
			
		||||
 | 
			
		||||
     data/
 | 
			
		||||
        run1/
 | 
			
		||||
            result1.txt
 | 
			
		||||
        run2/
 | 
			
		||||
            result2.txt
 | 
			
		||||
----
 | 
			
		||||
The following call will add all subdirectories and all files of data to the Zip but not the root entry <*data*>:
 | 
			
		||||
 | 
			
		||||
    Poco::Path data("data");
 | 
			
		||||
    data.makeDirectory();
 | 
			
		||||
    c.addRecursive(data);
 | 
			
		||||
----
 | 
			
		||||
Or if you want the files to be added under the directory name <*20070401*> (you basically <*rename*> data to 20070401):
 | 
			
		||||
 | 
			
		||||
    Poco::Path data("data");
 | 
			
		||||
    Poco::Path name("20070401);
 | 
			
		||||
    data.makeDirectory();
 | 
			
		||||
    name.makeDirectory();
 | 
			
		||||
    c.addRecursive(data, ZipCommon::CL_NORMAL, false, name);
 | 
			
		||||
----
 | 
			
		||||
Note that <*makeDirectory*> does not create a directory, it simply assures that the Path is treated as a directory not as a file.
 | 
			
		||||
Also using NORMAL compression instead of MAXIMUM (which is the default) has the benefit of improved performance.
 | 
			
		||||
To get notified about the entries that are added during <*addRecursive*> register to the <!EDone!> event of the Compress object:
 | 
			
		||||
 | 
			
		||||
    Poco::FIFOEvent<const ZipLocalFileHeader> EDone;
 | 
			
		||||
----
 | 
			
		||||
  * Closing the Zip file: It is mandatory to manually close Compress objects. This guarantees that the Zip directory is written, thus creating a valid Zip file. It is safe to call <*close*> multiple times, only the first call takes effect.
 | 
			
		||||
  
 | 
			
		||||
    ZipArchive close();
 | 
			
		||||
----
 | 
			
		||||
<*close*> returns a ZipArchive which describes all entries inside a Zip file.
 | 
			
		||||
 | 
			
		||||
!!Decompress
 | 
			
		||||
Decompress can be used to decompress all files from a Zip file or to decompress single files only.
 | 
			
		||||
 | 
			
		||||
!Decompress All
 | 
			
		||||
The following sample code shows how all entries can be extracted from a Zip file:
 | 
			
		||||
 | 
			
		||||
    std::ifstream inp("test.zip", std::ios::binary);
 | 
			
		||||
    poco_assert (inp);
 | 
			
		||||
    // decompress to current working dir
 | 
			
		||||
    Decompress dec(inp, Poco::Path()); 
 | 
			
		||||
    // if an error happens invoke the ZipTest::onDecompressError method
 | 
			
		||||
    dec.EError += Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
    dec.decompressAllFiles();
 | 
			
		||||
    dec.EError -= Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
----
 | 
			
		||||
The onDecompressError method:
 | 
			
		||||
 | 
			
		||||
    void ZipTest::onDecompressError(const void* pSender, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string>& info)
 | 
			
		||||
    {
 | 
			
		||||
        // inform user about error
 | 
			
		||||
        [...]
 | 
			
		||||
    }
 | 
			
		||||
----
 | 
			
		||||
Decompressing directly from the net works similar:
 | 
			
		||||
 | 
			
		||||
    Poco::URI uri("http://www.appinf.com/test.zip");
 | 
			
		||||
    HTTPClientSession session(uri.getHost(), uri.getPort());
 | 
			
		||||
    HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
 | 
			
		||||
    session.sendRequest(req);
 | 
			
		||||
    HTTPResponse res;
 | 
			
		||||
    std::istream& rs = session.receiveResponse(res);
 | 
			
		||||
    Decompress dec(rs, Poco::Path());
 | 
			
		||||
    // if an error happens invoke the ZipTest::onDecompressError method
 | 
			
		||||
    dec.EError += Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
    dec.decompressAllFiles();
 | 
			
		||||
    dec.EError -= Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
----
 | 
			
		||||
Furthermore, Decompress supports additional parameters:
 | 
			
		||||
 | 
			
		||||
    Decompress(std::istream& in, const Poco::Path& outputDir, bool flattenDirs = false, bool keepIncompleteFiles = false);
 | 
			
		||||
----
 | 
			
		||||
If <*flattenDirs*> is set to true no subdirs are extracted, if <*keepIncompleteFiles*> is set to true, corrupt files (i.e. wrong CRC, wrong size on disk) will not be deleted.
 | 
			
		||||
 | 
			
		||||
!Decompress Single Files
 | 
			
		||||
To decompress single files you must first parse a Zip file, and then decompress the file which happens transparently inside the <*ZipInputStream*>:
 | 
			
		||||
 | 
			
		||||
    std::ifstream inp("test.zip", std::ios::binary);
 | 
			
		||||
    poco_assert (inp);
 | 
			
		||||
    ZipArchive arch(inp);
 | 
			
		||||
    ZipArchive::FileHeaders::const_iterator it = arch.findHeader("data/hello.txt");
 | 
			
		||||
    poco_assert (it != arch.headerEnd());
 | 
			
		||||
    ZipInputStream zipin (inp, it->second);
 | 
			
		||||
    std::ostringstream out(std::ios::binary);
 | 
			
		||||
    Poco::StreamCopier::copyStream(zipin, out);
 | 
			
		||||
----
 | 
			
		||||
Note that this will only work with local files which allow us to seek inside the file.
 | 
			
		||||
Directly extracting single entries from a network file is currently not possible via the Decompress class.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										73
									
								
								Zip/include/Poco/Zip/Add.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								Zip/include/Poco/Zip/Add.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
//
 | 
			
		||||
// Add.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Add.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Add
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Add class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Add_INCLUDED
 | 
			
		||||
#define Zip_Add_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Add: public ZipOperation
 | 
			
		||||
	/// Operation Add adds a new file entry to an existing Zip File
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Add(const std::string& zipPath, const std::string& localPath, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl);
 | 
			
		||||
		/// Creates the Add.
 | 
			
		||||
 | 
			
		||||
	void execute(Compress& c, std::istream& input);
 | 
			
		||||
		/// Performs the add operation
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	const std::string _zipPath;
 | 
			
		||||
	const std::string _localPath;
 | 
			
		||||
	const ZipCommon::CompressionMethod _cm;
 | 
			
		||||
	const ZipCommon::CompressionLevel _cl;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Add_INCLUDED
 | 
			
		||||
							
								
								
									
										152
									
								
								Zip/include/Poco/Zip/AutoDetectStream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								Zip/include/Poco/Zip/AutoDetectStream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
//
 | 
			
		||||
// AutoDetectStream.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/AutoDetectStream.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  AutoDetectStream
 | 
			
		||||
//
 | 
			
		||||
// Definition of the AutoDetectStream class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_AutoDetectStream_INCLUDED
 | 
			
		||||
#define Zip_AutoDetectStream_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/BufferedStreamBuf.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API AutoDetectStreamBuf: public Poco::BufferedStreamBuf
 | 
			
		||||
	/// A AutoDetectStreamBuf is a class that limits one view on an inputstream to a selected view range
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	AutoDetectStreamBuf(std::istream& in, const std::string& prefix, const std::string& postfix, bool reposition, Poco::UInt32 start);
 | 
			
		||||
		/// Creates the AutoDetectStream. 
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	AutoDetectStreamBuf(std::ostream& out);
 | 
			
		||||
		/// Creates the AutoDetectStream. 
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access, and the stream will be repositioned
 | 
			
		||||
		/// to position start
 | 
			
		||||
 | 
			
		||||
	~AutoDetectStreamBuf();
 | 
			
		||||
		/// Destroys the AutoDetectStream.
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	int readFromDevice(char* buffer, std::streamsize length);
 | 
			
		||||
 | 
			
		||||
	int writeToDevice(const char* buffer, std::streamsize length);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum 
 | 
			
		||||
	{
 | 
			
		||||
		STREAM_BUFFER_SIZE  = 1024
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	std::istream*  _pIstr;
 | 
			
		||||
	std::ostream*  _pOstr;
 | 
			
		||||
	bool           _eofDetected;
 | 
			
		||||
	int            _matchCnt;
 | 
			
		||||
	std::string    _prefix;
 | 
			
		||||
	std::string    _postfix;
 | 
			
		||||
	bool           _reposition;
 | 
			
		||||
	Poco::UInt32   _start;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API AutoDetectIOS: public virtual std::ios
 | 
			
		||||
	/// The base class for AutoDetectInputStream and AutoDetectOutputStream.
 | 
			
		||||
	///
 | 
			
		||||
	/// This class is needed to ensure the correct initialization
 | 
			
		||||
	/// order of the stream buffer and base classes.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	AutoDetectIOS(std::istream& istr, const std::string& prefix, const std::string& postfix, bool reposition, Poco::UInt32 start);
 | 
			
		||||
		/// Creates the basic stream and connects it
 | 
			
		||||
		/// to the given input stream.
 | 
			
		||||
 | 
			
		||||
	AutoDetectIOS(std::ostream& ostr);
 | 
			
		||||
		/// Creates the basic stream and connects it
 | 
			
		||||
		/// to the given output stream.
 | 
			
		||||
 | 
			
		||||
	~AutoDetectIOS();
 | 
			
		||||
		/// Destroys the stream.
 | 
			
		||||
 | 
			
		||||
	AutoDetectStreamBuf* rdbuf();
 | 
			
		||||
		/// Returns a pointer to the underlying streambuf.
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	AutoDetectStreamBuf _buf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API AutoDetectInputStream: public AutoDetectIOS, public std::istream
 | 
			
		||||
	/// This stream copies all characters read through it
 | 
			
		||||
	/// to one or multiple output streams.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	AutoDetectInputStream(std::istream& istr, const std::string& prefix = std::string(), const std::string& postfix = std::string(), bool reposition = false, Poco::UInt32 start = 0);
 | 
			
		||||
		/// Creates the AutoDetectInputStream and connects it
 | 
			
		||||
		/// to the given input stream. Bytes read are guaranteed to be in the range [start, end-1]
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access, and the stream will be repositioned
 | 
			
		||||
		/// to position start
 | 
			
		||||
 | 
			
		||||
	~AutoDetectInputStream();
 | 
			
		||||
		/// Destroys the AutoDetectInputStream.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API AutoDetectOutputStream: public AutoDetectIOS, public std::ostream
 | 
			
		||||
	/// This stream copies all characters written to it
 | 
			
		||||
	/// to one or multiple output streams.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	AutoDetectOutputStream(std::ostream& ostr);
 | 
			
		||||
		/// Creates the AutoDetectOutputStream and connects it
 | 
			
		||||
		/// to the given input stream. Bytes written are guaranteed to be in the range [start, end-1]
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access, and the stream will be repositioned
 | 
			
		||||
		/// to position start
 | 
			
		||||
 | 
			
		||||
	~AutoDetectOutputStream();
 | 
			
		||||
		/// Destroys the AutoDetectOutputStream.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_AutoDetectStream_INCLUDED
 | 
			
		||||
							
								
								
									
										112
									
								
								Zip/include/Poco/Zip/Compress.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								Zip/include/Poco/Zip/Compress.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
//
 | 
			
		||||
// Compress.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Compress.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  Compress
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Compress class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Compress_INCLUDED
 | 
			
		||||
#define Zip_Compress_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/FIFOEvent.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Compress
 | 
			
		||||
	/// Compresses a directory or files as zip.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Poco::FIFOEvent<const ZipLocalFileHeader> EDone;
 | 
			
		||||
 | 
			
		||||
	Compress(std::ostream& out, bool seekableOut);
 | 
			
		||||
		/// seekableOut determines how we write the zip, setting it to true is recommended for local files (smaller zip file),
 | 
			
		||||
		/// if you are compressing directly to a network, you MUST set it to false
 | 
			
		||||
 | 
			
		||||
	~Compress();
 | 
			
		||||
 | 
			
		||||
	void addFile(std::istream& input, const Poco::DateTime& lastModifiedAt, const Poco::Path& fileName, ZipCommon::CompressionMethod cm = ZipCommon::CM_DEFLATE, ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM);
 | 
			
		||||
		/// Adds a single file to the Zip File. fileName must not be a directory name.
 | 
			
		||||
 | 
			
		||||
	void addFile(const Poco::Path& file, const Poco::Path& fileName, ZipCommon::CompressionMethod cm = ZipCommon::CM_DEFLATE, ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM);
 | 
			
		||||
		/// Adds a single file to the Zip File. fileName must not be a directory name. The file must exist physically!
 | 
			
		||||
 | 
			
		||||
	void addDirectory(const Poco::Path& entryName, const Poco::DateTime& lastModifiedAt);
 | 
			
		||||
		/// Adds a directory entry excluding all children to the Zip file, entryName must not be empty.
 | 
			
		||||
 | 
			
		||||
	void addRecursive(const Poco::Path& entry, ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM, bool excludeRoot = true, const Poco::Path& name = Poco::Path());
 | 
			
		||||
		/// Adds a directory entry recursively to the zip file, set excludeRoot to false to exclude the parent directory.
 | 
			
		||||
		/// If excludeRoot is true you can specify an empty name to add the files as relative files
 | 
			
		||||
 | 
			
		||||
	ZipArchive close();
 | 
			
		||||
		/// Finalizes the ZipArchive, closes it.
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		COMPRESS_CHUNK_SIZE = 8192
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Compress(const Compress&);
 | 
			
		||||
	Compress& operator=(const Compress&);
 | 
			
		||||
 | 
			
		||||
	void addEntry(std::istream& input, const Poco::DateTime& lastModifiedAt, const Poco::Path& fileName, ZipCommon::CompressionMethod cm = ZipCommon::CM_DEFLATE, ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM);
 | 
			
		||||
		/// Either adds a file or a single directory entry (excluding subchildren) to the Zip file. the compression level will be ignored
 | 
			
		||||
		/// for directories.
 | 
			
		||||
 | 
			
		||||
	void addFileRaw(std::istream& in, const ZipLocalFileHeader& hdr, const Poco::Path& fileName);
 | 
			
		||||
		/// copys an already compressed ZipEntry from in
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	std::ostream&              _out;
 | 
			
		||||
	bool                       _seekableOut;
 | 
			
		||||
	ZipArchive::FileHeaders    _files;
 | 
			
		||||
	ZipArchive::FileInfos      _infos;
 | 
			
		||||
	ZipArchive::DirectoryInfos _dirs;
 | 
			
		||||
	Poco::UInt32               _offset;
 | 
			
		||||
 | 
			
		||||
	friend class Keep;
 | 
			
		||||
	friend class Rename;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Compress_INCLUDED
 | 
			
		||||
							
								
								
									
										111
									
								
								Zip/include/Poco/Zip/Decompress.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								Zip/include/Poco/Zip/Decompress.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
//
 | 
			
		||||
// Decompress.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Decompress.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  Decompress
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Decompress class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Decompress_INCLUDED
 | 
			
		||||
#define Zip_Decompress_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ParseCallback.h"
 | 
			
		||||
#include "Poco/Path.h"
 | 
			
		||||
#include "Poco/FIFOEvent.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipArchive;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Decompress: public ParseCallback
 | 
			
		||||
	/// Decompress extracts files from zip files, can be used to extract single files or all files
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	typedef std::map<std::string, Poco::Path> ZipMapping;
 | 
			
		||||
		/// Maps key of FileInfo entries to their local decompressed representation
 | 
			
		||||
	Poco::FIFOEvent<std::pair<const ZipLocalFileHeader, const std::string> > EError;
 | 
			
		||||
		/// Thrown whenever an error is detected when handling a ZipLocalFileHeader entry. The string contains an error message
 | 
			
		||||
	Poco::FIFOEvent<std::pair<const ZipLocalFileHeader, const Poco::Path> > EOk;
 | 
			
		||||
		/// Thrown whenever a file was successfully decompressed
 | 
			
		||||
 | 
			
		||||
	Decompress(std::istream& in, const Poco::Path& outputDir, bool flattenDirs = false, bool keepIncompleteFiles = false);
 | 
			
		||||
		/// Creates the Decompress. Note that istream must be good and at the very beginning of the file!
 | 
			
		||||
		/// Calling decompressAllFiles will cause the stream to be in state failed once the zip file is processed.
 | 
			
		||||
		/// outputDir must be a directory. If it doesn't exist yet, it will be automatically created.
 | 
			
		||||
		/// If flattenDirs is set to true, the directory structure of the zip file is not recreated. 
 | 
			
		||||
		/// Instead, all files are extracted into one single directory.
 | 
			
		||||
 | 
			
		||||
	~Decompress();
 | 
			
		||||
		/// Destroys the Decompress.
 | 
			
		||||
 | 
			
		||||
	ZipArchive decompressAllFiles();
 | 
			
		||||
		/// Decompresses all files stored in the zip File. Can only be called once per Decompress object.
 | 
			
		||||
		/// Use mapping to retrieve the location of the decompressed files
 | 
			
		||||
 | 
			
		||||
	bool handleZipEntry(std::istream& zipStream, const ZipLocalFileHeader& hdr);
 | 
			
		||||
 | 
			
		||||
	const ZipMapping& mapping() const;
 | 
			
		||||
		/// A ZipMapping stores as key the full name of the ZipFileInfo/ZipLocalFileHeader and as value the decompressed file
 | 
			
		||||
		/// If for a ZipFileInfo no mapping exists, there was an error during decompression and the entry is considered to be corrupt
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	Decompress(const Decompress&);
 | 
			
		||||
	Decompress& operator=(const Decompress&);
 | 
			
		||||
 | 
			
		||||
	void onOk(const void*, std::pair<const ZipLocalFileHeader, const Poco::Path>& val);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	std::istream& _in;
 | 
			
		||||
	Poco::Path    _outDir;
 | 
			
		||||
	bool          _flattenDirs;
 | 
			
		||||
	bool          _keepIncompleteFiles;
 | 
			
		||||
	ZipMapping    _mapping;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const Decompress::ZipMapping& Decompress::mapping() const
 | 
			
		||||
{
 | 
			
		||||
	return _mapping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Decompress_INCLUDED
 | 
			
		||||
							
								
								
									
										70
									
								
								Zip/include/Poco/Zip/Delete.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								Zip/include/Poco/Zip/Delete.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
//
 | 
			
		||||
// Delete.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Delete.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Delete
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Delete class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Delete_INCLUDED
 | 
			
		||||
#define Zip_Delete_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Delete: public ZipOperation
 | 
			
		||||
	/// Delete Operation removes an entry from a Zip
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Delete(const ZipLocalFileHeader& hdr);
 | 
			
		||||
		/// Creates the Delete.
 | 
			
		||||
 | 
			
		||||
	void execute(Compress& c, std::istream& input);
 | 
			
		||||
		/// Throws away the ZipEntry
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	const ZipLocalFileHeader _hdr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Delete_INCLUDED
 | 
			
		||||
							
								
								
									
										71
									
								
								Zip/include/Poco/Zip/Keep.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Zip/include/Poco/Zip/Keep.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
//
 | 
			
		||||
// Keep.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Keep.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Keep
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Keep class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Keep_INCLUDED
 | 
			
		||||
#define Zip_Keep_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Keep: public ZipOperation
 | 
			
		||||
	/// Keep simply forwards the compressed data stream from the input ZipArchive
 | 
			
		||||
	/// to the output zip archive
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Keep(const ZipLocalFileHeader& hdr);
 | 
			
		||||
		/// Creates the Keep object.
 | 
			
		||||
 | 
			
		||||
	void execute(Compress& c, std::istream& input);
 | 
			
		||||
		///Adds a copy of the compressed input file to the ZipArchive
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	const ZipLocalFileHeader _hdr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Keep_INCLUDED
 | 
			
		||||
							
								
								
									
										76
									
								
								Zip/include/Poco/Zip/ParseCallback.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								Zip/include/Poco/Zip/ParseCallback.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
//
 | 
			
		||||
// ParseCallback.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ParseCallback.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ParseCallback
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ParseCallback class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ParseCallback_INCLUDED
 | 
			
		||||
#define Zip_ParseCallback_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipLocalFileHeader;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ParseCallback
 | 
			
		||||
	/// Interface for callbacks to handle ZipData
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ParseCallback();
 | 
			
		||||
		/// Creates the ParseCallback.
 | 
			
		||||
 | 
			
		||||
	virtual ~ParseCallback();
 | 
			
		||||
		/// Destroys the ParseCallback.
 | 
			
		||||
 | 
			
		||||
	virtual bool handleZipEntry(std::istream& zipStream, const ZipLocalFileHeader& hdr) = 0;
 | 
			
		||||
		/// Handles parsing of the data of a single Zip Entry. zipStream is guaranteed to be at the very first data byte.
 | 
			
		||||
		/// Note that a callback class SHOULD consume all data inside a zip file, ie. after
 | 
			
		||||
		/// processing the next 4 bytes point the next ZipLocalFileHeader or the ZipDirectory.
 | 
			
		||||
		/// If it fails to do so, it must return false, otherwise true.
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ParseCallback_INCLUDED
 | 
			
		||||
							
								
								
									
										209
									
								
								Zip/include/Poco/Zip/PartialStream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								Zip/include/Poco/Zip/PartialStream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
			
		||||
//
 | 
			
		||||
// PartialStream.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/PartialStream.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  PartialStream
 | 
			
		||||
//
 | 
			
		||||
// Definition of the PartialStream class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_PartialStream_INCLUDED
 | 
			
		||||
#define Zip_PartialStream_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/BufferedStreamBuf.h"
 | 
			
		||||
#include "Poco/Buffer.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API PartialStreamBuf: public Poco::BufferedStreamBuf
 | 
			
		||||
	/// A PartialStreamBuf is a class that limits one view on an inputstream to a selected view range
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	PartialStreamBuf(std::istream& in, std::ios::pos_type start, std::ios::pos_type end, const std::string& prefix, const std::string& postfix, bool initStream);
 | 
			
		||||
		/// Creates the PartialStream. 
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access, and the stream will be repositioned
 | 
			
		||||
		/// to position start
 | 
			
		||||
 | 
			
		||||
	PartialStreamBuf(std::ostream& out, std::size_t start, std::size_t end, bool initStream);
 | 
			
		||||
		/// Creates the PartialStream. 
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access.
 | 
			
		||||
		/// start and end acts as offset values for the written content. A start value greater than zero,
 | 
			
		||||
		/// means that the first bytes are not written but discarded instead,
 | 
			
		||||
		/// an end value not equal to zero means that the last end bytes are not written!
 | 
			
		||||
		/// Examples:
 | 
			
		||||
		///     start = 3; end = 1
 | 
			
		||||
		///     write("hello", 5) -> "l"
 | 
			
		||||
 | 
			
		||||
	~PartialStreamBuf();
 | 
			
		||||
		/// Destroys the PartialStream.
 | 
			
		||||
 | 
			
		||||
	void close();
 | 
			
		||||
		/// Flushes a writing streambuf
 | 
			
		||||
 | 
			
		||||
	Poco::UInt64 bytesWritten() const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	int readFromDevice(char* buffer, std::streamsize length);
 | 
			
		||||
 | 
			
		||||
	int writeToDevice(const char* buffer, std::streamsize length);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum 
 | 
			
		||||
	{
 | 
			
		||||
		STREAM_BUFFER_SIZE  = 1024
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	bool           _initialized;
 | 
			
		||||
	std::ios::pos_type  _start;
 | 
			
		||||
	Poco::UInt64   _numBytes;
 | 
			
		||||
	Poco::UInt64   _bytesWritten;
 | 
			
		||||
	std::istream*  _pIstr;
 | 
			
		||||
	std::ostream*  _pOstr;
 | 
			
		||||
	std::string    _prefix;
 | 
			
		||||
	std::string    _postfix;
 | 
			
		||||
	std::size_t    _ignoreStart;
 | 
			
		||||
	Poco::Buffer<char> _buffer;
 | 
			
		||||
	Poco::UInt32   _bufferOffset;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt64 PartialStreamBuf::bytesWritten() const
 | 
			
		||||
{
 | 
			
		||||
	return _bytesWritten;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API PartialIOS: public virtual std::ios
 | 
			
		||||
	/// The base class for PartialInputStream and PartialOutputStream.
 | 
			
		||||
	///
 | 
			
		||||
	/// This class is needed to ensure the correct initialization
 | 
			
		||||
	/// order of the stream buffer and base classes.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	PartialIOS(std::istream& istr, std::ios::pos_type start, std::ios::pos_type end, const std::string& prefix, const std::string& postfix, bool initStream);
 | 
			
		||||
		/// Creates the basic stream and connects it
 | 
			
		||||
		/// to the given input stream.
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access, and the stream will be repositioned
 | 
			
		||||
		/// to position start
 | 
			
		||||
 | 
			
		||||
	PartialIOS(std::ostream& ostr, std::size_t start, std::size_t end, bool initStream);
 | 
			
		||||
		/// Creates the basic stream and connects it
 | 
			
		||||
		/// to the given output stream.
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access.
 | 
			
		||||
		/// start and end acts as offset values for the written content. A start value greater than zero,
 | 
			
		||||
		/// means that the first bytes are not written but discarded instead,
 | 
			
		||||
		/// an end value not equal to zero means that the last end bytes are not written!
 | 
			
		||||
		/// Examples:
 | 
			
		||||
		///     start = 3; end = 1
 | 
			
		||||
		///     write("hello", 5) -> "l"
 | 
			
		||||
 | 
			
		||||
	~PartialIOS();
 | 
			
		||||
		/// Destroys the stream.
 | 
			
		||||
 | 
			
		||||
	PartialStreamBuf* rdbuf();
 | 
			
		||||
		/// Returns a pointer to the underlying streambuf.
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	PartialStreamBuf _buf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API PartialInputStream: public PartialIOS, public std::istream
 | 
			
		||||
	/// This stream copies all characters read through it
 | 
			
		||||
	/// to one or multiple output streams.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	PartialInputStream(std::istream& istr, std::ios::pos_type start, std::ios::pos_type end, bool initStream = true, const std::string& prefix = std::string(), const std::string& postfix = std::string());
 | 
			
		||||
		/// Creates the PartialInputStream and connects it
 | 
			
		||||
		/// to the given input stream. Bytes read are guaranteed to be in the range [start, end-1]
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access, and the stream will be repositioned
 | 
			
		||||
		/// to position start
 | 
			
		||||
 | 
			
		||||
	~PartialInputStream();
 | 
			
		||||
		/// Destroys the PartialInputStream.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API PartialOutputStream: public PartialIOS, public std::ostream
 | 
			
		||||
	/// This stream copies all characters written to it
 | 
			
		||||
	/// to one or multiple output streams.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	PartialOutputStream(std::ostream& ostr, std::size_t start, std::size_t end, bool initStream = true);
 | 
			
		||||
		/// Creates the PartialOutputStream and connects it
 | 
			
		||||
		/// to the given output stream. Bytes written are guaranteed to be in the range [start, realEnd - end].
 | 
			
		||||
		/// If initStream is true the status of the stream will be cleared on the first access.
 | 
			
		||||
		/// start and end acts as offset values for the written content. A start value greater than zero,
 | 
			
		||||
		/// means that the first bytes are not written but discarded instead,
 | 
			
		||||
		/// an end value not equal to zero means that the last end bytes are not written!
 | 
			
		||||
		/// Examples:
 | 
			
		||||
		///     start = 3; end = 1
 | 
			
		||||
		///     write("hello", 5) -> "l"
 | 
			
		||||
		///     
 | 
			
		||||
		///     start = 3; end = 0
 | 
			
		||||
		///     write("hello", 5) -> "lo"
 | 
			
		||||
 | 
			
		||||
	~PartialOutputStream();
 | 
			
		||||
		/// Destroys the PartialOutputStream.
 | 
			
		||||
 | 
			
		||||
	void close();
 | 
			
		||||
		/// must be called for the stream to properly terminate it
 | 
			
		||||
 | 
			
		||||
	Poco::UInt64 bytesWritten() const;
 | 
			
		||||
		/// Returns the number of bytes actually forwarded to the inner ostream
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void PartialOutputStream::close()
 | 
			
		||||
{
 | 
			
		||||
	flush();
 | 
			
		||||
	_buf.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt64 PartialOutputStream::bytesWritten() const
 | 
			
		||||
{
 | 
			
		||||
	return _buf.bytesWritten();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_PartialStream_INCLUDED
 | 
			
		||||
							
								
								
									
										71
									
								
								Zip/include/Poco/Zip/Rename.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Zip/include/Poco/Zip/Rename.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
//
 | 
			
		||||
// Rename.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Rename.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Rename
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Rename class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Rename_INCLUDED
 | 
			
		||||
#define Zip_Rename_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Rename: public ZipOperation
 | 
			
		||||
	/// Renames an existing Zip Entry
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Rename(const ZipLocalFileHeader& hdr, const std::string& newZipEntryName);
 | 
			
		||||
		/// Creates the Rename.
 | 
			
		||||
 | 
			
		||||
	void execute(Compress& c, std::istream& input);
 | 
			
		||||
		/// Performs the rename operation
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	const ZipLocalFileHeader _hdr;
 | 
			
		||||
	const std::string _newZipEntryName;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Rename_INCLUDED
 | 
			
		||||
							
								
								
									
										72
									
								
								Zip/include/Poco/Zip/Replace.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								Zip/include/Poco/Zip/Replace.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
//
 | 
			
		||||
// Replace.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Replace.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Replace
 | 
			
		||||
//
 | 
			
		||||
// Definition of the Replace class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Replace_INCLUDED
 | 
			
		||||
#define Zip_Replace_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/Add.h"
 | 
			
		||||
#include "Poco/Zip/Delete.h"
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API Replace: public ZipOperation
 | 
			
		||||
	/// Operation Replace replaces the content of an existing entry with a new one
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Replace(const ZipLocalFileHeader& hdr, const std::string& localPath);
 | 
			
		||||
		/// Creates the Replace.
 | 
			
		||||
 | 
			
		||||
	void execute(Compress& c, std::istream& input);
 | 
			
		||||
		/// Performs the replace operation
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	Delete _del;
 | 
			
		||||
	Add _add;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Replace_INCLUDED
 | 
			
		||||
							
								
								
									
										68
									
								
								Zip/include/Poco/Zip/SkipCallback.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								Zip/include/Poco/Zip/SkipCallback.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
//
 | 
			
		||||
// SkipCallback.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/SkipCallback.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  SkipCallback
 | 
			
		||||
//
 | 
			
		||||
// Definition of the SkipCallback class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_SkipCallback_INCLUDED
 | 
			
		||||
#define Zip_SkipCallback_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ParseCallback.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API SkipCallback: public ParseCallback
 | 
			
		||||
	/// A SkipCallback simply skips over the data
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	SkipCallback();
 | 
			
		||||
		/// Creates the SkipCallback.
 | 
			
		||||
 | 
			
		||||
	virtual ~SkipCallback();
 | 
			
		||||
		/// Destroys the SkipCallback.
 | 
			
		||||
 | 
			
		||||
	bool handleZipEntry(std::istream& zipStream, const ZipLocalFileHeader& hdr);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_SkipCallback_INCLUDED
 | 
			
		||||
							
								
								
									
										92
									
								
								Zip/include/Poco/Zip/Zip.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								Zip/include/Poco/Zip/Zip.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
//
 | 
			
		||||
// Zip.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/Zip.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  Zip
 | 
			
		||||
//
 | 
			
		||||
// Basic definitions for the Poco Zip library.
 | 
			
		||||
// This file must be the first file included by every other Zip
 | 
			
		||||
// header file.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_Zip_INCLUDED
 | 
			
		||||
#define Zip_Zip_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Foundation.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// The following block is the standard way of creating macros which make exporting
 | 
			
		||||
// from a DLL simpler. All files within this DLL are compiled with the Zip_EXPORTS
 | 
			
		||||
// symbol defined on the command line. this symbol should not be defined on any project
 | 
			
		||||
// that uses this DLL. This way any other project whose source files include this file see
 | 
			
		||||
// Zip_API functions as being imported from a DLL, wheras this DLL sees symbols
 | 
			
		||||
// defined with this macro as being exported.
 | 
			
		||||
//
 | 
			
		||||
#if defined(_WIN32) && defined(POCO_DLL)
 | 
			
		||||
	#if defined(Zip_EXPORTS)
 | 
			
		||||
		#define Zip_API __declspec(dllexport)
 | 
			
		||||
	#else
 | 
			
		||||
		#define Zip_API __declspec(dllimport)
 | 
			
		||||
	#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if !defined(Zip_API)
 | 
			
		||||
	#define Zip_API
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Automatically link Zip library.
 | 
			
		||||
//
 | 
			
		||||
#if defined(_MSC_VER)
 | 
			
		||||
	#if !defined(POCO_NO_AUTOMATIC_LIBS) && !defined(Zip_EXPORTS)
 | 
			
		||||
		#if defined(POCO_DLL)
 | 
			
		||||
			#if defined(_DEBUG)
 | 
			
		||||
				#pragma comment(lib, "PocoZipd.lib")
 | 
			
		||||
			#else
 | 
			
		||||
				#pragma comment(lib, "PocoZip.lib")
 | 
			
		||||
			#endif
 | 
			
		||||
		#else
 | 
			
		||||
			#if defined(_DEBUG)
 | 
			
		||||
				#pragma comment(lib, "PocoZipmtd.lib")
 | 
			
		||||
			#else
 | 
			
		||||
				#pragma comment(lib, "PocoZipmt.lib")
 | 
			
		||||
			#endif
 | 
			
		||||
		#endif
 | 
			
		||||
	#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_Zip_INCLUDED
 | 
			
		||||
							
								
								
									
										136
									
								
								Zip/include/Poco/Zip/ZipArchive.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								Zip/include/Poco/Zip/ZipArchive.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipArchive.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipArchive.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipArchive
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipArchive class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipArchive_INCLUDED
 | 
			
		||||
#define Zip_ZipArchive_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipFileInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchiveInfo.h"
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ParseCallback;
 | 
			
		||||
class Compress;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipArchive
 | 
			
		||||
	/// A ZipArchive contains information on the content of a zip file
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	typedef std::map<std::string, ZipLocalFileHeader> FileHeaders;
 | 
			
		||||
	typedef std::map<std::string, ZipFileInfo> FileInfos;
 | 
			
		||||
	typedef std::map<Poco::UInt16, ZipArchiveInfo> DirectoryInfos;
 | 
			
		||||
 | 
			
		||||
	ZipArchive(std::istream& in);
 | 
			
		||||
		/// Creates the ZipArchive from a file. Note that the in stream will be in state failed after the constructor is finished
 | 
			
		||||
 | 
			
		||||
	ZipArchive(std::istream& in, ParseCallback& callback);
 | 
			
		||||
		/// Creates the ZipArchive from a file or network stream. Note that the in stream will be in state failed after the constructor is finished
 | 
			
		||||
 | 
			
		||||
	~ZipArchive();
 | 
			
		||||
		/// Destroys the ZipArchive.
 | 
			
		||||
 | 
			
		||||
	FileInfos::const_iterator fileInfoBegin() const;
 | 
			
		||||
 | 
			
		||||
	FileInfos::const_iterator fileInfoEnd() const;
 | 
			
		||||
 | 
			
		||||
	FileHeaders::const_iterator findHeader(const std::string& fileName) const;
 | 
			
		||||
 | 
			
		||||
	FileHeaders::const_iterator headerBegin() const;
 | 
			
		||||
 | 
			
		||||
	FileHeaders::const_iterator headerEnd() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void parse(std::istream& in, ParseCallback& pc);
 | 
			
		||||
 | 
			
		||||
	ZipArchive(const FileHeaders& entries, const FileInfos& infos, const DirectoryInfos& dirs	);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	FileHeaders    _entries;
 | 
			
		||||
		/// Info generated by parsing the data block of the zip file
 | 
			
		||||
	FileInfos      _infos;
 | 
			
		||||
		/// Info generated by parsing the directory block of the zip file
 | 
			
		||||
	DirectoryInfos _disks;
 | 
			
		||||
		/// Stores directory info for all found disks
 | 
			
		||||
 | 
			
		||||
	friend class Compress;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipArchive::FileInfos::const_iterator ZipArchive::fileInfoBegin() const
 | 
			
		||||
{
 | 
			
		||||
	return _infos.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipArchive::FileInfos::const_iterator ZipArchive::fileInfoEnd() const
 | 
			
		||||
{
 | 
			
		||||
	return _infos.end();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipArchive::FileHeaders::const_iterator ZipArchive::findHeader(const std::string& fileName) const
 | 
			
		||||
{
 | 
			
		||||
	return _entries.find(fileName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipArchive::FileHeaders::const_iterator ZipArchive::headerBegin() const
 | 
			
		||||
{
 | 
			
		||||
	return _entries.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipArchive::FileHeaders::const_iterator ZipArchive::headerEnd() const
 | 
			
		||||
{
 | 
			
		||||
	return _entries.end();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipArchive_INCLUDED
 | 
			
		||||
							
								
								
									
										210
									
								
								Zip/include/Poco/Zip/ZipArchiveInfo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								Zip/include/Poco/Zip/ZipArchiveInfo.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,210 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipArchiveInfo.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipArchiveInfo.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipArchiveInfo
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipArchiveInfo class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipArchiveInfo_INCLUDED
 | 
			
		||||
#define Zip_ZipArchiveInfo_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipArchiveInfo
 | 
			
		||||
	/// A ZipArchiveInfo stores central directory info
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static const char HEADER[ZipCommon::HEADER_SIZE];
 | 
			
		||||
 | 
			
		||||
	ZipArchiveInfo();
 | 
			
		||||
		/// Default constructor, everything set to zero or empty
 | 
			
		||||
 | 
			
		||||
	ZipArchiveInfo(std::istream& in, bool assumeHeaderRead);
 | 
			
		||||
		/// Creates the ZipArchiveInfo by parsing the input stream.
 | 
			
		||||
		/// If assumeHeaderRead is true we assume that the first 4 bytes were already read outside.
 | 
			
		||||
 | 
			
		||||
	~ZipArchiveInfo();
 | 
			
		||||
		/// Destroys the ZipArchiveInfo.
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getDiskNumber() const;
 | 
			
		||||
		/// Get the number of the disk where this header can be found
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getFirstDiskForDirectoryHeader() const;
 | 
			
		||||
		/// Returns the number of the disk that contains the start of the directory header
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getNumberOfEntries() const;
 | 
			
		||||
		/// Returns the number of entries on this disk
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getTotalNumberOfEntries() const;
 | 
			
		||||
		/// Returns the total number of entries on all disks
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCentralDirectorySize() const;
 | 
			
		||||
		/// Returns the size of the central directory in bytes
 | 
			
		||||
 | 
			
		||||
	std::streamoff getHeaderOffset() const;
 | 
			
		||||
		/// Returns the offset of the header in relation to the begin of this disk
 | 
			
		||||
 | 
			
		||||
	const std::string& getZipComment() const;
 | 
			
		||||
		/// Returns the (optional) Zip Comment
 | 
			
		||||
 | 
			
		||||
	void setNumberOfEntries(Poco::UInt16 val);
 | 
			
		||||
		/// Returns the number of entries on this disk
 | 
			
		||||
 | 
			
		||||
	void setTotalNumberOfEntries(Poco::UInt16 val);
 | 
			
		||||
		/// Returns the total number of entries on all disks
 | 
			
		||||
 | 
			
		||||
	void setCentralDirectorySize(Poco::UInt32 val);
 | 
			
		||||
		/// Returns the size of the central directory in bytes
 | 
			
		||||
 | 
			
		||||
	void setHeaderOffset(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	std::string createHeader() const;
 | 
			
		||||
		/// Creates a header
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void parse(std::istream& inp, bool assumeHeaderRead);
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getZipCommentSize() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		HEADER_POS = 0,
 | 
			
		||||
		NUMBEROFTHISDISK_POS = HEADER_POS + ZipCommon::HEADER_SIZE,
 | 
			
		||||
		NUMBEROFTHISDISK_SIZE = 2,
 | 
			
		||||
		NUMBEROFCENTRALDIRDISK_POS = NUMBEROFTHISDISK_POS + NUMBEROFTHISDISK_SIZE,
 | 
			
		||||
		NUMBEROFCENTRALDIRDISK_SIZE = 2,
 | 
			
		||||
		NUMENTRIESTHISDISK_POS = NUMBEROFCENTRALDIRDISK_POS + NUMBEROFCENTRALDIRDISK_SIZE,
 | 
			
		||||
		NUMENTRIESTHISDISK_SIZE = 2,
 | 
			
		||||
		TOTALNUMENTRIES_POS = NUMENTRIESTHISDISK_POS + NUMENTRIESTHISDISK_SIZE,
 | 
			
		||||
		TOTALNUMENTRIES_SIZE = 2,
 | 
			
		||||
		CENTRALDIRSIZE_POS = TOTALNUMENTRIES_POS + TOTALNUMENTRIES_SIZE,
 | 
			
		||||
		CENTRALDIRSIZE_SIZE = 4,
 | 
			
		||||
		CENTRALDIRSTARTOFFSET_POS = CENTRALDIRSIZE_POS + CENTRALDIRSIZE_SIZE,
 | 
			
		||||
		CENTRALDIRSTARTOFFSET_SIZE = 4,
 | 
			
		||||
		ZIPCOMMENT_LENGTH_POS = CENTRALDIRSTARTOFFSET_POS + CENTRALDIRSTARTOFFSET_SIZE,
 | 
			
		||||
		ZIPCOMMENT_LENGTH_SIZE = 2,
 | 
			
		||||
		FULLHEADER_SIZE = 22
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	char           _rawInfo[FULLHEADER_SIZE];
 | 
			
		||||
	std::streamoff _startPos;
 | 
			
		||||
	std::string    _comment;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipArchiveInfo::getDiskNumber() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, NUMBEROFTHISDISK_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipArchiveInfo::getFirstDiskForDirectoryHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, NUMBEROFCENTRALDIRDISK_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipArchiveInfo::getNumberOfEntries() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, NUMENTRIESTHISDISK_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipArchiveInfo::getTotalNumberOfEntries() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, TOTALNUMENTRIES_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipArchiveInfo::getCentralDirectorySize() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, CENTRALDIRSIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline std::streamoff ZipArchiveInfo::getHeaderOffset() const
 | 
			
		||||
{
 | 
			
		||||
	return _startPos;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipArchiveInfo::getZipCommentSize() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, ZIPCOMMENT_LENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const std::string& ZipArchiveInfo::getZipComment() const
 | 
			
		||||
{
 | 
			
		||||
	return _comment;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipArchiveInfo::setNumberOfEntries(Poco::UInt16 val)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(val, _rawInfo, NUMENTRIESTHISDISK_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipArchiveInfo::setTotalNumberOfEntries(Poco::UInt16 val)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(val, _rawInfo, TOTALNUMENTRIES_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipArchiveInfo::setCentralDirectorySize(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawInfo, CENTRALDIRSIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipArchiveInfo::setHeaderOffset(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawInfo, CENTRALDIRSTARTOFFSET_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipArchiveInfo_INCLUDED
 | 
			
		||||
							
								
								
									
										119
									
								
								Zip/include/Poco/Zip/ZipCommon.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								Zip/include/Poco/Zip/ZipCommon.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipCommon.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipCommon.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipCommon
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipCommon class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipCommon_INCLUDED
 | 
			
		||||
#define Zip_ZipCommon_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipCommon
 | 
			
		||||
	/// Common enums used in the Zip project
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		HEADER_SIZE = 4
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	enum CompressionMethod
 | 
			
		||||
	{
 | 
			
		||||
		CM_STORE   = 0,
 | 
			
		||||
		CM_SHRUNK  = 1,
 | 
			
		||||
		CM_FACTOR1 = 2,
 | 
			
		||||
		CM_FACTOR2 = 3,
 | 
			
		||||
		CM_FACTOR3 = 4,
 | 
			
		||||
		CM_FACTOR4 = 5,
 | 
			
		||||
		CM_IMPLODE = 6,
 | 
			
		||||
		CM_TOKENIZE= 7,
 | 
			
		||||
		CM_DEFLATE = 8,
 | 
			
		||||
		CM_ENHANCEDDEFLATE = 9,
 | 
			
		||||
		CM_DATECOMPRIMPLODING = 10,
 | 
			
		||||
		CM_UNUSED = 11
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	enum CompressionLevel
 | 
			
		||||
	{
 | 
			
		||||
		CL_NORMAL    = 0,
 | 
			
		||||
		CL_MAXIMUM   = 1,
 | 
			
		||||
		CL_FAST      = 2,
 | 
			
		||||
		CL_SUPERFAST = 3
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	enum HostSystem
 | 
			
		||||
	{
 | 
			
		||||
		HS_FAT = 0,  // + PKZIPW 2.50 VFAT, NTFS
 | 
			
		||||
		HS_AMIGA = 1,
 | 
			
		||||
		HS_VMS = 2,
 | 
			
		||||
		HS_UNIX = 3,
 | 
			
		||||
		HS_VM_CMS = 4,
 | 
			
		||||
		HS_ATARI = 5,
 | 
			
		||||
		HS_HPFS = 6,
 | 
			
		||||
		HS_MACINTOSH = 7,
 | 
			
		||||
		HS_ZSYSTEM = 8,
 | 
			
		||||
		HS_CP_M = 9,
 | 
			
		||||
		HS_TOPS20 = 10, // used by pkzip2.5 to indicate ntfs
 | 
			
		||||
		HS_NTFS = 11,
 | 
			
		||||
		HS_SMS_QDOS = 12,
 | 
			
		||||
		HS_ACORN = 13,
 | 
			
		||||
		HS_VFAT = 14,
 | 
			
		||||
		HS_MVS = 15,
 | 
			
		||||
		HS_BEOS = 16,
 | 
			
		||||
		HS_TANDEM = 17,
 | 
			
		||||
		HS_UNUSED = 18,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	enum FileType
 | 
			
		||||
	{
 | 
			
		||||
		FT_BINARY= 0,
 | 
			
		||||
		FT_ASCII = 1
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	static const std::string ILLEGAL_PATH;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipCommon_INCLUDED
 | 
			
		||||
							
								
								
									
										160
									
								
								Zip/include/Poco/Zip/ZipDataInfo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								Zip/include/Poco/Zip/ZipDataInfo.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,160 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipDataInfo.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipDataInfo.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipDataInfo
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipDataInfo class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipDataInfo_INCLUDED
 | 
			
		||||
#define Zip_ZipDataInfo_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipDataInfo
 | 
			
		||||
	/// A ZipDataInfo stores a Zip data descriptor
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static const char HEADER[ZipCommon::HEADER_SIZE];
 | 
			
		||||
 | 
			
		||||
	ZipDataInfo();
 | 
			
		||||
	/// Creates a header with all fields (except the header field) set to 0
 | 
			
		||||
 | 
			
		||||
	ZipDataInfo(std::istream& in, bool assumeHeaderRead);
 | 
			
		||||
		/// Creates the ZipDataInfo.
 | 
			
		||||
 | 
			
		||||
	~ZipDataInfo();
 | 
			
		||||
		/// Destroys the ZipDataInfo.
 | 
			
		||||
 | 
			
		||||
	bool isValid() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCRC32() const;
 | 
			
		||||
 | 
			
		||||
	void setCRC32(Poco::UInt32 crc);
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCompressedSize() const;
 | 
			
		||||
 | 
			
		||||
	void setCompressedSize(Poco::UInt32 size);
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getUncompressedSize() const;
 | 
			
		||||
 | 
			
		||||
	void setUncompressedSize(Poco::UInt32 size);
 | 
			
		||||
 | 
			
		||||
	static Poco::UInt32 getFullHeaderSize();
 | 
			
		||||
 | 
			
		||||
	const char* getRawHeader() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		HEADER_POS = 0,
 | 
			
		||||
		CRC32_POS  = HEADER_POS + ZipCommon::HEADER_SIZE,
 | 
			
		||||
		CRC32_SIZE = 4,
 | 
			
		||||
		COMPRESSED_POS = CRC32_POS + CRC32_SIZE,
 | 
			
		||||
		COMPRESSED_SIZE = 4,
 | 
			
		||||
		UNCOMPRESSED_POS = COMPRESSED_POS + COMPRESSED_SIZE,
 | 
			
		||||
		UNCOMPRESSED_SIZE = 4,
 | 
			
		||||
		FULLHEADER_SIZE = UNCOMPRESSED_POS + UNCOMPRESSED_SIZE
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	char _rawInfo[FULLHEADER_SIZE];
 | 
			
		||||
	bool _valid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const char* ZipDataInfo::getRawHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return _rawInfo;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipDataInfo::isValid() const
 | 
			
		||||
{
 | 
			
		||||
	return _valid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipDataInfo::getCRC32() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, CRC32_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipDataInfo::setCRC32(Poco::UInt32 crc)
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::set32BitValue(crc, _rawInfo, CRC32_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipDataInfo::getCompressedSize() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, COMPRESSED_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipDataInfo::setCompressedSize(Poco::UInt32 size)
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::set32BitValue(size, _rawInfo, COMPRESSED_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipDataInfo::getUncompressedSize() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, UNCOMPRESSED_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipDataInfo::setUncompressedSize(Poco::UInt32 size)
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::set32BitValue(size, _rawInfo, UNCOMPRESSED_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipDataInfo::getFullHeaderSize()
 | 
			
		||||
{
 | 
			
		||||
	return FULLHEADER_SIZE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipDataInfo_INCLUDED
 | 
			
		||||
							
								
								
									
										58
									
								
								Zip/include/Poco/Zip/ZipException.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Zip/include/Poco/Zip/ZipException.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipException.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipException.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipException
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipException class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipException_INCLUDED
 | 
			
		||||
#define Zip_ZipException_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
POCO_DECLARE_EXCEPTION(Zip_API, ZipException, Poco::RuntimeException)
 | 
			
		||||
POCO_DECLARE_EXCEPTION(Zip_API, ZipManipulationException, ZipException)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipException_INCLUDED
 | 
			
		||||
							
								
								
									
										468
									
								
								Zip/include/Poco/Zip/ZipFileInfo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										468
									
								
								Zip/include/Poco/Zip/ZipFileInfo.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,468 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipFileInfo.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipFileInfo.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipFileInfo
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipFileInfo class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipFileInfo_INCLUDED
 | 
			
		||||
#define Zip_ZipFileInfo_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipLocalFileHeader;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipFileInfo
 | 
			
		||||
	/// Stores a Zip directory entry of a file
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static const char HEADER[ZipCommon::HEADER_SIZE];
 | 
			
		||||
 | 
			
		||||
	ZipFileInfo(const ZipLocalFileHeader& header);
 | 
			
		||||
		/// Creates a ZipFileInfo from a ZipLocalFileHeader
 | 
			
		||||
 | 
			
		||||
	ZipFileInfo(std::istream& in, bool assumeHeaderRead);
 | 
			
		||||
		/// Creates the ZipFileInfo by parsing the input stream.
 | 
			
		||||
		/// If assumeHeaderRead is true we assume that the first 4 bytes were already read outside.
 | 
			
		||||
 | 
			
		||||
	~ZipFileInfo();
 | 
			
		||||
		/// Destroys the ZipFileInfo.
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getRelativeOffsetOfLocalHeader() const;
 | 
			
		||||
		/// Where on the disk starts the localheader. Combined with the disk number gives the exact location of the header
 | 
			
		||||
 | 
			
		||||
	ZipCommon::CompressionMethod getCompressionMethod() const;
 | 
			
		||||
 | 
			
		||||
	bool isEncrypted() const;
 | 
			
		||||
 | 
			
		||||
	const Poco::DateTime& lastModifiedAt() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCRC() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getHeaderSize() const;
 | 
			
		||||
		/// Returns the total size of the header including filename + other additional fields
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCompressedSize() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getUncompressedSize() const;
 | 
			
		||||
 | 
			
		||||
	const std::string& getFileName() const;
 | 
			
		||||
 | 
			
		||||
	bool isFile() const;
 | 
			
		||||
 | 
			
		||||
	bool isDirectory() const;
 | 
			
		||||
 | 
			
		||||
	bool hasExtraField() const;
 | 
			
		||||
 | 
			
		||||
	const std::string& getExtraField() const;
 | 
			
		||||
 | 
			
		||||
	const std::string& getFileComment() const;
 | 
			
		||||
 | 
			
		||||
	void getVersionMadeBy(int& major, int& minor);
 | 
			
		||||
		/// The ZIP version used to create the file
 | 
			
		||||
 | 
			
		||||
	void getRequiredVersion(int& major, int& minor);
 | 
			
		||||
		/// The minimum version required to extract the data
 | 
			
		||||
 | 
			
		||||
	ZipCommon::HostSystem getHostSystem() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getDiskNumberStart() const;
 | 
			
		||||
		/// The number of the disk on which this file begins (multidisk archives)
 | 
			
		||||
 | 
			
		||||
	ZipCommon::FileType getFileType() const;
 | 
			
		||||
		/// Binary or ASCII file?
 | 
			
		||||
 | 
			
		||||
	std::string createHeader() const;
 | 
			
		||||
 | 
			
		||||
	void setOffset(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void setCRC(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	void setCompressedSize(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	void setUncompressedSize(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	void setCompressionMethod(ZipCommon::CompressionMethod cm);
 | 
			
		||||
 | 
			
		||||
	void setCompressionLevel(ZipCommon::CompressionLevel cl);
 | 
			
		||||
 | 
			
		||||
	void setRequiredVersion(int major, int minor);
 | 
			
		||||
 | 
			
		||||
	void setHostSystem(ZipCommon::HostSystem hs);
 | 
			
		||||
 | 
			
		||||
	void setLastModifiedAt(const Poco::DateTime& dt);
 | 
			
		||||
 | 
			
		||||
	void setEncryption(bool val);
 | 
			
		||||
 | 
			
		||||
	void setFileNameLength(Poco::UInt16 size);
 | 
			
		||||
 | 
			
		||||
	void setFileName(const std::string& str);
 | 
			
		||||
 | 
			
		||||
	void parse(std::istream& in, bool assumeHeaderRead);
 | 
			
		||||
 | 
			
		||||
	void parseDateTime();
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCRCFromHeader() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCompressedSizeFromHeader() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getUncompressedSizeFromHeader() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getFileNameLength() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getExtraFieldLength() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getFileCommentLength() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getExternalFileAttributes() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		HEADER_POS = 0,
 | 
			
		||||
		VERSIONMADEBY_POS = HEADER_POS + ZipCommon::HEADER_SIZE,
 | 
			
		||||
		VERSIONMADEBY_SIZE = 2,
 | 
			
		||||
		VERSION_NEEDED_POS = VERSIONMADEBY_POS + VERSIONMADEBY_SIZE,
 | 
			
		||||
		VERSION_NEEDED_SIZE = 2,
 | 
			
		||||
		GENERAL_PURPOSE_POS = VERSION_NEEDED_POS + VERSION_NEEDED_SIZE,
 | 
			
		||||
		GENERAL_PURPOSE_SIZE = 2,
 | 
			
		||||
		COMPR_METHOD_POS = GENERAL_PURPOSE_POS + GENERAL_PURPOSE_SIZE,
 | 
			
		||||
		COMPR_METHOD_SIZE = 2,
 | 
			
		||||
		LASTMODFILETIME_POS = COMPR_METHOD_POS + COMPR_METHOD_SIZE,
 | 
			
		||||
		LASTMODFILETIME_SIZE = 2,
 | 
			
		||||
		LASTMODFILEDATE_POS = LASTMODFILETIME_POS + LASTMODFILETIME_SIZE,
 | 
			
		||||
		LASTMODFILEDATE_SIZE = 2,
 | 
			
		||||
		CRC32_POS = LASTMODFILEDATE_POS + LASTMODFILEDATE_SIZE,
 | 
			
		||||
		CRC32_SIZE = 4,
 | 
			
		||||
		COMPRESSED_SIZE_POS = CRC32_POS + CRC32_SIZE,
 | 
			
		||||
		COMPRESSED_SIZE_SIZE = 4,
 | 
			
		||||
		UNCOMPRESSED_SIZE_POS = COMPRESSED_SIZE_POS + COMPRESSED_SIZE_SIZE,
 | 
			
		||||
		UNCOMPRESSED_SIZE_SIZE = 4,
 | 
			
		||||
		FILENAME_LENGTH_POS = UNCOMPRESSED_SIZE_POS + UNCOMPRESSED_SIZE_SIZE,
 | 
			
		||||
		FILENAME_LENGTH_SIZE = 2,
 | 
			
		||||
		EXTRAFIELD_LENGTH_POS = FILENAME_LENGTH_POS + FILENAME_LENGTH_SIZE,
 | 
			
		||||
		EXTRAFIELD_LENGTH_SIZE = 2,
 | 
			
		||||
		FILECOMMENT_LENGTH_POS = EXTRAFIELD_LENGTH_POS + EXTRAFIELD_LENGTH_SIZE,
 | 
			
		||||
		FILECOMMENT_LENGTH_SIZE = 2,
 | 
			
		||||
		DISKNUMBERSTART_POS = FILECOMMENT_LENGTH_POS + FILECOMMENT_LENGTH_SIZE,
 | 
			
		||||
		DISKNUMBERSTART_SIZE = 2,
 | 
			
		||||
		INTERNALFILE_ATTR_POS = DISKNUMBERSTART_POS + DISKNUMBERSTART_SIZE,
 | 
			
		||||
		INTERNALFILE_ATTR_SIZE = 2,
 | 
			
		||||
		EXTERNALFILE_ATTR_POS = INTERNALFILE_ATTR_POS + INTERNALFILE_ATTR_SIZE,
 | 
			
		||||
		EXTERNALFILE_ATTR_SIZE = 4,
 | 
			
		||||
		RELATIVEOFFSETLOCALHEADER_POS = EXTERNALFILE_ATTR_POS + EXTERNALFILE_ATTR_SIZE,
 | 
			
		||||
		RELATIVEOFFSETLOCALHEADER_SIZE = 4,
 | 
			
		||||
		FULLHEADER_SIZE = 46
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	char           _rawInfo[FULLHEADER_SIZE];
 | 
			
		||||
	Poco::UInt32   _crc32;
 | 
			
		||||
	Poco::UInt32   _compressedSize;
 | 
			
		||||
	Poco::UInt32   _uncompressedSize;
 | 
			
		||||
	std::string    _fileName;
 | 
			
		||||
	Poco::DateTime _lastModifiedAt;
 | 
			
		||||
	std::string    _extraField;
 | 
			
		||||
	std::string    _fileComment;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getRelativeOffsetOfLocalHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, RELATIVEOFFSETLOCALHEADER_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getCRCFromHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, CRC32_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getCompressedSizeFromHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, COMPRESSED_SIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getUncompressedSizeFromHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, UNCOMPRESSED_SIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::parseDateTime()
 | 
			
		||||
{
 | 
			
		||||
	_lastModifiedAt = ZipUtil::parseDateTime(_rawInfo, LASTMODFILETIME_POS, LASTMODFILEDATE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipCommon::CompressionMethod ZipFileInfo::getCompressionMethod() const
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<ZipCommon::CompressionMethod>(ZipUtil::get16BitValue(_rawInfo, COMPR_METHOD_POS));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipFileInfo::isEncrypted() const
 | 
			
		||||
{
 | 
			
		||||
	// bit 0 indicates encryption
 | 
			
		||||
	return ((ZipUtil::get16BitValue(_rawInfo, GENERAL_PURPOSE_POS) & 0x0001) != 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const Poco::DateTime& ZipFileInfo::lastModifiedAt() const
 | 
			
		||||
{
 | 
			
		||||
	return _lastModifiedAt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getCRC() const
 | 
			
		||||
{
 | 
			
		||||
	return _crc32;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getCompressedSize() const
 | 
			
		||||
{
 | 
			
		||||
	return _compressedSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getUncompressedSize() const
 | 
			
		||||
{
 | 
			
		||||
	return _uncompressedSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const std::string& ZipFileInfo::getFileName() const
 | 
			
		||||
{
 | 
			
		||||
	return _fileName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipFileInfo::isFile() const
 | 
			
		||||
{
 | 
			
		||||
	return !isDirectory();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipFileInfo::isDirectory() const
 | 
			
		||||
{
 | 
			
		||||
	poco_assert_dbg(!_fileName.empty());
 | 
			
		||||
	return getUncompressedSize() == 0 && getCompressionMethod() == ZipCommon::CM_STORE && _fileName[_fileName.length()-1] == '/';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipFileInfo::getFileNameLength() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, FILENAME_LENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipFileInfo::getExtraFieldLength() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, EXTRAFIELD_LENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipFileInfo::hasExtraField() const
 | 
			
		||||
{
 | 
			
		||||
	return getExtraFieldLength() > 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const std::string& ZipFileInfo::getExtraField() const
 | 
			
		||||
{
 | 
			
		||||
	return _extraField;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const std::string& ZipFileInfo::getFileComment() const
 | 
			
		||||
{
 | 
			
		||||
	return _fileComment;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipFileInfo::getFileCommentLength() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, FILECOMMENT_LENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::getVersionMadeBy(int& major, int& minor)
 | 
			
		||||
{
 | 
			
		||||
	major = (_rawInfo[VERSIONMADEBY_POS]/10);
 | 
			
		||||
	minor = (_rawInfo[VERSIONMADEBY_POS]%10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::getRequiredVersion(int& major, int& minor)
 | 
			
		||||
{
 | 
			
		||||
	major = (_rawInfo[VERSION_NEEDED_POS]/10);
 | 
			
		||||
	minor = (_rawInfo[VERSION_NEEDED_POS]%10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipCommon::HostSystem ZipFileInfo::getHostSystem() const
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<ZipCommon::HostSystem>(_rawInfo[VERSION_NEEDED_POS + 1]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipFileInfo::getDiskNumberStart() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawInfo, DISKNUMBERSTART_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipCommon::FileType ZipFileInfo::getFileType() const
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<ZipCommon::FileType>(_rawInfo[INTERNALFILE_ATTR_POS] & 0x01);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getExternalFileAttributes() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawInfo, EXTERNALFILE_ATTR_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipFileInfo::getHeaderSize() const
 | 
			
		||||
{
 | 
			
		||||
	return FULLHEADER_SIZE + getFileNameLength() + getExtraFieldLength() + getFileCommentLength();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setCRC(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	_crc32 = val;
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawInfo, CRC32_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setOffset(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawInfo, RELATIVEOFFSETLOCALHEADER_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setCompressedSize(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	_compressedSize = val;
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawInfo, COMPRESSED_SIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setUncompressedSize(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	_uncompressedSize = val;
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawInfo, UNCOMPRESSED_SIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setCompressionMethod(ZipCommon::CompressionMethod cm)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(static_cast<Poco::UInt16>(cm), _rawInfo, COMPR_METHOD_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setCompressionLevel(ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	// bit 1 and 2 indicate the level
 | 
			
		||||
	Poco::UInt16 val = static_cast<Poco::UInt16>(cl);
 | 
			
		||||
	val <<= 1; 
 | 
			
		||||
	Poco::UInt16 mask = 0xfff9;
 | 
			
		||||
	_rawInfo[GENERAL_PURPOSE_POS] = ((_rawInfo[GENERAL_PURPOSE_POS] & mask) | val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setFileNameLength(Poco::UInt16 size)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(size, _rawInfo, FILENAME_LENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setHostSystem(ZipCommon::HostSystem hs)
 | 
			
		||||
{
 | 
			
		||||
	_rawInfo[VERSIONMADEBY_POS + 1] = static_cast<char>(hs);
 | 
			
		||||
	_rawInfo[VERSION_NEEDED_POS + 1] = static_cast<char>(hs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setRequiredVersion(int major, int minor)
 | 
			
		||||
{
 | 
			
		||||
	poco_assert (minor < 10);
 | 
			
		||||
	poco_assert (major < 24);
 | 
			
		||||
	Poco::UInt8 val = static_cast<unsigned char>(major)*10+static_cast<unsigned char>(minor);
 | 
			
		||||
	_rawInfo[VERSIONMADEBY_POS] = static_cast<char>(val);
 | 
			
		||||
	_rawInfo[VERSION_NEEDED_POS] = static_cast<char>(val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setLastModifiedAt(const Poco::DateTime& dt)
 | 
			
		||||
{
 | 
			
		||||
	_lastModifiedAt = dt;
 | 
			
		||||
	ZipUtil::setDateTime(dt, _rawInfo, LASTMODFILETIME_POS, LASTMODFILEDATE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setEncryption(bool val)
 | 
			
		||||
{
 | 
			
		||||
	if (val)
 | 
			
		||||
		_rawInfo[GENERAL_PURPOSE_POS] |= 0x01;
 | 
			
		||||
	else
 | 
			
		||||
		_rawInfo[GENERAL_PURPOSE_POS] &= 0xfe;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipFileInfo::setFileName(const std::string& str)
 | 
			
		||||
{
 | 
			
		||||
	_fileName = str;
 | 
			
		||||
	setFileNameLength(static_cast<Poco::UInt16>(str.size()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipFileInfo_INCLUDED
 | 
			
		||||
							
								
								
									
										486
									
								
								Zip/include/Poco/Zip/ZipLocalFileHeader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										486
									
								
								Zip/include/Poco/Zip/ZipLocalFileHeader.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,486 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipLocalFileHeader.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipLocalFileHeader.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipLocalFileHeader
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipLocalFileHeader class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipLocalFileHeader_INCLUDED
 | 
			
		||||
#define Zip_ZipLocalFileHeader_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
#include "Poco/DateTime.h"
 | 
			
		||||
#include "Poco/Path.h"
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ParseCallback;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipLocalFileHeader
 | 
			
		||||
	/// Stores a Zip local file header
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static const char HEADER[ZipCommon::HEADER_SIZE];
 | 
			
		||||
 | 
			
		||||
	ZipLocalFileHeader(const Poco::Path& fileName, const Poco::DateTime& lastModifiedAt, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl);
 | 
			
		||||
		/// Creates a zip file header from an absoluteFile. fileName is the name of the file in the zip, outputIsSeekable determines if we write
 | 
			
		||||
		/// CRC and file sizes to the LocalFileHeader or after data compression into a ZipDataInfo
 | 
			
		||||
 | 
			
		||||
	ZipLocalFileHeader(std::istream& inp, bool assumeHeaderRead, ParseCallback& callback);
 | 
			
		||||
		/// Creates the ZipLocalFileHeader by parsing the input stream.
 | 
			
		||||
		/// If assumeHeaderRead is true we assume that the first 4 bytes were already read outside.
 | 
			
		||||
		/// If skipOverDataBlock is true we position the stream after the data block (either at the next FileHeader or the Directory Entry)
 | 
			
		||||
 | 
			
		||||
	virtual ~ZipLocalFileHeader();
 | 
			
		||||
		/// Destroys the ZipLocalFileHeader.
 | 
			
		||||
 | 
			
		||||
	ZipCommon::HostSystem getHostSystem() const;
 | 
			
		||||
 | 
			
		||||
	int getMajorVersionNumber() const;
 | 
			
		||||
 | 
			
		||||
	int getMinorVersionNumber() const;
 | 
			
		||||
 | 
			
		||||
	void getRequiredVersion(int& major, int& minor);
 | 
			
		||||
		/// The minimum version required to extract the data
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getHeaderSize() const;
 | 
			
		||||
		/// Returns the total size of the header including filename + extra field size
 | 
			
		||||
 | 
			
		||||
	void setStartPos(std::streamoff start);
 | 
			
		||||
		/// Sets the start position to start and the end position to start+compressedSize
 | 
			
		||||
 | 
			
		||||
	std::streamoff getStartPos() const;
 | 
			
		||||
		/// Returns the position of the first byte of the header in the file stream
 | 
			
		||||
 | 
			
		||||
	std::streamoff getEndPos() const;
 | 
			
		||||
		/// Points past the last byte of the file entry (ie. either the first byte of the next header, or the directory)
 | 
			
		||||
 | 
			
		||||
	std::streamoff getDataStartPos() const;
 | 
			
		||||
		/// Returns the streamoffset for the very first byte of data. Will be equal to DataEndPos if no data present
 | 
			
		||||
 | 
			
		||||
	std::streamoff getDataEndPos() const;
 | 
			
		||||
 | 
			
		||||
	ZipCommon::CompressionMethod getCompressionMethod() const;
 | 
			
		||||
 | 
			
		||||
	ZipCommon::CompressionLevel getCompressionLevel() const;
 | 
			
		||||
	/// Returns the compression level used. Only valid when the compression method is CM_DEFLATE
 | 
			
		||||
 | 
			
		||||
	bool isEncrypted() const;
 | 
			
		||||
 | 
			
		||||
	const Poco::DateTime& lastModifiedAt() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCRC() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCompressedSize() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getUncompressedSize() const;
 | 
			
		||||
 | 
			
		||||
	void setCRC(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	void setCompressedSize(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	void setUncompressedSize(Poco::UInt32 val);
 | 
			
		||||
 | 
			
		||||
	const std::string& getFileName() const;
 | 
			
		||||
 | 
			
		||||
	bool isFile() const;
 | 
			
		||||
 | 
			
		||||
	bool isDirectory() const;
 | 
			
		||||
 | 
			
		||||
	bool hasExtraField() const;
 | 
			
		||||
 | 
			
		||||
	const std::string& getExtraField() const;
 | 
			
		||||
 | 
			
		||||
	bool hasData() const;
 | 
			
		||||
 | 
			
		||||
	bool searchCRCAndSizesAfterData() const;
 | 
			
		||||
 | 
			
		||||
	void setSearchCRCAndSizesAfterData(bool val);
 | 
			
		||||
 | 
			
		||||
	void setFileName(const std::string& fileName, bool isDirectory);
 | 
			
		||||
 | 
			
		||||
	std::string createHeader() const;
 | 
			
		||||
		/// Creates a header
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void parse(std::istream& inp, bool assumeHeaderRead);
 | 
			
		||||
 | 
			
		||||
	void parseDateTime();
 | 
			
		||||
 | 
			
		||||
	void init(const Poco::Path& fileName, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl);
 | 
			
		||||
 | 
			
		||||
	Poco::UInt16 getFileNameLength() const;
 | 
			
		||||
	
 | 
			
		||||
	Poco::UInt16 getExtraFieldLength() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCRCFromHeader() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getCompressedSizeFromHeader() const;
 | 
			
		||||
 | 
			
		||||
	Poco::UInt32 getUncompressedSizeFromHeader() const;
 | 
			
		||||
 | 
			
		||||
	void setRequiredVersion(int major, int minor);
 | 
			
		||||
 | 
			
		||||
	void setHostSystem(ZipCommon::HostSystem hs);
 | 
			
		||||
 | 
			
		||||
	void setLastModifiedAt(const Poco::DateTime& dt);
 | 
			
		||||
 | 
			
		||||
	void setEncryption(bool val);
 | 
			
		||||
 | 
			
		||||
	void setFileNameLength(Poco::UInt16 size);
 | 
			
		||||
 | 
			
		||||
	void setExtraFieldSize(Poco::UInt16 size);
 | 
			
		||||
 | 
			
		||||
	void setCompressionMethod(ZipCommon::CompressionMethod cm);
 | 
			
		||||
 | 
			
		||||
	void setCompressionLevel(ZipCommon::CompressionLevel cl);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		HEADER_POS = 0,
 | 
			
		||||
		VERSION_SIZE = 2,
 | 
			
		||||
		VERSION_POS = HEADER_POS+ZipCommon::HEADER_SIZE,
 | 
			
		||||
		GENERAL_PURPOSE_SIZE = 2,
 | 
			
		||||
		GENERAL_PURPOSE_POS = VERSION_POS + VERSION_SIZE,
 | 
			
		||||
		COMPR_METHOD_SIZE = 2,
 | 
			
		||||
		COMPR_METHOD_POS = GENERAL_PURPOSE_POS + GENERAL_PURPOSE_SIZE,
 | 
			
		||||
		LASTMODEFILETIME_SIZE = 2,
 | 
			
		||||
		LASTMODEFILETIME_POS = COMPR_METHOD_POS + COMPR_METHOD_SIZE,
 | 
			
		||||
		LASTMODEFILEDATE_SIZE = 2,
 | 
			
		||||
		LASTMODEFILEDATE_POS = LASTMODEFILETIME_POS + LASTMODEFILETIME_SIZE,
 | 
			
		||||
		CRC32_SIZE = 4,
 | 
			
		||||
		CRC32_POS = LASTMODEFILEDATE_POS + LASTMODEFILEDATE_SIZE,
 | 
			
		||||
		COMPRESSEDSIZE_SIZE = 4,
 | 
			
		||||
		COMPRESSEDSIZE_POS = CRC32_POS + CRC32_SIZE,
 | 
			
		||||
		UNCOMPRESSEDSIZE_SIZE = 4,
 | 
			
		||||
		UNCOMPRESSEDSIZE_POS = COMPRESSEDSIZE_POS + COMPRESSEDSIZE_SIZE,
 | 
			
		||||
		FILELENGTH_SIZE = 2,
 | 
			
		||||
		FILELENGTH_POS = UNCOMPRESSEDSIZE_POS + UNCOMPRESSEDSIZE_SIZE,
 | 
			
		||||
		EXTRAFIELD_LENGTH = 2,
 | 
			
		||||
		EXTRAFIELD_POS = FILELENGTH_POS + FILELENGTH_SIZE,
 | 
			
		||||
		FULLHEADER_SIZE = 30
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	char           _rawHeader[FULLHEADER_SIZE];
 | 
			
		||||
	std::streamoff _startPos;
 | 
			
		||||
	std::streamoff _endPos;
 | 
			
		||||
	std::string    _fileName;
 | 
			
		||||
	Poco::DateTime _lastModifiedAt;
 | 
			
		||||
	std::string    _extraField;
 | 
			
		||||
	Poco::UInt32   _crc32;
 | 
			
		||||
	Poco::UInt32   _compressedSize;
 | 
			
		||||
	Poco::UInt32   _uncompressedSize;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setFileNameLength(Poco::UInt16 size)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(size, _rawHeader, FILELENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setExtraFieldSize(Poco::UInt16 size)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(size, _rawHeader, EXTRAFIELD_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipCommon::HostSystem ZipLocalFileHeader::getHostSystem() const
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<ZipCommon::HostSystem>(_rawHeader[VERSION_POS + 1]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setHostSystem(ZipCommon::HostSystem hs)
 | 
			
		||||
{
 | 
			
		||||
	_rawHeader[VERSION_POS + 1] = static_cast<char>(hs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline int ZipLocalFileHeader::getMajorVersionNumber() const
 | 
			
		||||
{
 | 
			
		||||
	return (_rawHeader[VERSION_POS]/10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline int ZipLocalFileHeader::getMinorVersionNumber() const
 | 
			
		||||
{
 | 
			
		||||
	return (_rawHeader[VERSION_POS]%10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::getRequiredVersion(int& major, int& minor)
 | 
			
		||||
{
 | 
			
		||||
	major = getMajorVersionNumber();
 | 
			
		||||
	minor = getMinorVersionNumber();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setRequiredVersion(int major, int minor)
 | 
			
		||||
{
 | 
			
		||||
	poco_assert (minor < 10);
 | 
			
		||||
	poco_assert (major < 24);
 | 
			
		||||
	_rawHeader[VERSION_POS] = static_cast<char>(static_cast<unsigned char>(major)*10+static_cast<unsigned char>(minor));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipLocalFileHeader::getFileNameLength() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawHeader, FILELENGTH_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipLocalFileHeader::getExtraFieldLength() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get16BitValue(_rawHeader, EXTRAFIELD_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getHeaderSize() const
 | 
			
		||||
{
 | 
			
		||||
	return FULLHEADER_SIZE+getExtraFieldLength()+getFileNameLength();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline std::streamoff ZipLocalFileHeader::getStartPos() const
 | 
			
		||||
{
 | 
			
		||||
	return _startPos;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setStartPos(std::streamoff start)
 | 
			
		||||
{
 | 
			
		||||
	_startPos = start;
 | 
			
		||||
	_endPos = start + getHeaderSize()+getCompressedSize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline std::streamoff ZipLocalFileHeader::getEndPos() const
 | 
			
		||||
{
 | 
			
		||||
	return _endPos;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::parseDateTime()
 | 
			
		||||
{
 | 
			
		||||
	_lastModifiedAt = ZipUtil::parseDateTime(_rawHeader, LASTMODEFILETIME_POS, LASTMODEFILEDATE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setLastModifiedAt(const Poco::DateTime& dt)
 | 
			
		||||
{
 | 
			
		||||
	_lastModifiedAt = dt;
 | 
			
		||||
	ZipUtil::setDateTime(dt, _rawHeader, LASTMODEFILETIME_POS, LASTMODEFILEDATE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipCommon::CompressionMethod ZipLocalFileHeader::getCompressionMethod() const
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<ZipCommon::CompressionMethod>(ZipUtil::get16BitValue(_rawHeader, COMPR_METHOD_POS));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline ZipCommon::CompressionLevel ZipLocalFileHeader::getCompressionLevel() const
 | 
			
		||||
{
 | 
			
		||||
	// bit 1 and 2 indicate the level
 | 
			
		||||
	return static_cast<ZipCommon::CompressionLevel>((ZipUtil::get16BitValue(_rawHeader, GENERAL_PURPOSE_POS)>>1) & 0x0003);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setCompressionMethod(ZipCommon::CompressionMethod cm)
 | 
			
		||||
{
 | 
			
		||||
	ZipUtil::set16BitValue(static_cast<Poco::UInt16>(cm), _rawHeader, COMPR_METHOD_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setCompressionLevel(ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	// bit 1 and 2 indicate the level
 | 
			
		||||
	Poco::UInt16 val = static_cast<Poco::UInt16>(cl);
 | 
			
		||||
	val <<= 1; 
 | 
			
		||||
	Poco::UInt16 mask = 0xfff9;
 | 
			
		||||
	_rawHeader[GENERAL_PURPOSE_POS] = ((_rawHeader[GENERAL_PURPOSE_POS] & mask) | val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipLocalFileHeader::isEncrypted() const
 | 
			
		||||
{
 | 
			
		||||
	// bit 0 indicates encryption
 | 
			
		||||
	return ((ZipUtil::get16BitValue(_rawHeader, GENERAL_PURPOSE_POS) & 0x0001) != 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setEncryption(bool val)
 | 
			
		||||
{
 | 
			
		||||
	if (val)
 | 
			
		||||
		_rawHeader[GENERAL_PURPOSE_POS] |= 0x01;
 | 
			
		||||
	else
 | 
			
		||||
		_rawHeader[GENERAL_PURPOSE_POS] &= 0xfe;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setSearchCRCAndSizesAfterData(bool val)
 | 
			
		||||
{
 | 
			
		||||
	//set bit 3 of general purpose reg
 | 
			
		||||
	if (val)
 | 
			
		||||
		_rawHeader[GENERAL_PURPOSE_POS] |= 0x08;
 | 
			
		||||
	else
 | 
			
		||||
		_rawHeader[GENERAL_PURPOSE_POS] &= 0xf7;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const Poco::DateTime& ZipLocalFileHeader::lastModifiedAt() const
 | 
			
		||||
{
 | 
			
		||||
	return _lastModifiedAt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getCRC() const
 | 
			
		||||
{
 | 
			
		||||
	return _crc32;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getCompressedSize() const
 | 
			
		||||
{
 | 
			
		||||
	return _compressedSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getUncompressedSize() const
 | 
			
		||||
{
 | 
			
		||||
	return _uncompressedSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setCRC(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	_crc32 = val;
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawHeader, CRC32_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setCompressedSize(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	_compressedSize = val;
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawHeader, COMPRESSEDSIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipLocalFileHeader::setUncompressedSize(Poco::UInt32 val)
 | 
			
		||||
{
 | 
			
		||||
	_uncompressedSize = val;
 | 
			
		||||
	ZipUtil::set32BitValue(val, _rawHeader, UNCOMPRESSEDSIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getCRCFromHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawHeader, CRC32_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getCompressedSizeFromHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawHeader, COMPRESSEDSIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipLocalFileHeader::getUncompressedSizeFromHeader() const
 | 
			
		||||
{
 | 
			
		||||
	return ZipUtil::get32BitValue(_rawHeader, UNCOMPRESSEDSIZE_POS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const std::string& ZipLocalFileHeader::getFileName() const
 | 
			
		||||
{
 | 
			
		||||
	return _fileName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipLocalFileHeader::isFile() const
 | 
			
		||||
{
 | 
			
		||||
	return !isDirectory();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipLocalFileHeader::isDirectory() const
 | 
			
		||||
{
 | 
			
		||||
	poco_assert_dbg(!_fileName.empty());
 | 
			
		||||
	return getUncompressedSize() == 0 && getCompressionMethod() == ZipCommon::CM_STORE && _fileName[_fileName.length()-1] == '/';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipLocalFileHeader::hasExtraField() const
 | 
			
		||||
{
 | 
			
		||||
	return getExtraFieldLength() > 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const std::string& ZipLocalFileHeader::getExtraField() const
 | 
			
		||||
{
 | 
			
		||||
	return _extraField;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline bool ZipLocalFileHeader::hasData() const
 | 
			
		||||
{
 | 
			
		||||
	return (getCompressedSize() > 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline std::streamoff ZipLocalFileHeader::getDataStartPos() const
 | 
			
		||||
{
 | 
			
		||||
	return getStartPos() + getHeaderSize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline std::streamoff ZipLocalFileHeader::getDataEndPos() const
 | 
			
		||||
{
 | 
			
		||||
	return getDataStartPos()+getCompressedSize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipLocalFileHeader_INCLUDED
 | 
			
		||||
							
								
								
									
										131
									
								
								Zip/include/Poco/Zip/ZipManipulator.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								Zip/include/Poco/Zip/ZipManipulator.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipManipulator.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipManipulator.h#2 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  ZipManipulator
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipManipulator class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipManipulator_INCLUDED
 | 
			
		||||
#define Zip_ZipManipulator_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
#include "Poco/FIFOEvent.h"
 | 
			
		||||
#include "Poco/SharedPtr.h"
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipArchive;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipManipulator
 | 
			
		||||
	/// ZipManipulator allows to add/remove/update files inside zip files
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Poco::FIFOEvent<const ZipLocalFileHeader> EDone;
 | 
			
		||||
		// Fired for each entry once commit is invoked
 | 
			
		||||
 | 
			
		||||
	ZipManipulator(const std::string& zipFile, bool backupOriginalFile);
 | 
			
		||||
		/// Creates the ZipManipulator.
 | 
			
		||||
 | 
			
		||||
	virtual ~ZipManipulator();
 | 
			
		||||
		/// Destroys the ZipManipulator.
 | 
			
		||||
 | 
			
		||||
	void deleteFile(const std::string& zipPath);
 | 
			
		||||
		/// Removes the given file from the Zip archive.
 | 
			
		||||
 | 
			
		||||
	void replaceFile(const std::string& zipPath, const std::string& localPath);
 | 
			
		||||
		/// Replaces the contents of the file in the archive with the contents
 | 
			
		||||
		/// from the file given by localPath.
 | 
			
		||||
 | 
			
		||||
	void renameFile(const std::string& zipPath, const std::string& newZipPath);
 | 
			
		||||
		/// Renames the file in the archive to newZipPath
 | 
			
		||||
 | 
			
		||||
	void addFile(const std::string& zipPath, const std::string& localPath, ZipCommon::CompressionMethod cm = ZipCommon::CM_DEFLATE, ZipCommon::CompressionLevel cl = ZipCommon::CL_MAXIMUM);
 | 
			
		||||
		/// Adds a file to the zip file.
 | 
			
		||||
 | 
			
		||||
	ZipArchive commit();
 | 
			
		||||
		/// Commits all changes and re-creates the Zip File with the changes applied. 
 | 
			
		||||
		/// Returns the ZipArchive for the newly created archive
 | 
			
		||||
		///
 | 
			
		||||
		/// Changes will be first written to a temporary file, 
 | 
			
		||||
		/// then the originalfile will be either deleted or renamed to .bak,
 | 
			
		||||
		/// then, the temp file will be renamed to the original zip file name.
 | 
			
		||||
 | 
			
		||||
	const ZipArchive& originalArchive() const;
 | 
			
		||||
		/// Returns the original archive information
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	const ZipLocalFileHeader& getForChange(const std::string& zipPath) const;
 | 
			
		||||
		/// Searches for the entry given by the zipPath.
 | 
			
		||||
		/// Throws an exception if the entry does not exist
 | 
			
		||||
		/// or if an entry already exists in the Changeslist
 | 
			
		||||
 | 
			
		||||
	void addOperation(const std::string& zipPath, ZipOperation::Ptr ptrOp);
 | 
			
		||||
		/// Adds the operation to the changes list. Throws an exception if an
 | 
			
		||||
		/// entry for the zipPath already exists
 | 
			
		||||
 | 
			
		||||
	void onEDone(const void* pSender, const ZipLocalFileHeader& hdr);
 | 
			
		||||
		/// Forwards the event to the EDone event
 | 
			
		||||
 | 
			
		||||
	ZipArchive compress(const std::string& outFile);
 | 
			
		||||
		/// Compresses the new file to outFile
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	typedef std::map<std::string, ZipOperation::Ptr> Changes;
 | 
			
		||||
 | 
			
		||||
	const std::string _zipFile;
 | 
			
		||||
	bool              _backupOriginalFile;
 | 
			
		||||
	Changes           _changes;
 | 
			
		||||
	Poco::SharedPtr<ZipArchive>        _in;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline const ZipArchive& ZipManipulator::originalArchive() const
 | 
			
		||||
{
 | 
			
		||||
	return *_in;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipManipulator_INCLUDED
 | 
			
		||||
							
								
								
									
										78
									
								
								Zip/include/Poco/Zip/ZipOperation.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								Zip/include/Poco/Zip/ZipOperation.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipOperation.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipOperation.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  ZipOperation
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipOperation class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipOperation_INCLUDED
 | 
			
		||||
#define Zip_ZipOperation_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/RefCountedObject.h"
 | 
			
		||||
#include "Poco/AutoPtr.h"
 | 
			
		||||
#include <ostream>
 | 
			
		||||
#include <istream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Compress;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipOperation: public Poco::RefCountedObject
 | 
			
		||||
	/// Abstract super class for operations on individual zip entries
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	typedef Poco::AutoPtr<ZipOperation> Ptr;
 | 
			
		||||
 | 
			
		||||
	ZipOperation();
 | 
			
		||||
		/// Creates the ZipOperation.
 | 
			
		||||
 | 
			
		||||
	virtual void execute(Compress& c, std::istream& input) = 0;
 | 
			
		||||
		/// Executes the operation
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	virtual ~ZipOperation();
 | 
			
		||||
		/// Destroys the ZipOperation.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipOperation_INCLUDED
 | 
			
		||||
							
								
								
									
										171
									
								
								Zip/include/Poco/Zip/ZipStream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								Zip/include/Poco/Zip/ZipStream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,171 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipStream.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipStream.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipStream
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipStream class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipStream_INCLUDED
 | 
			
		||||
#define Zip_ZipStream_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/PartialStream.h"
 | 
			
		||||
#include "Poco/SharedPtr.h"
 | 
			
		||||
#include "Poco/BufferedStreamBuf.h"
 | 
			
		||||
#include "Poco/Checksum.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipArchive;
 | 
			
		||||
class ZipLocalFileHeader;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipStreamBuf: public Poco::BufferedStreamBuf
 | 
			
		||||
	/// ZipStreamBuf is used to decompress single files from a Zip file.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ZipStreamBuf(std::istream& istr, const ZipLocalFileHeader& fileEntry, bool reposition);
 | 
			
		||||
		/// Creates the ZipStreamBuf. Set reposition to false, if you do on-the-fly decompression.
 | 
			
		||||
	
 | 
			
		||||
	ZipStreamBuf(std::ostream& ostr, ZipLocalFileHeader& fileEntry, bool reposition);
 | 
			
		||||
		/// Creates the ZipStreamBuf. Set reposition to false, if you do on-the-fly compression.
 | 
			
		||||
 | 
			
		||||
	virtual ~ZipStreamBuf();
 | 
			
		||||
		/// Destroys the ZipStreamBuf.
 | 
			
		||||
 | 
			
		||||
	void close();
 | 
			
		||||
		/// Informs a writing outputstream that writing is done for this stream
 | 
			
		||||
 | 
			
		||||
	bool crcValid() const;
 | 
			
		||||
		/// Call this method once all bytes were read from the input stream to determine if the CRC is valid
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	int readFromDevice(char* buffer, std::streamsize length);
 | 
			
		||||
 | 
			
		||||
	int writeToDevice(const char* buffer, std::streamsize length);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		STREAM_BUFFER_SIZE = 1024
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	typedef Poco::SharedPtr<std::istream> PtrIStream;
 | 
			
		||||
	typedef Poco::SharedPtr<std::ostream> PtrOStream;
 | 
			
		||||
	std::istream*  _pIstr;
 | 
			
		||||
	std::ostream*  _pOstr;
 | 
			
		||||
	PtrIStream     _ptrBuf;
 | 
			
		||||
	PtrOStream     _ptrOBuf;
 | 
			
		||||
	PtrIStream     _ptrHelper;
 | 
			
		||||
	Poco::SharedPtr<PartialOutputStream> _ptrOHelper;
 | 
			
		||||
	Poco::Checksum _crc32;
 | 
			
		||||
	Poco::UInt32   _expectedCrc32;
 | 
			
		||||
	bool           _checkCRC;
 | 
			
		||||
		/// Note: we do not check crc if we decompress a streaming zip file and the crc is stored in the directory header
 | 
			
		||||
	Poco::UInt32   _bytesWritten;
 | 
			
		||||
	ZipLocalFileHeader* _pHeader;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipIOS: public virtual std::ios
 | 
			
		||||
	/// The base class for ZipInputStream and ZipOutputStream.
 | 
			
		||||
	///
 | 
			
		||||
	/// This class is needed to ensure the correct initialization
 | 
			
		||||
	/// order of the stream buffer and base classes.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ZipIOS(std::istream& istr, const ZipLocalFileHeader& fileEntry, bool reposition);
 | 
			
		||||
		/// Creates the basic stream and connects it
 | 
			
		||||
		/// to the given input stream.
 | 
			
		||||
 | 
			
		||||
	ZipIOS(std::ostream& ostr, ZipLocalFileHeader& fileEntry, bool reposition);
 | 
			
		||||
		/// Creates the basic stream and connects it
 | 
			
		||||
		/// to the given output stream.
 | 
			
		||||
 | 
			
		||||
	~ZipIOS();
 | 
			
		||||
		/// Destroys the stream.
 | 
			
		||||
 | 
			
		||||
	ZipStreamBuf* rdbuf();
 | 
			
		||||
		/// Returns a pointer to the underlying streambuf.
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	ZipStreamBuf _buf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipInputStream: public ZipIOS, public std::istream
 | 
			
		||||
	/// This stream copies all characters read through it
 | 
			
		||||
	/// to one or multiple output streams.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ZipInputStream(std::istream& istr, const ZipLocalFileHeader& fileEntry, bool reposition = true);
 | 
			
		||||
		/// Creates the ZipInputStream and connects it
 | 
			
		||||
		/// to the given input stream.
 | 
			
		||||
 | 
			
		||||
	~ZipInputStream();
 | 
			
		||||
		/// Destroys the ZipInputStream.
 | 
			
		||||
 | 
			
		||||
	bool crcValid() const;
 | 
			
		||||
		/// Call this method once all bytes were read from the input stream to determine if the CRC is valid
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Zip_API ZipOutputStream: public ZipIOS, public std::ostream
 | 
			
		||||
	/// This stream compresses all characters written through it
 | 
			
		||||
	/// to one output stream.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ZipOutputStream(std::ostream& ostr, ZipLocalFileHeader& fileEntry, bool seekableOutput);
 | 
			
		||||
		/// Creates the ZipOutputStream and connects it
 | 
			
		||||
		/// to the given output stream.
 | 
			
		||||
 | 
			
		||||
	~ZipOutputStream();
 | 
			
		||||
		/// Destroys the ZipOutputStream.
 | 
			
		||||
 | 
			
		||||
	void close();
 | 
			
		||||
		/// Must be called for ZipOutputStreams!
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipStream_INCLUDED
 | 
			
		||||
							
								
								
									
										119
									
								
								Zip/include/Poco/Zip/ZipUtil.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								Zip/include/Poco/Zip/ZipUtil.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipUtil.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/include/Poco/Zip/ZipUtil.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipUtil
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipUtil class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef Zip_ZipUtil_INCLUDED
 | 
			
		||||
#define Zip_ZipUtil_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
#include "Poco/DateTime.h"
 | 
			
		||||
#include "Poco/Path.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipUtil
 | 
			
		||||
	/// A utility class used for parsing header information inside of zip files
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static Poco::UInt16 get16BitValue(const char* pVal, const Poco::UInt32 pos);
 | 
			
		||||
 | 
			
		||||
	static Poco::UInt32 get32BitValue(const char* pVal, const Poco::UInt32 pos);
 | 
			
		||||
 | 
			
		||||
	static void set16BitValue(const Poco::UInt16 val, char* pVal, const Poco::UInt32 pos);
 | 
			
		||||
 | 
			
		||||
	static void set32BitValue(const Poco::UInt32 val, char* pVal, const Poco::UInt32 pos);
 | 
			
		||||
 | 
			
		||||
	static Poco::DateTime parseDateTime(const char* pVal, const Poco::UInt32 timePos, const Poco::UInt32 datePos);
 | 
			
		||||
 | 
			
		||||
	static void setDateTime(const Poco::DateTime& dt, char* pVal, const Poco::UInt32 timePos, const Poco::UInt32 datePos);
 | 
			
		||||
 | 
			
		||||
	static std::string fakeZLibInitString(ZipCommon::CompressionLevel cl);
 | 
			
		||||
 | 
			
		||||
	static void sync(std::istream& in);
 | 
			
		||||
		/// Searches the next valid header in the input stream, stops right before it
 | 
			
		||||
 | 
			
		||||
	static void verifyZipEntryFileName(const std::string& zipPath);
 | 
			
		||||
		/// Verifies that the name of the ZipEntry is a valid path
 | 
			
		||||
 | 
			
		||||
	static std::string validZipEntryFileName(const Poco::Path& entry);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	ZipUtil();
 | 
			
		||||
	~ZipUtil();
 | 
			
		||||
	ZipUtil(const ZipUtil&);
 | 
			
		||||
	ZipUtil& operator=(const ZipUtil&);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt16 ZipUtil::get16BitValue(const char* pVal, const Poco::UInt32 pos)
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<Poco::UInt16>((unsigned char)pVal[pos])+ (static_cast<Poco::UInt16>((unsigned char)pVal[pos+1]) << 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline Poco::UInt32 ZipUtil::get32BitValue(const char* pVal, const Poco::UInt32 pos)
 | 
			
		||||
{
 | 
			
		||||
	return static_cast<Poco::UInt32>((unsigned char)pVal[pos])+ (static_cast<Poco::UInt32>((unsigned char)pVal[pos+1]) << 8)+
 | 
			
		||||
		(static_cast<Poco::UInt32>((unsigned char)pVal[pos+2]) << 16) + (static_cast<Poco::UInt32>((unsigned char)pVal[pos+3]) << 24);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipUtil::set16BitValue(const Poco::UInt16 val, char* pVal, const Poco::UInt32 pos)
 | 
			
		||||
{
 | 
			
		||||
	pVal[pos] = static_cast<char>(val);
 | 
			
		||||
	pVal[pos+1] = static_cast<char>(val>>8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline void ZipUtil::set32BitValue(const Poco::UInt32 val, char* pVal, const Poco::UInt32 pos)
 | 
			
		||||
{
 | 
			
		||||
	pVal[pos] = static_cast<char>(val);
 | 
			
		||||
	pVal[pos+1] = static_cast<char>(val>>8);
 | 
			
		||||
	pVal[pos+2] = static_cast<char>(val>>16);
 | 
			
		||||
	pVal[pos+3] = static_cast<char>(val>>24);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // Zip_ZipUtil_INCLUDED
 | 
			
		||||
							
								
								
									
										13
									
								
								Zip/samples/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Zip/samples/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/samples/Makefile#1 $
 | 
			
		||||
#
 | 
			
		||||
# Makefile for Poco Util Samples
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
.PHONY: projects
 | 
			
		||||
clean all: projects
 | 
			
		||||
projects:
 | 
			
		||||
	$(MAKE) -C unzip $(MAKECMDGOALS)
 | 
			
		||||
	$(MAKE) -C zip $(MAKECMDGOALS)
 | 
			
		||||
							
								
								
									
										39
									
								
								Zip/samples/samples_vs71.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Zip/samples/samples_vs71.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 8.00
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unzip", "unzip\unzip_vs71.vcproj", "{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zip", "zip\zip_vs71.vcproj", "{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfiguration) = preSolution
 | 
			
		||||
		debug_shared = debug_shared
 | 
			
		||||
		debug_static = debug_static
 | 
			
		||||
		release_shared = release_shared
 | 
			
		||||
		release_static = release_static
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfiguration) = postSolution
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_shared.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_shared.Build.0 = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_static.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_static.Build.0 = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_shared.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_shared.Build.0 = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_static.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_static.Build.0 = release_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_shared.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_shared.Build.0 = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_static.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_static.Build.0 = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_shared.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_shared.Build.0 = release_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_static.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_static.Build.0 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityGlobals) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityAddIns) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										25
									
								
								Zip/samples/samples_vs80.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Zip/samples/samples_vs80.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 9.00
 | 
			
		||||
# Visual Studio 2005
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zip", "zip\zip_vs80.vcproj", "{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unzip", "unzip\unzip_vs80.vcproj", "{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		debug_shared|Win32 = debug_shared|Win32
 | 
			
		||||
		release_shared|Win32 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										25
									
								
								Zip/samples/samples_vs90.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Zip/samples/samples_vs90.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 10.00
 | 
			
		||||
# Visual Studio 2008
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zip", "zip\zip_vs90.vcproj", "{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unzip", "unzip\unzip_vs90.vcproj", "{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		debug_shared|Win32 = debug_shared|Win32
 | 
			
		||||
		release_shared|Win32 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.debug_shared|Win32.Build.0 = debug_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_shared|Win32.ActiveCfg = release_shared|Win32
 | 
			
		||||
		{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}.release_shared|Win32.Build.0 = release_shared|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										17
									
								
								Zip/samples/unzip/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Zip/samples/unzip/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/samples/unzip/Makefile#1 $
 | 
			
		||||
#
 | 
			
		||||
# Makefile for Poco SampleServer
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/global
 | 
			
		||||
 | 
			
		||||
objects = unzip
 | 
			
		||||
 | 
			
		||||
target         = unzip
 | 
			
		||||
target_version = 1
 | 
			
		||||
target_libs    = PocoZip PocoUtil PocoXML PocoFoundation
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/exec
 | 
			
		||||
							
								
								
									
										182
									
								
								Zip/samples/unzip/src/unzip.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								Zip/samples/unzip/src/unzip.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
//
 | 
			
		||||
// unzip.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/samples/unzip/src/unzip.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// This sample demonstrates the Decompress class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Util/Application.h"
 | 
			
		||||
#include "Poco/Util/Option.h"
 | 
			
		||||
#include "Poco/Util/OptionSet.h"
 | 
			
		||||
#include "Poco/Util/HelpFormatter.h"
 | 
			
		||||
#include "Poco/Util/AbstractConfiguration.h"
 | 
			
		||||
#include "Poco/AutoPtr.h"
 | 
			
		||||
#include "Poco/Zip/Decompress.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/Path.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include "Poco/Delegate.h"
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using Poco::Util::Application;
 | 
			
		||||
using Poco::Util::Option;
 | 
			
		||||
using Poco::Util::OptionSet;
 | 
			
		||||
using Poco::Util::HelpFormatter;
 | 
			
		||||
using Poco::Util::AbstractConfiguration;
 | 
			
		||||
using Poco::Util::OptionCallback;
 | 
			
		||||
using Poco::Zip::ZipLocalFileHeader;
 | 
			
		||||
using Poco::AutoPtr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DecompressHandler
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	DecompressHandler()
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	~DecompressHandler()
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void onError(const void*, std::pair<const ZipLocalFileHeader, const std::string>& info)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Util::Application::instance().logger().error("ERR: " + info.second);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void onOk(const void*, std::pair<const ZipLocalFileHeader, const Poco::Path>& info)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Util::Application::instance().logger().information("OK: " + info.second.toString(Poco::Path::PATH_UNIX));
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UnzipApp: public Application
 | 
			
		||||
	/// This sample demonstrates some of the features of the Util::Application class,
 | 
			
		||||
	/// such as configuration file handling and command line arguments processing.
 | 
			
		||||
	///
 | 
			
		||||
	/// Try zip --help (on Unix platforms) or zip /help (elsewhere) for
 | 
			
		||||
	/// more information.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	UnzipApp(): _helpRequested(false)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
protected:	
 | 
			
		||||
	void initialize(Application& self)
 | 
			
		||||
	{
 | 
			
		||||
		loadConfiguration(); // load default configuration files, if present
 | 
			
		||||
		Application::initialize(self);
 | 
			
		||||
		// add your own initialization code here
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void uninitialize()
 | 
			
		||||
	{
 | 
			
		||||
		// add your own uninitialization code here
 | 
			
		||||
		Application::uninitialize();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void reinitialize(Application& self)
 | 
			
		||||
	{
 | 
			
		||||
		Application::reinitialize(self);
 | 
			
		||||
		// add your own reinitialization code here
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void defineOptions(OptionSet& options)
 | 
			
		||||
	{
 | 
			
		||||
		Application::defineOptions(options);
 | 
			
		||||
 | 
			
		||||
		options.addOption(
 | 
			
		||||
			Option("help", "h", "display help information on command line arguments")
 | 
			
		||||
				.required(false)
 | 
			
		||||
				.repeatable(false)
 | 
			
		||||
				.callback(OptionCallback<UnzipApp>(this, &UnzipApp::handleHelp)));
 | 
			
		||||
 | 
			
		||||
		options.addOption(
 | 
			
		||||
			Option("file", "f", "specifies the input zip file")
 | 
			
		||||
				.required(true)
 | 
			
		||||
				.repeatable(false)
 | 
			
		||||
				.argument("filename")
 | 
			
		||||
				.callback(OptionCallback<UnzipApp>(this, &UnzipApp::handleFile)));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void handleHelp(const std::string& name, const std::string& value)
 | 
			
		||||
	{
 | 
			
		||||
		_helpRequested = true;
 | 
			
		||||
		displayHelp();
 | 
			
		||||
		stopOptionsProcessing();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void handleFile(const std::string& name, const std::string& value)
 | 
			
		||||
	{
 | 
			
		||||
		_zipFile = value;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void displayHelp()
 | 
			
		||||
	{
 | 
			
		||||
		HelpFormatter helpFormatter(options());
 | 
			
		||||
		helpFormatter.setCommand(commandName());
 | 
			
		||||
		helpFormatter.setUsage("OPTIONS outdir");
 | 
			
		||||
		helpFormatter.setHeader("A application that demonstrates usage of Poco::Zip::Decompress class.");
 | 
			
		||||
		helpFormatter.format(std::cout);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	int main(const std::vector<std::string>& args)
 | 
			
		||||
	{
 | 
			
		||||
		if (!_helpRequested)
 | 
			
		||||
		{
 | 
			
		||||
			Poco::Path outputDir;
 | 
			
		||||
			if (!args.empty())
 | 
			
		||||
				outputDir.parseDirectory(args[0]);
 | 
			
		||||
 | 
			
		||||
			std::ifstream in(_zipFile.c_str(), std::ios::binary);
 | 
			
		||||
			Poco::Zip::Decompress c(in, outputDir);
 | 
			
		||||
			DecompressHandler handler;
 | 
			
		||||
			c.EError += Poco::Delegate<DecompressHandler, std::pair<const ZipLocalFileHeader, const std::string> >(&handler, &DecompressHandler::onError);
 | 
			
		||||
			c.EOk +=Poco::Delegate<DecompressHandler, std::pair<const ZipLocalFileHeader, const Poco::Path> >(&handler, &DecompressHandler::onOk);
 | 
			
		||||
			c.decompressAllFiles();
 | 
			
		||||
			c.EError -= Poco::Delegate<DecompressHandler, std::pair<const ZipLocalFileHeader, const std::string> >(&handler, &DecompressHandler::onError);
 | 
			
		||||
			c.EOk -=Poco::Delegate<DecompressHandler, std::pair<const ZipLocalFileHeader, const Poco::Path> >(&handler, &DecompressHandler::onOk);
 | 
			
		||||
		}
 | 
			
		||||
		return Application::EXIT_OK;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
private:
 | 
			
		||||
	bool _helpRequested;
 | 
			
		||||
	std::string _zipFile;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
POCO_APP_MAIN(UnzipApp)
 | 
			
		||||
							
								
								
									
										149
									
								
								Zip/samples/unzip/unzip_vs71.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								Zip/samples/unzip/unzip_vs71.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="unzip"
 | 
			
		||||
	ProjectGUID="{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Zip\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="TRUE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib PocoXMLd.lib PocoUtild.lib PocoZipd.lib"
 | 
			
		||||
				OutputFile="bin/unzipd.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="bin/unzipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="TRUE"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="TRUE"
 | 
			
		||||
				OptimizeForWindowsApplication="TRUE"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Zip\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="TRUE"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="FALSE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib PocoXML.lib PocoUtil.lib PocoZip.lib"
 | 
			
		||||
				OutputFile="bin/unzip.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="FALSE"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="">
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath=".\src\unzip.cpp">
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										213
									
								
								Zip/samples/unzip/unzip_vs80.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								Zip/samples/unzip/unzip_vs80.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,213 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="8,00"
 | 
			
		||||
	Name="unzip"
 | 
			
		||||
	ProjectGUID="{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib PocoXMLd.lib PocoUtild.lib PocoZipd.lib"
 | 
			
		||||
				OutputFile="bin/unzipd.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="bin/unzipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="3"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib PocoXML.lib PocoUtil.lib PocoZip.lib"
 | 
			
		||||
				OutputFile="bin/unzip.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			>
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath=".\src\unzip.cpp"
 | 
			
		||||
				>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										213
									
								
								Zip/samples/unzip/unzip_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								Zip/samples/unzip/unzip_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,213 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="9.00"
 | 
			
		||||
	Name="unzip"
 | 
			
		||||
	ProjectGUID="{0CFFC7B0-04F4-4A60-B6E4-84D78EDA2C73}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib PocoXMLd.lib PocoUtild.lib PocoZipd.lib"
 | 
			
		||||
				OutputFile="bin/unzipd.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="bin/unzipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="3"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib PocoXML.lib PocoUtil.lib PocoZip.lib"
 | 
			
		||||
				OutputFile="bin/unzip.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			>
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath=".\src\unzip.cpp"
 | 
			
		||||
				>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										17
									
								
								Zip/samples/zip/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Zip/samples/zip/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/samples/zip/Makefile#1 $
 | 
			
		||||
#
 | 
			
		||||
# Makefile for Poco SampleApp
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/global
 | 
			
		||||
 | 
			
		||||
objects = zip
 | 
			
		||||
 | 
			
		||||
target         = zip
 | 
			
		||||
target_version = 1
 | 
			
		||||
target_libs    = PocoZip PocoUtil PocoXML PocoFoundation
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/exec
 | 
			
		||||
							
								
								
									
										183
									
								
								Zip/samples/zip/src/zip.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								Zip/samples/zip/src/zip.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,183 @@
 | 
			
		||||
//
 | 
			
		||||
// zip.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/samples/zip/src/zip.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// This sample demonstrates the Compress class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Util/Application.h"
 | 
			
		||||
#include "Poco/Util/Option.h"
 | 
			
		||||
#include "Poco/Util/OptionSet.h"
 | 
			
		||||
#include "Poco/Util/HelpFormatter.h"
 | 
			
		||||
#include "Poco/Util/AbstractConfiguration.h"
 | 
			
		||||
#include "Poco/AutoPtr.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
#include "Poco/Path.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include "Poco/Delegate.h"
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using Poco::Util::Application;
 | 
			
		||||
using Poco::Util::Option;
 | 
			
		||||
using Poco::Util::OptionSet;
 | 
			
		||||
using Poco::Util::HelpFormatter;
 | 
			
		||||
using Poco::Util::AbstractConfiguration;
 | 
			
		||||
using Poco::Util::OptionCallback;
 | 
			
		||||
using Poco::AutoPtr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipApp: public Application
 | 
			
		||||
	/// This sample demonstrates some of the features of the Util::Application class,
 | 
			
		||||
	/// such as configuration file handling and command line arguments processing.
 | 
			
		||||
	///
 | 
			
		||||
	/// Try zip --help (on Unix platforms) or zip /help (elsewhere) for
 | 
			
		||||
	/// more information.
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ZipApp(): _helpRequested(false)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
protected:	
 | 
			
		||||
	void initialize(Application& self)
 | 
			
		||||
	{
 | 
			
		||||
		loadConfiguration(); // load default configuration files, if present
 | 
			
		||||
		Application::initialize(self);
 | 
			
		||||
		// add your own initialization code here
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void uninitialize()
 | 
			
		||||
	{
 | 
			
		||||
		// add your own uninitialization code here
 | 
			
		||||
		Application::uninitialize();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void reinitialize(Application& self)
 | 
			
		||||
	{
 | 
			
		||||
		Application::reinitialize(self);
 | 
			
		||||
		// add your own reinitialization code here
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void defineOptions(OptionSet& options)
 | 
			
		||||
	{
 | 
			
		||||
		Application::defineOptions(options);
 | 
			
		||||
 | 
			
		||||
		options.addOption(
 | 
			
		||||
			Option("help", "h", "display help information on command line arguments")
 | 
			
		||||
				.required(false)
 | 
			
		||||
				.repeatable(false)
 | 
			
		||||
				.callback(OptionCallback<ZipApp>(this, &ZipApp::handleHelp)));
 | 
			
		||||
 | 
			
		||||
		options.addOption(
 | 
			
		||||
			Option("file", "f", "specifies the output zip file")
 | 
			
		||||
				.required(true)
 | 
			
		||||
				.repeatable(false)
 | 
			
		||||
				.argument("filename")
 | 
			
		||||
				.callback(OptionCallback<ZipApp>(this, &ZipApp::handleFile)));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void handleHelp(const std::string& name, const std::string& value)
 | 
			
		||||
	{
 | 
			
		||||
		_helpRequested = true;
 | 
			
		||||
		displayHelp();
 | 
			
		||||
		stopOptionsProcessing();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void handleFile(const std::string& name, const std::string& value)
 | 
			
		||||
	{
 | 
			
		||||
		_outFile = value;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void displayHelp()
 | 
			
		||||
	{
 | 
			
		||||
		HelpFormatter helpFormatter(options());
 | 
			
		||||
		helpFormatter.setCommand(commandName());
 | 
			
		||||
		helpFormatter.setUsage("OPTIONS <set of input files>");
 | 
			
		||||
		helpFormatter.setHeader("A application that demonstrates usage of Poco::Zip::Compress class.");
 | 
			
		||||
		helpFormatter.format(std::cout);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void onDone(const void*, const Poco::Zip::ZipLocalFileHeader& hdr)
 | 
			
		||||
	{
 | 
			
		||||
		logger().information("DONE: " + hdr.getFileName());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int main(const std::vector<std::string>& args)
 | 
			
		||||
	{
 | 
			
		||||
		if (!_helpRequested)
 | 
			
		||||
		{
 | 
			
		||||
			if (args.empty())
 | 
			
		||||
			{
 | 
			
		||||
				logger().warning("No input files specified for compression");
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				std::ofstream out(_outFile.c_str(), std::ios::binary);
 | 
			
		||||
				Poco::Zip::Compress c(out, true);
 | 
			
		||||
				c.EDone += Poco::Delegate<ZipApp, const Poco::Zip::ZipLocalFileHeader>(this, &ZipApp::onDone);
 | 
			
		||||
				for (std::vector<std::string>::const_iterator it = args.begin(); it != args.end(); ++it)
 | 
			
		||||
				{
 | 
			
		||||
					// no WILDCARD support!
 | 
			
		||||
					Poco::File aFile(*it);
 | 
			
		||||
					if (!aFile.exists())
 | 
			
		||||
					{
 | 
			
		||||
						logger().error("File not found: " + *it);
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						Poco::Path anEntry(*it);
 | 
			
		||||
						if (aFile.isDirectory())
 | 
			
		||||
						{
 | 
			
		||||
							anEntry.makeDirectory();
 | 
			
		||||
							c.addRecursive(anEntry, Poco::Zip::ZipCommon::CL_MAXIMUM, (args.size() != 1)); // add root if we have more than one entry
 | 
			
		||||
						}
 | 
			
		||||
						else
 | 
			
		||||
						{
 | 
			
		||||
							anEntry.makeFile();
 | 
			
		||||
							c.addFile(anEntry, anEntry);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				c.close();
 | 
			
		||||
				c.EDone -= Poco::Delegate<ZipApp, const Poco::Zip::ZipLocalFileHeader>(this, &ZipApp::onDone);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return Application::EXIT_OK;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
private:
 | 
			
		||||
	bool _helpRequested;
 | 
			
		||||
	std::string _outFile;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
POCO_APP_MAIN(ZipApp)
 | 
			
		||||
							
								
								
									
										145
									
								
								Zip/samples/zip/zip_vs71.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								Zip/samples/zip/zip_vs71.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,145 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="zip"
 | 
			
		||||
	ProjectGUID="{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Zip\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="TRUE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib PocoXMLd.lib PocoUtild.lib PocoZipd.lib"
 | 
			
		||||
				OutputFile="bin/zipd.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="bin/zipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="TRUE"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="TRUE"
 | 
			
		||||
				OptimizeForWindowsApplication="TRUE"
 | 
			
		||||
				AdditionalIncludeDirectories=".\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Zip\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="TRUE"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="FALSE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib PocoXML.lib PocoUtil.lib PocoZip.lib"
 | 
			
		||||
				OutputFile="bin/zip.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="FALSE"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath=".\src\zip.cpp">
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										209
									
								
								Zip/samples/zip/zip_vs80.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								Zip/samples/zip/zip_vs80.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="8,00"
 | 
			
		||||
	Name="zip"
 | 
			
		||||
	ProjectGUID="{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib PocoXMLd.lib PocoUtild.lib PocoZipd.lib"
 | 
			
		||||
				OutputFile="bin/zipd.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="bin/zipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="3"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib PocoXML.lib PocoUtil.lib PocoZip.lib"
 | 
			
		||||
				OutputFile="bin/zip.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			>
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath=".\src\zip.cpp"
 | 
			
		||||
				>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										209
									
								
								Zip/samples/zip/zip_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								Zip/samples/zip/zip_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="9.00"
 | 
			
		||||
	Name="zip"
 | 
			
		||||
	ProjectGUID="{73408DCF-2E65-47AF-BF38-7466DAB8D5CB}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundationd.lib PocoXMLd.lib PocoUtild.lib PocoZipd.lib"
 | 
			
		||||
				OutputFile="bin/zipd.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="bin/zipd.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="3"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="PocoFoundation.lib PocoXML.lib PocoUtil.lib PocoZip.lib"
 | 
			
		||||
				OutputFile="bin/zip.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			>
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath=".\src\zip.cpp"
 | 
			
		||||
				>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										60
									
								
								Zip/src/Add.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Zip/src/Add.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
//
 | 
			
		||||
// Add.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Add.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Add
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Add.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Add::Add(const std::string& zipPath, const std::string& localPath, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl):
 | 
			
		||||
	_zipPath(zipPath),
 | 
			
		||||
	_localPath(localPath),
 | 
			
		||||
	_cm(cm),
 | 
			
		||||
	_cl(cl)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Add::execute(Compress& c, std::istream& input)
 | 
			
		||||
{
 | 
			
		||||
	c.addFile(Poco::Path(_localPath), Poco::Path(_zipPath), _cm, _cl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										252
									
								
								Zip/src/AutoDetectStream.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								Zip/src/AutoDetectStream.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,252 @@
 | 
			
		||||
//
 | 
			
		||||
// AutoDetectStream.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/AutoDetectStream.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  AutoDetectStream
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/AutoDetectStream.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchiveInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipDataInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipFileInfo.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectStreamBuf::AutoDetectStreamBuf(std::istream& in, const std::string& pre, const std::string& post, bool reposition, Poco::UInt32 start):
 | 
			
		||||
	Poco::BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::in),
 | 
			
		||||
	_pIstr(&in),
 | 
			
		||||
	_pOstr(0),
 | 
			
		||||
	_eofDetected(false),
 | 
			
		||||
	_matchCnt(0),
 | 
			
		||||
	_prefix(pre),
 | 
			
		||||
	_postfix(post),
 | 
			
		||||
	_reposition(reposition),
 | 
			
		||||
	_start(start)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectStreamBuf::AutoDetectStreamBuf(std::ostream& out):
 | 
			
		||||
	Poco::BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::out),
 | 
			
		||||
	_pIstr(0),
 | 
			
		||||
	_pOstr(&out),
 | 
			
		||||
	_eofDetected(false),
 | 
			
		||||
	_matchCnt(0),
 | 
			
		||||
	_prefix(),
 | 
			
		||||
	_postfix(),
 | 
			
		||||
	_reposition(false),
 | 
			
		||||
	_start(0u)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectStreamBuf::~AutoDetectStreamBuf()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int AutoDetectStreamBuf::readFromDevice(char* buffer, std::streamsize length)
 | 
			
		||||
{
 | 
			
		||||
	poco_assert_dbg(length >= 8);
 | 
			
		||||
	if (_pIstr == 0 ||length == 0) return -1;
 | 
			
		||||
 | 
			
		||||
	if (_reposition)
 | 
			
		||||
	{
 | 
			
		||||
		_pIstr->seekg(_start, std::ios_base::beg);
 | 
			
		||||
		_reposition = false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!_prefix.empty())
 | 
			
		||||
	{
 | 
			
		||||
		std::streamsize tmp = (_prefix.size() > length)? length: static_cast<std::streamsize>(_prefix.size());
 | 
			
		||||
		std::memcpy(buffer, _prefix.c_str(), tmp);
 | 
			
		||||
		_prefix = _prefix.substr(tmp);
 | 
			
		||||
		return tmp;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (_eofDetected)
 | 
			
		||||
	{
 | 
			
		||||
		if (!_postfix.empty())
 | 
			
		||||
		{
 | 
			
		||||
			std::streamsize tmp = (_postfix.size() > length)? length: static_cast<std::streamsize>(_postfix.size());
 | 
			
		||||
			std::memcpy(buffer, _postfix.c_str(), tmp);
 | 
			
		||||
			_postfix = _postfix.substr(tmp);
 | 
			
		||||
			return tmp;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!_pIstr->good())
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	char byte3('\x00');
 | 
			
		||||
	std::streamsize tempPos = 0;
 | 
			
		||||
	static std::istream::int_type eof = std::istream::traits_type::eof();
 | 
			
		||||
	while (_pIstr->good() && !_pIstr->eof() && (tempPos+4) < length)
 | 
			
		||||
	{ 
 | 
			
		||||
		std::istream::int_type c = _pIstr->get();
 | 
			
		||||
		if (c != eof)
 | 
			
		||||
		{
 | 
			
		||||
			// all zip headers start with the same 2byte prefix
 | 
			
		||||
			if (_matchCnt<2)
 | 
			
		||||
			{
 | 
			
		||||
				if (c == ZipLocalFileHeader::HEADER[_matchCnt])
 | 
			
		||||
					++_matchCnt;
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					// matchcnt was either 0 or 1 the headers have all unique chars -> safe to set to 0
 | 
			
		||||
					if (_matchCnt == 1)
 | 
			
		||||
					{
 | 
			
		||||
						buffer[tempPos++] = ZipLocalFileHeader::HEADER[0];
 | 
			
		||||
					}
 | 
			
		||||
					_matchCnt = 0;
 | 
			
		||||
 | 
			
		||||
					buffer[tempPos++] = static_cast<char>(c);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				//the upper 2 bytes differ: the lower one must be in range 1,3,5,7, the upper must be one larger: 2,4,6,8
 | 
			
		||||
				if (_matchCnt == 2)
 | 
			
		||||
				{
 | 
			
		||||
					if (ZipLocalFileHeader::HEADER[2] == c || 
 | 
			
		||||
						ZipArchiveInfo::HEADER[2] == c || 
 | 
			
		||||
						ZipFileInfo::HEADER[2] == c || 
 | 
			
		||||
						ZipDataInfo::HEADER[2] == c)
 | 
			
		||||
					{
 | 
			
		||||
						byte3 = static_cast<char>(c);;
 | 
			
		||||
						_matchCnt++; 
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						buffer[tempPos++] = ZipLocalFileHeader::HEADER[0];
 | 
			
		||||
						buffer[tempPos++] = ZipLocalFileHeader::HEADER[1];
 | 
			
		||||
						buffer[tempPos++] = static_cast<char>(c);
 | 
			
		||||
						_matchCnt = 0;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				else if (_matchCnt == 3)
 | 
			
		||||
				{
 | 
			
		||||
					if (c-1 == byte3)
 | 
			
		||||
					{
 | 
			
		||||
						// a match, pushback
 | 
			
		||||
						_pIstr->putback(c);
 | 
			
		||||
						_pIstr->putback(byte3);
 | 
			
		||||
						_pIstr->putback(ZipLocalFileHeader::HEADER[1]);
 | 
			
		||||
						_pIstr->putback(ZipLocalFileHeader::HEADER[0]);
 | 
			
		||||
						_eofDetected = true;
 | 
			
		||||
						return tempPos;
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						buffer[tempPos++] = ZipLocalFileHeader::HEADER[0];
 | 
			
		||||
						buffer[tempPos++] = ZipLocalFileHeader::HEADER[1];
 | 
			
		||||
						buffer[tempPos++] = byte3;
 | 
			
		||||
						buffer[tempPos++] = c;
 | 
			
		||||
						_matchCnt = 0; //the headers have all unique chars -> safe to set to 0
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return tempPos;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int AutoDetectStreamBuf::writeToDevice(const char* buffer, std::streamsize length)
 | 
			
		||||
{
 | 
			
		||||
	if (_pOstr == 0 || length == 0) return -1;
 | 
			
		||||
	_pOstr->write(buffer, length);
 | 
			
		||||
	if (_pOstr->good())
 | 
			
		||||
		return length;
 | 
			
		||||
	throw Poco::IOException("Failed to write to output stream");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectIOS::AutoDetectIOS(std::istream& istr, const std::string& pre, const std::string& post, bool reposition, Poco::UInt32 start):
 | 
			
		||||
	_buf(istr, pre, post, reposition, start)
 | 
			
		||||
{
 | 
			
		||||
	poco_ios_init(&_buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectIOS::AutoDetectIOS(std::ostream& ostr): _buf(ostr)
 | 
			
		||||
{
 | 
			
		||||
	poco_ios_init(&_buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectIOS::~AutoDetectIOS()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectStreamBuf* AutoDetectIOS::rdbuf()
 | 
			
		||||
{
 | 
			
		||||
	return &_buf;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectInputStream::AutoDetectInputStream(std::istream& istr, const std::string& pre, const std::string& post, bool reposition, Poco::UInt32 start):
 | 
			
		||||
	AutoDetectIOS(istr, pre, post, reposition, start),
 | 
			
		||||
	std::istream(&_buf)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectInputStream::~AutoDetectInputStream()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectOutputStream::AutoDetectOutputStream(std::ostream& ostr):
 | 
			
		||||
	AutoDetectIOS(ostr), 
 | 
			
		||||
	std::ostream(&_buf)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AutoDetectOutputStream::~AutoDetectOutputStream()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										315
									
								
								Zip/src/Compress.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										315
									
								
								Zip/src/Compress.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,315 @@
 | 
			
		||||
//
 | 
			
		||||
// Compress.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Compress.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  Compress
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipStream.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchiveInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipDataInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipException.h"
 | 
			
		||||
#include "Poco/StreamCopier.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Compress::Compress(std::ostream& out, bool seekableOut):
 | 
			
		||||
	_out(out),
 | 
			
		||||
	_seekableOut(seekableOut),
 | 
			
		||||
	_files(),
 | 
			
		||||
	_infos(),
 | 
			
		||||
	_dirs(),
 | 
			
		||||
	_offset(0)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Compress::~Compress()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Compress::addEntry(std::istream& in, const Poco::DateTime& lastModifiedAt, const Poco::Path& fileName, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	std::string fn = ZipUtil::validZipEntryFileName(fileName);
 | 
			
		||||
 | 
			
		||||
	if (_files.size() >= 65535)
 | 
			
		||||
		throw ZipException("Maximum number of entries for a ZIP file reached: 65535");
 | 
			
		||||
	if (!in.good())
 | 
			
		||||
		throw ZipException("Invalid input stream");
 | 
			
		||||
 | 
			
		||||
	std::streamoff localHeaderOffset = _offset;
 | 
			
		||||
	ZipLocalFileHeader hdr(fileName, lastModifiedAt, cm, cl);
 | 
			
		||||
	hdr.setStartPos(localHeaderOffset);
 | 
			
		||||
 | 
			
		||||
	ZipOutputStream zipOut(_out, hdr, _seekableOut);
 | 
			
		||||
	Poco::StreamCopier::copyStream(in, zipOut);
 | 
			
		||||
	zipOut.close();
 | 
			
		||||
	hdr.setStartPos(localHeaderOffset); // reset again now that compressed Size is known
 | 
			
		||||
	_offset = hdr.getEndPos();
 | 
			
		||||
	if (hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
		_offset += ZipDataInfo::getFullHeaderSize();
 | 
			
		||||
	_files.insert(std::make_pair(fileName.toString(Poco::Path::PATH_UNIX), hdr));
 | 
			
		||||
	poco_assert (_out);
 | 
			
		||||
	ZipFileInfo nfo(hdr);
 | 
			
		||||
	nfo.setOffset(localHeaderOffset);
 | 
			
		||||
	_infos.insert(std::make_pair(fileName.toString(Poco::Path::PATH_UNIX), nfo));
 | 
			
		||||
	EDone.notify(this, hdr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Compress::addFileRaw(std::istream& in, const ZipLocalFileHeader& h, const Poco::Path& fileName)
 | 
			
		||||
{
 | 
			
		||||
	std::string fn = ZipUtil::validZipEntryFileName(fileName);
 | 
			
		||||
	//bypass the header of the input stream and point to the first byte of the data payload
 | 
			
		||||
	in.seekg(h.getDataStartPos(), std::ios_base::beg);
 | 
			
		||||
 | 
			
		||||
	if (_files.size() >= 65535)
 | 
			
		||||
		throw ZipException("Maximum number of entries for a ZIP file reached: 65535");
 | 
			
		||||
	if (!in.good())
 | 
			
		||||
		throw ZipException("Invalid input stream");
 | 
			
		||||
 | 
			
		||||
	std::streamoff localHeaderOffset = _offset;
 | 
			
		||||
	ZipLocalFileHeader hdr(h);
 | 
			
		||||
	hdr.setFileName(fn, h.isDirectory());
 | 
			
		||||
	hdr.setStartPos(localHeaderOffset);
 | 
			
		||||
	//bypass zipoutputstream
 | 
			
		||||
	//write the header directly
 | 
			
		||||
	std::string header = hdr.createHeader();
 | 
			
		||||
	_out.write(header.c_str(), static_cast<std::streamsize>(header.size()));
 | 
			
		||||
	// now fwd the payload to _out in chunks of size CHUNKSIZE
 | 
			
		||||
	Poco::UInt32 totalSize = hdr.getCompressedSize();
 | 
			
		||||
	if (totalSize > 0)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Buffer<char> buffer(COMPRESS_CHUNK_SIZE);
 | 
			
		||||
		Poco::UInt32 remaining = totalSize;
 | 
			
		||||
		while(remaining > 0)
 | 
			
		||||
		{
 | 
			
		||||
			if (remaining > COMPRESS_CHUNK_SIZE)
 | 
			
		||||
			{
 | 
			
		||||
				in.read(buffer.begin(), COMPRESS_CHUNK_SIZE);
 | 
			
		||||
				std::streamsize n = in.gcount();
 | 
			
		||||
				poco_assert_dbg (n == COMPRESS_CHUNK_SIZE);
 | 
			
		||||
				_out.write(buffer.begin(), n);
 | 
			
		||||
				remaining -= COMPRESS_CHUNK_SIZE;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				in.read(buffer.begin(), remaining);
 | 
			
		||||
				std::streamsize n = in.gcount();
 | 
			
		||||
				poco_assert_dbg (n == remaining);
 | 
			
		||||
				_out.write(buffer.begin(), n);
 | 
			
		||||
				remaining = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	//write optional block afterwards
 | 
			
		||||
	if (hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
	{
 | 
			
		||||
		ZipDataInfo info(in, false);
 | 
			
		||||
		_out.write(info.getRawHeader(), static_cast<std::streamsize>(info.getFullHeaderSize()));
 | 
			
		||||
	}
 | 
			
		||||
	hdr.setStartPos(localHeaderOffset); // reset again now that compressed Size is known
 | 
			
		||||
	_offset = hdr.getEndPos();
 | 
			
		||||
	if (hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
		_offset += ZipDataInfo::getFullHeaderSize();
 | 
			
		||||
	_files.insert(std::make_pair(fileName.toString(Poco::Path::PATH_UNIX), hdr));
 | 
			
		||||
	poco_assert (_out);
 | 
			
		||||
	ZipFileInfo nfo(hdr);
 | 
			
		||||
	nfo.setOffset(localHeaderOffset);
 | 
			
		||||
	_infos.insert(std::make_pair(fileName.toString(Poco::Path::PATH_UNIX), nfo));
 | 
			
		||||
	EDone.notify(this, hdr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Compress::addFile(std::istream& in, const Poco::DateTime& lastModifiedAt, const Poco::Path& fileName, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	if (!fileName.isFile())
 | 
			
		||||
		throw ZipException("Not a file: "+ fileName.toString());
 | 
			
		||||
 | 
			
		||||
	if (fileName.depth() > 1)
 | 
			
		||||
	{
 | 
			
		||||
		addDirectory(fileName.parent(), lastModifiedAt);
 | 
			
		||||
	}
 | 
			
		||||
	addEntry(in, lastModifiedAt, fileName, cm, cl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Compress::addFile(const Poco::Path& file, const Poco::Path& fileName, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	Poco::File aFile(file);
 | 
			
		||||
	std::ifstream in(file.toString().c_str(), std::ios::binary);
 | 
			
		||||
	if (!in.good())
 | 
			
		||||
		throw ZipException("Invalid input stream for " + aFile.path());
 | 
			
		||||
	if (fileName.depth() > 1)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::File aParent(file.parent());
 | 
			
		||||
		addDirectory(fileName.parent(), aParent.getLastModified());
 | 
			
		||||
	}
 | 
			
		||||
	addFile(in, aFile.getLastModified(), fileName, cm, cl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Compress::addDirectory(const Poco::Path& entryName, const Poco::DateTime& lastModifiedAt)
 | 
			
		||||
{
 | 
			
		||||
	if (!entryName.isDirectory())
 | 
			
		||||
		throw ZipException("Not a directory: "+ entryName.toString());
 | 
			
		||||
 | 
			
		||||
	std::string fileStr = entryName.toString(Poco::Path::PATH_UNIX);
 | 
			
		||||
	if (_files.find(fileStr) != _files.end())
 | 
			
		||||
		return; // ignore duplicate add
 | 
			
		||||
	if (_files.size() >= 65535)
 | 
			
		||||
		throw ZipException("Maximum number of entries for a ZIP file reached: 65535");
 | 
			
		||||
	if (fileStr == "/")
 | 
			
		||||
		throw ZipException("Illegal entry name /");
 | 
			
		||||
	if (fileStr.empty())
 | 
			
		||||
		throw ZipException("Illegal empty entry name");
 | 
			
		||||
	if (fileStr.find(ZipCommon::ILLEGAL_PATH) != std::string::npos)
 | 
			
		||||
		throw ZipException("Illegal entry name " + fileStr + " containing " + ZipCommon::ILLEGAL_PATH);
 | 
			
		||||
 | 
			
		||||
	if (entryName.depth() > 1)
 | 
			
		||||
	{
 | 
			
		||||
		addDirectory(entryName.parent(), lastModifiedAt);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	std::streamoff localHeaderOffset = _offset;
 | 
			
		||||
	ZipCommon::CompressionMethod cm = ZipCommon::CM_STORE;
 | 
			
		||||
	ZipCommon::CompressionLevel cl = ZipCommon::CL_NORMAL;
 | 
			
		||||
	ZipLocalFileHeader hdr(entryName, lastModifiedAt, cm, cl);
 | 
			
		||||
	hdr.setStartPos(localHeaderOffset);
 | 
			
		||||
	ZipOutputStream zipOut(_out, hdr, _seekableOut);
 | 
			
		||||
	zipOut.close();
 | 
			
		||||
	hdr.setStartPos(localHeaderOffset); // reset again now that compressed Size is known
 | 
			
		||||
	_offset = hdr.getEndPos();
 | 
			
		||||
	if (hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
		_offset += ZipDataInfo::getFullHeaderSize();
 | 
			
		||||
	_files.insert(std::make_pair(entryName.toString(Poco::Path::PATH_UNIX), hdr));
 | 
			
		||||
	poco_assert (_out);
 | 
			
		||||
	ZipFileInfo nfo(hdr);
 | 
			
		||||
	nfo.setOffset(localHeaderOffset);
 | 
			
		||||
	_infos.insert(std::make_pair(entryName.toString(Poco::Path::PATH_UNIX), nfo));
 | 
			
		||||
	EDone.notify(this, hdr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Compress::addRecursive(const Poco::Path& entry, ZipCommon::CompressionLevel cl, bool excludeRoot, const Poco::Path& name)
 | 
			
		||||
{
 | 
			
		||||
	Poco::File aFile(entry);
 | 
			
		||||
	if (!aFile.isDirectory())
 | 
			
		||||
		throw ZipException("Not a directory: "+ entry.toString());
 | 
			
		||||
	Poco::Path aName(name);
 | 
			
		||||
	aName.makeDirectory();
 | 
			
		||||
	if (!excludeRoot)
 | 
			
		||||
	{
 | 
			
		||||
		if (aName.depth() == 0)
 | 
			
		||||
		{
 | 
			
		||||
			Poco::Path tmp(entry);
 | 
			
		||||
			tmp.makeAbsolute(); // eliminate ../
 | 
			
		||||
			aName = Poco::Path(tmp[tmp.depth()-1]);
 | 
			
		||||
			aName.makeDirectory();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		addDirectory(aName, aFile.getLastModified());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// iterate over children
 | 
			
		||||
	std::vector<std::string> children;
 | 
			
		||||
	aFile.list(children);
 | 
			
		||||
	std::vector<std::string>::const_iterator it = children.begin();
 | 
			
		||||
	std::vector<std::string>::const_iterator itEnd = children.end();
 | 
			
		||||
	for (; it != itEnd; ++it)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Path realFile(entry, *it);
 | 
			
		||||
		Poco::Path renamedFile(aName, *it);
 | 
			
		||||
		Poco::File aFile(realFile);
 | 
			
		||||
		if (aFile.isDirectory())
 | 
			
		||||
		{
 | 
			
		||||
			realFile.makeDirectory();
 | 
			
		||||
			renamedFile.makeDirectory();
 | 
			
		||||
			addRecursive(realFile, cl, false, renamedFile);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			realFile.makeFile();
 | 
			
		||||
			renamedFile.makeFile();
 | 
			
		||||
			addFile(realFile, renamedFile, ZipCommon::CM_DEFLATE, cl);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive Compress::close()
 | 
			
		||||
{
 | 
			
		||||
	if (!_dirs.empty())
 | 
			
		||||
		return ZipArchive(_files, _infos, _dirs);
 | 
			
		||||
 | 
			
		||||
	poco_assert (_infos.size() == _files.size());
 | 
			
		||||
	poco_assert (_files.size() < 65536);
 | 
			
		||||
	Poco::UInt32 centralDirStart = _offset;
 | 
			
		||||
	Poco::UInt32 centralDirSize = 0;
 | 
			
		||||
	// write all infos
 | 
			
		||||
	ZipArchive::FileInfos::const_iterator it = _infos.begin();
 | 
			
		||||
	ZipArchive::FileInfos::const_iterator itEnd = _infos.end();
 | 
			
		||||
	for (; it != itEnd; ++it)
 | 
			
		||||
	{
 | 
			
		||||
		const ZipFileInfo& nfo = it->second;
 | 
			
		||||
		std::string info(nfo.createHeader());
 | 
			
		||||
		_out.write(info.c_str(), static_cast<std::streamsize>(info.size()));
 | 
			
		||||
		Poco::UInt32 entrySize = static_cast<Poco::UInt32>(info.size());
 | 
			
		||||
		centralDirSize += entrySize;
 | 
			
		||||
		_offset += entrySize;
 | 
			
		||||
	}
 | 
			
		||||
	poco_assert (_out);
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	Poco::UInt16 numEntries = static_cast<Poco::UInt16>(_infos.size());
 | 
			
		||||
	ZipArchiveInfo central;
 | 
			
		||||
	central.setCentralDirectorySize(centralDirSize);
 | 
			
		||||
	central.setNumberOfEntries(numEntries);
 | 
			
		||||
	central.setTotalNumberOfEntries(numEntries);
 | 
			
		||||
	central.setHeaderOffset(centralDirStart);
 | 
			
		||||
	std::string centr(central.createHeader());
 | 
			
		||||
	_out.write(centr.c_str(), static_cast<std::streamsize>(centr.size()));
 | 
			
		||||
	_out.flush();
 | 
			
		||||
	_dirs.insert(std::make_pair(0, central));
 | 
			
		||||
	return ZipArchive(_files, _infos, _dirs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										192
									
								
								Zip/src/Decompress.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								Zip/src/Decompress.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,192 @@
 | 
			
		||||
//
 | 
			
		||||
// Decompress.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Decompress.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  Decompress
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Decompress.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/Zip/ZipStream.h"
 | 
			
		||||
#include "Poco/Zip/ZipException.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
#include "Poco/StreamCopier.h"
 | 
			
		||||
#include "Poco/Delegate.h"
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Decompress::Decompress(std::istream& in, const Poco::Path& outputDir, bool flattenDirs, bool keepIncompleteFiles):
 | 
			
		||||
	_in(in),
 | 
			
		||||
	_outDir(outputDir),
 | 
			
		||||
	_flattenDirs(flattenDirs),
 | 
			
		||||
	_keepIncompleteFiles(keepIncompleteFiles),
 | 
			
		||||
	_mapping()
 | 
			
		||||
{
 | 
			
		||||
	_outDir.makeAbsolute();
 | 
			
		||||
	poco_assert (_in.good());
 | 
			
		||||
	Poco::File tmp(_outDir);
 | 
			
		||||
	if (!tmp.exists())
 | 
			
		||||
	{
 | 
			
		||||
		tmp.createDirectories();
 | 
			
		||||
	}
 | 
			
		||||
	if (!tmp.isDirectory())
 | 
			
		||||
		throw Poco::IOException("Failed to create/open directory: " + _outDir.toString());
 | 
			
		||||
	EOk += Poco::Delegate<Decompress, std::pair<const ZipLocalFileHeader, const Poco::Path> >(this, &Decompress::onOk);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Decompress::~Decompress()
 | 
			
		||||
{
 | 
			
		||||
	EOk -= Poco::Delegate<Decompress, std::pair<const ZipLocalFileHeader, const Poco::Path> >(this, &Decompress::onOk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive Decompress::decompressAllFiles()
 | 
			
		||||
{
 | 
			
		||||
	poco_assert (_mapping.empty());
 | 
			
		||||
	ZipArchive arch(_in, *this);
 | 
			
		||||
	return arch;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool Decompress::handleZipEntry(std::istream& zipStream, const ZipLocalFileHeader& hdr)
 | 
			
		||||
{
 | 
			
		||||
	if (hdr.isDirectory())
 | 
			
		||||
	{
 | 
			
		||||
		// directory have 0 size, nth to read
 | 
			
		||||
		if (!_flattenDirs)
 | 
			
		||||
		{
 | 
			
		||||
			std::string dirName = hdr.getFileName();
 | 
			
		||||
			if (dirName.find(ZipCommon::ILLEGAL_PATH) != std::string::npos)
 | 
			
		||||
				throw ZipException("Illegal entry name " + dirName + " containing " + ZipCommon::ILLEGAL_PATH);
 | 
			
		||||
			Poco::Path dir(dirName);
 | 
			
		||||
			dir.makeDirectory();
 | 
			
		||||
			Poco::File aFile(dir);
 | 
			
		||||
			aFile.createDirectories();
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	try
 | 
			
		||||
	{
 | 
			
		||||
		std::string fileName = hdr.getFileName();
 | 
			
		||||
		if (_flattenDirs)
 | 
			
		||||
		{
 | 
			
		||||
			// remove path info
 | 
			
		||||
			Poco::Path p(fileName);
 | 
			
		||||
			p.makeFile();
 | 
			
		||||
			fileName = p.getFileName();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (fileName.find(ZipCommon::ILLEGAL_PATH) != std::string::npos)
 | 
			
		||||
			throw ZipException("Illegal entry name " + fileName + " containing " + ZipCommon::ILLEGAL_PATH);
 | 
			
		||||
 | 
			
		||||
		Poco::Path file(fileName);
 | 
			
		||||
		file.makeFile();
 | 
			
		||||
		Poco::Path dest(_outDir, file);
 | 
			
		||||
		dest.makeFile();
 | 
			
		||||
		if (dest.depth() > 0)
 | 
			
		||||
		{
 | 
			
		||||
			Poco::File aFile(dest.parent());
 | 
			
		||||
			aFile.createDirectories();
 | 
			
		||||
		}
 | 
			
		||||
		std::ofstream out(dest.toString().c_str(), std::ios::binary);
 | 
			
		||||
		if (!out)
 | 
			
		||||
		{
 | 
			
		||||
			std::pair<const ZipLocalFileHeader, const std::string> tmp = std::make_pair(hdr, "Failed to open output stream " + dest.toString());
 | 
			
		||||
			EError.notify(this, tmp);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		ZipInputStream inp(zipStream, hdr, false);
 | 
			
		||||
		Poco::StreamCopier::copyStream(inp, out);
 | 
			
		||||
		out.close();
 | 
			
		||||
		Poco::File aFile(file);
 | 
			
		||||
		if (!aFile.exists() || !aFile.isFile())
 | 
			
		||||
		{
 | 
			
		||||
			std::pair<const ZipLocalFileHeader, const std::string> tmp = std::make_pair(hdr, "Failed to create output stream " + dest.toString());
 | 
			
		||||
			EError.notify(this, tmp);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!inp.crcValid())
 | 
			
		||||
		{
 | 
			
		||||
			if (!_keepIncompleteFiles)
 | 
			
		||||
				aFile.remove();
 | 
			
		||||
			std::pair<const ZipLocalFileHeader, const std::string> tmp = std::make_pair(hdr, "CRC mismatch. Corrupt file: " + dest.toString());
 | 
			
		||||
			EError.notify(this, tmp);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// cannot check against hdr.getUnCompressedSize if CRC and size are not set in hdr but in a ZipDataInfo
 | 
			
		||||
		// crc is typically enough to detect errors
 | 
			
		||||
		if (aFile.getSize() != hdr.getUncompressedSize() && !hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
		{
 | 
			
		||||
			if (!_keepIncompleteFiles)
 | 
			
		||||
				aFile.remove();
 | 
			
		||||
			std::pair<const ZipLocalFileHeader, const std::string> tmp = std::make_pair(hdr, "Filesizes do not match. Corrupt file: " + dest.toString());
 | 
			
		||||
			EError.notify(this, tmp);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		std::pair<const ZipLocalFileHeader, const Poco::Path> tmp = std::make_pair(hdr, file);
 | 
			
		||||
		EOk.notify(this, tmp);
 | 
			
		||||
	}
 | 
			
		||||
	catch (Poco::Exception& e)
 | 
			
		||||
	{
 | 
			
		||||
		std::pair<const ZipLocalFileHeader, const std::string> tmp = std::make_pair(hdr, "Exception: " + e.displayText());
 | 
			
		||||
		EError.notify(this, tmp);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	catch (...)
 | 
			
		||||
	{
 | 
			
		||||
		std::pair<const ZipLocalFileHeader, const std::string> tmp = std::make_pair(hdr, "Unknown Exception");
 | 
			
		||||
		EError.notify(this, tmp);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Decompress::onOk(const void*, std::pair<const ZipLocalFileHeader, const Poco::Path>& val)
 | 
			
		||||
{
 | 
			
		||||
	_mapping.insert(std::make_pair(val.first.getFileName(), val.second));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										63
									
								
								Zip/src/Delete.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								Zip/src/Delete.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
//
 | 
			
		||||
// Delete.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Delete.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Delete
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Delete.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Delete::Delete(const ZipLocalFileHeader& hdr):
 | 
			
		||||
	_hdr(hdr)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Delete::execute(Compress& c, std::istream& input)
 | 
			
		||||
{
 | 
			
		||||
	// due to absolute positioning in compress we don't need to do this
 | 
			
		||||
	/*
 | 
			
		||||
	input.seekg(_hdr.getEndPos(), std::ios_base::beg);
 | 
			
		||||
	if (_hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
	{
 | 
			
		||||
		ZipDataInfo info(in, false);
 | 
			
		||||
	}
 | 
			
		||||
	*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										59
									
								
								Zip/src/Keep.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Zip/src/Keep.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
//
 | 
			
		||||
// Keep.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Keep.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Keep
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Keep.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
#include "Poco/Buffer.h"
 | 
			
		||||
#include "Poco/StreamCopier.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Keep::Keep(const ZipLocalFileHeader& hdr):
 | 
			
		||||
	_hdr(hdr)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Keep::execute(Compress& c, std::istream& input)
 | 
			
		||||
{
 | 
			
		||||
	c.addFileRaw(input, _hdr, _hdr.getFileName());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										54
									
								
								Zip/src/ParseCallback.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Zip/src/ParseCallback.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
//
 | 
			
		||||
// ParseCallback.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ParseCallback.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ParseCallback
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ParseCallback.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ParseCallback::ParseCallback()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ParseCallback::~ParseCallback()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										269
									
								
								Zip/src/PartialStream.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										269
									
								
								Zip/src/PartialStream.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,269 @@
 | 
			
		||||
//
 | 
			
		||||
// PartialStream.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/PartialStream.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  PartialStream
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/PartialStream.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialStreamBuf::PartialStreamBuf(std::istream& in, std::ios::pos_type start, std::ios::pos_type end, const std::string& pre, const std::string& post, bool initStream):
 | 
			
		||||
	Poco::BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::in),
 | 
			
		||||
	_initialized(!initStream),
 | 
			
		||||
	_start(start),
 | 
			
		||||
	_numBytes(end-start),
 | 
			
		||||
	_bytesWritten(0),
 | 
			
		||||
	_pIstr(&in),
 | 
			
		||||
	_pOstr(0),
 | 
			
		||||
	_prefix(pre),
 | 
			
		||||
	_postfix(post),
 | 
			
		||||
	_ignoreStart(0),
 | 
			
		||||
	_buffer(0),
 | 
			
		||||
	_bufferOffset(0)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialStreamBuf::PartialStreamBuf(std::ostream& out, std::size_t start, std::size_t end, bool initStream):
 | 
			
		||||
	Poco::BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::out),
 | 
			
		||||
	_initialized(!initStream),
 | 
			
		||||
	_start(0),
 | 
			
		||||
	_numBytes(0),
 | 
			
		||||
	_bytesWritten(0),
 | 
			
		||||
	_pIstr(0),
 | 
			
		||||
	_pOstr(&out),
 | 
			
		||||
	_ignoreStart(start),
 | 
			
		||||
	_buffer(end),
 | 
			
		||||
	_bufferOffset(0)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialStreamBuf::~PartialStreamBuf()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int PartialStreamBuf::readFromDevice(char* buffer, std::streamsize length)
 | 
			
		||||
{
 | 
			
		||||
	if (_pIstr == 0 ||length == 0) return -1;
 | 
			
		||||
	if (!_initialized)
 | 
			
		||||
	{
 | 
			
		||||
		_initialized = true;
 | 
			
		||||
		_pIstr->clear();
 | 
			
		||||
		_pIstr->seekg(_start, std::ios_base::beg);
 | 
			
		||||
		if (_pIstr->fail())
 | 
			
		||||
			throw Poco::IOException("Failed to reposition in stream");
 | 
			
		||||
	}
 | 
			
		||||
	if (!_prefix.empty())
 | 
			
		||||
	{
 | 
			
		||||
		std::streamsize tmp = (_prefix.size() > length)? length: static_cast<std::streamsize>(_prefix.size());
 | 
			
		||||
		std::memcpy(buffer, _prefix.c_str(), tmp);
 | 
			
		||||
		_prefix = _prefix.substr(tmp);
 | 
			
		||||
		return tmp;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (_numBytes == 0)
 | 
			
		||||
	{
 | 
			
		||||
		if (!_postfix.empty())
 | 
			
		||||
		{
 | 
			
		||||
			std::streamsize tmp = (_postfix.size() > length)? length: static_cast<std::streamsize>(_postfix.size());
 | 
			
		||||
			std::memcpy(buffer, _postfix.c_str(), tmp);
 | 
			
		||||
			_postfix = _postfix.substr(tmp);
 | 
			
		||||
			return tmp;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!_pIstr->good())
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	if (_numBytes < length)
 | 
			
		||||
		length = static_cast<std::streamsize>(_numBytes);
 | 
			
		||||
 | 
			
		||||
	_pIstr->read(buffer, length);
 | 
			
		||||
	std::streamsize bytesRead = _pIstr->gcount();
 | 
			
		||||
	_numBytes -= bytesRead;
 | 
			
		||||
	return bytesRead;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int PartialStreamBuf::writeToDevice(const char* buffer, std::streamsize length)
 | 
			
		||||
{
 | 
			
		||||
	if (_pOstr == 0 || length == 0) return -1;
 | 
			
		||||
	if (!_initialized)
 | 
			
		||||
	{
 | 
			
		||||
		_initialized = true;
 | 
			
		||||
		_pOstr->clear();
 | 
			
		||||
		if (_pOstr->fail())
 | 
			
		||||
			throw Poco::IOException("Failed to clear stream status");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (_ignoreStart > 0)
 | 
			
		||||
	{
 | 
			
		||||
		if (_ignoreStart > length)
 | 
			
		||||
		{
 | 
			
		||||
			_ignoreStart -= length;
 | 
			
		||||
			// fake return values
 | 
			
		||||
			return length;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			std::streamsize cnt = static_cast<std::streamsize>(length - _ignoreStart - _buffer.size());
 | 
			
		||||
			if (cnt > 0)
 | 
			
		||||
			{
 | 
			
		||||
				_pOstr->write(buffer+_ignoreStart, cnt);
 | 
			
		||||
				_bytesWritten += cnt;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// copy the rest into buffer
 | 
			
		||||
			cnt += static_cast<std::streamsize>(_ignoreStart);
 | 
			
		||||
			_ignoreStart = 0;
 | 
			
		||||
			poco_assert (cnt < length);
 | 
			
		||||
			_bufferOffset = length - cnt;
 | 
			
		||||
			std::memcpy(_buffer.begin(), buffer + cnt, _bufferOffset);
 | 
			
		||||
 | 
			
		||||
			return length;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (_buffer.size() > 0)
 | 
			
		||||
	{
 | 
			
		||||
		// always treat each write as the potential last one
 | 
			
		||||
		// thus first fill the buffer with the last n bytes of the msg
 | 
			
		||||
 | 
			
		||||
		// how much of the already cached data do we need to write?
 | 
			
		||||
		Poco::Int32 cache = _bufferOffset + length - _buffer.size();
 | 
			
		||||
		if (cache > 0)
 | 
			
		||||
		{
 | 
			
		||||
			if (cache > _bufferOffset)
 | 
			
		||||
				cache = _bufferOffset;
 | 
			
		||||
			_pOstr->write(_buffer.begin(), cache);
 | 
			
		||||
			_bytesWritten += cache;
 | 
			
		||||
			_bufferOffset -= cache;
 | 
			
		||||
			if (_bufferOffset > 0)
 | 
			
		||||
				std::memmove(_buffer.begin(), _buffer.begin()+cache, _bufferOffset);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// now fill up _buffer with the last bytes from buffer
 | 
			
		||||
		Poco::Int32 pos = static_cast<Poco::Int32>(length - static_cast<Poco::Int32>(_buffer.size()) + _bufferOffset);
 | 
			
		||||
		if (pos <= 0)
 | 
			
		||||
		{
 | 
			
		||||
			// all of the message goes to _buffer
 | 
			
		||||
			std::memcpy(_buffer.begin() + _bufferOffset, buffer, length);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			poco_assert (_bufferOffset == 0);
 | 
			
		||||
			std::memcpy(_buffer.begin(), buffer+pos, _buffer.size());
 | 
			
		||||
			_bufferOffset = static_cast<Poco::UInt32>(_buffer.size());
 | 
			
		||||
			// the rest is written
 | 
			
		||||
			_pOstr->write(buffer, static_cast<std::streamsize>(length - _buffer.size()));
 | 
			
		||||
			_bytesWritten += (length - _buffer.size());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		_pOstr->write(buffer, length);
 | 
			
		||||
		_bytesWritten += length;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (_pOstr->good())
 | 
			
		||||
		return length;
 | 
			
		||||
 | 
			
		||||
	throw Poco::IOException("Failed to write to output stream");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamBuf::close()
 | 
			
		||||
{
 | 
			
		||||
	// DONT write data from _buffer!
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialIOS::PartialIOS(std::istream& istr, std::ios::pos_type start, std::ios::pos_type end, const std::string& pre, const std::string& post, bool initStream): _buf(istr, start, end, pre, post, initStream)
 | 
			
		||||
{
 | 
			
		||||
	poco_ios_init(&_buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialIOS::PartialIOS(std::ostream& ostr, std::size_t start, std::size_t end, bool initStream): _buf(ostr, start, end, initStream)
 | 
			
		||||
{
 | 
			
		||||
	poco_ios_init(&_buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialIOS::~PartialIOS()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialStreamBuf* PartialIOS::rdbuf()
 | 
			
		||||
{
 | 
			
		||||
	return &_buf;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialInputStream::PartialInputStream(std::istream& istr, std::ios::pos_type start, std::ios::pos_type end, bool initStream, const std::string& pre, const std::string& post): 
 | 
			
		||||
	PartialIOS(istr, start, end, pre, post, initStream), 
 | 
			
		||||
	std::istream(&_buf)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialInputStream::~PartialInputStream()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialOutputStream::PartialOutputStream(std::ostream& ostr, std::size_t start, std::size_t end, bool initStream):
 | 
			
		||||
	PartialIOS(ostr, start, end, initStream), 
 | 
			
		||||
	std::ostream(&_buf)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialOutputStream::~PartialOutputStream()
 | 
			
		||||
{
 | 
			
		||||
	close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										58
									
								
								Zip/src/Rename.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Zip/src/Rename.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
//
 | 
			
		||||
// Rename.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Rename.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Rename
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Rename.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Rename::Rename(const ZipLocalFileHeader& hdr, const std::string& newZipEntryName):
 | 
			
		||||
	_hdr(hdr),
 | 
			
		||||
	_newZipEntryName(newZipEntryName)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Rename::execute(Compress& c, std::istream& input)
 | 
			
		||||
{
 | 
			
		||||
	c.addFileRaw(input, _hdr, _newZipEntryName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										60
									
								
								Zip/src/Replace.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Zip/src/Replace.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
//
 | 
			
		||||
// Replace.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/Replace.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  Replace
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Replace.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Replace::Replace(const ZipLocalFileHeader& hdr, const std::string& localPath):
 | 
			
		||||
	_del(hdr),
 | 
			
		||||
	_add(hdr.getFileName(), localPath, hdr.getCompressionMethod(), hdr.getCompressionLevel())
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Replace::execute(Compress& c, std::istream& input)
 | 
			
		||||
{
 | 
			
		||||
	_del.execute(c, input);
 | 
			
		||||
	_add.execute(c, input);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										66
									
								
								Zip/src/SkipCallback.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								Zip/src/SkipCallback.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
//
 | 
			
		||||
// SkipCallback.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/SkipCallback.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  SkipCallback
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/SkipCallback.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SkipCallback::SkipCallback()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SkipCallback::~SkipCallback()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool SkipCallback::handleZipEntry(std::istream& zipStream, const ZipLocalFileHeader& hdr)
 | 
			
		||||
{
 | 
			
		||||
	if (!hdr.searchCRCAndSizesAfterData())
 | 
			
		||||
		zipStream.seekg(hdr.getCompressedSize(), std::ios_base::cur);
 | 
			
		||||
	else
 | 
			
		||||
		ZipUtil::sync(zipStream);
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										122
									
								
								Zip/src/ZipArchive.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								Zip/src/ZipArchive.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipArchive.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipArchive.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipArchive
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/Zip/SkipCallback.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive::ZipArchive(std::istream& in):
 | 
			
		||||
	_entries(),
 | 
			
		||||
	_infos(),
 | 
			
		||||
	_disks()
 | 
			
		||||
{
 | 
			
		||||
	poco_assert_dbg (in);
 | 
			
		||||
	SkipCallback skip;
 | 
			
		||||
	parse(in, skip);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive::ZipArchive(const FileHeaders& entries, const FileInfos& infos, const DirectoryInfos& dirs):
 | 
			
		||||
	_entries(entries),
 | 
			
		||||
	_infos(infos),
 | 
			
		||||
	_disks(dirs)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive::ZipArchive(std::istream& in, ParseCallback& pc):
 | 
			
		||||
	_entries(),
 | 
			
		||||
	_infos(),
 | 
			
		||||
	_disks()
 | 
			
		||||
{
 | 
			
		||||
	poco_assert_dbg (in);
 | 
			
		||||
	parse(in, pc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive::~ZipArchive()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipArchive::parse(std::istream& in, ParseCallback& pc)
 | 
			
		||||
{
 | 
			
		||||
	// read 4 bytes
 | 
			
		||||
	while (in.good() && !in.eof())
 | 
			
		||||
	{
 | 
			
		||||
		char header[ZipCommon::HEADER_SIZE]={'\x00', '\x00', '\x00', '\x00'};
 | 
			
		||||
		in.read(header, ZipCommon::HEADER_SIZE);
 | 
			
		||||
		if (in.eof())
 | 
			
		||||
			return;
 | 
			
		||||
		if (std::memcmp(header, ZipLocalFileHeader::HEADER, ZipCommon::HEADER_SIZE) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			ZipLocalFileHeader entry(in, true, pc);
 | 
			
		||||
			poco_assert (_entries.insert(std::make_pair(entry.getFileName(), entry)).second);
 | 
			
		||||
		}
 | 
			
		||||
		else if (std::memcmp(header, ZipFileInfo::HEADER, ZipCommon::HEADER_SIZE) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			ZipFileInfo info(in, true);
 | 
			
		||||
			FileHeaders::iterator it = _entries.find(info.getFileName());
 | 
			
		||||
			if (it != _entries.end())
 | 
			
		||||
			{
 | 
			
		||||
				it->second.setStartPos(info.getRelativeOffsetOfLocalHeader());
 | 
			
		||||
			}
 | 
			
		||||
			poco_assert (_infos.insert(std::make_pair(info.getFileName(), info)).second);
 | 
			
		||||
		}
 | 
			
		||||
		else if (std::memcmp(header, ZipArchiveInfo::HEADER, ZipCommon::HEADER_SIZE) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			ZipArchiveInfo nfo(in, true);
 | 
			
		||||
			poco_assert (_disks.insert(std::make_pair(nfo.getDiskNumber(), nfo)).second);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			if (_disks.empty())
 | 
			
		||||
				throw Poco::IllegalStateException("Illegal header in zip file");
 | 
			
		||||
			else
 | 
			
		||||
				throw Poco::IllegalStateException("Garbage after directory header");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										106
									
								
								Zip/src/ZipArchiveInfo.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								Zip/src/ZipArchiveInfo.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipArchiveInfo.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipArchiveInfo.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipArchiveInfo
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipArchiveInfo.h"
 | 
			
		||||
#include "Poco/Buffer.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const char ZipArchiveInfo::HEADER[ZipCommon::HEADER_SIZE] = {'\x50', '\x4b', '\x05', '\x06'};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchiveInfo::ZipArchiveInfo(std::istream& in, bool assumeHeaderRead):
 | 
			
		||||
	_rawInfo(),
 | 
			
		||||
	_startPos(in.tellg()),
 | 
			
		||||
	_comment()
 | 
			
		||||
{
 | 
			
		||||
	if (assumeHeaderRead)
 | 
			
		||||
		_startPos -= ZipCommon::HEADER_SIZE;
 | 
			
		||||
	parse(in, assumeHeaderRead);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ZipArchiveInfo::ZipArchiveInfo():
 | 
			
		||||
	_rawInfo(),
 | 
			
		||||
	_startPos(0),
 | 
			
		||||
	_comment()
 | 
			
		||||
{
 | 
			
		||||
	std::memset(_rawInfo, 0, FULLHEADER_SIZE);
 | 
			
		||||
	std::memcpy(_rawInfo, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchiveInfo::~ZipArchiveInfo()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipArchiveInfo::parse(std::istream& inp, bool assumeHeaderRead)
 | 
			
		||||
{
 | 
			
		||||
	if (!assumeHeaderRead)
 | 
			
		||||
	{
 | 
			
		||||
		inp.read(_rawInfo, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		std::memcpy(_rawInfo, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
	poco_assert (std::memcmp(_rawInfo, HEADER, ZipCommon::HEADER_SIZE) == 0);
 | 
			
		||||
	// read the rest of the header
 | 
			
		||||
	inp.read(_rawInfo + ZipCommon::HEADER_SIZE, FULLHEADER_SIZE - ZipCommon::HEADER_SIZE);
 | 
			
		||||
	Poco::UInt16 len = getZipCommentSize();
 | 
			
		||||
	if (len > 0)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Buffer<char> buf(len);
 | 
			
		||||
		inp.read(buf.begin(), len);
 | 
			
		||||
		_comment = std::string(buf.begin(), len);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
std::string ZipArchiveInfo::createHeader() const
 | 
			
		||||
{
 | 
			
		||||
	std::string result(_rawInfo, FULLHEADER_SIZE);
 | 
			
		||||
	result.append(_comment);
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										47
									
								
								Zip/src/ZipCommon.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Zip/src/ZipCommon.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipCommon.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipCommon.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipCommon
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipCommon.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const std::string ZipCommon::ILLEGAL_PATH("..");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										79
									
								
								Zip/src/ZipDataInfo.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								Zip/src/ZipDataInfo.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipDataInfo.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipDataInfo.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipDataInfo
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipDataInfo.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const char ZipDataInfo::HEADER[ZipCommon::HEADER_SIZE] = {'\x50', '\x4b', '\x07', '\x08'};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipDataInfo::ZipDataInfo():
 | 
			
		||||
	_rawInfo(),
 | 
			
		||||
	_valid(true)
 | 
			
		||||
{
 | 
			
		||||
	std::memcpy(_rawInfo, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	std::memset(_rawInfo+ZipCommon::HEADER_SIZE, 0, FULLHEADER_SIZE - ZipCommon::HEADER_SIZE);
 | 
			
		||||
	_valid = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipDataInfo::ZipDataInfo(std::istream& in, bool assumeHeaderRead):
 | 
			
		||||
	_rawInfo(),
 | 
			
		||||
	_valid(false)
 | 
			
		||||
{
 | 
			
		||||
	if (assumeHeaderRead)
 | 
			
		||||
		std::memcpy(_rawInfo, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	else
 | 
			
		||||
		in.read(_rawInfo, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	poco_assert (std::memcmp(_rawInfo, HEADER, ZipCommon::HEADER_SIZE) == 0);
 | 
			
		||||
	// now copy the rest of the header
 | 
			
		||||
	in.read(_rawInfo+ZipCommon::HEADER_SIZE, FULLHEADER_SIZE - ZipCommon::HEADER_SIZE);
 | 
			
		||||
	_valid = (!in.eof() && in.good());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipDataInfo::~ZipDataInfo()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										49
									
								
								Zip/src/ZipException.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Zip/src/ZipException.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipException.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipException.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipException
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipException.h"
 | 
			
		||||
#include <typeinfo>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
POCO_IMPLEMENT_EXCEPTION(ZipException, Poco::RuntimeException, "ZIP Exception")
 | 
			
		||||
POCO_IMPLEMENT_EXCEPTION(ZipManipulationException, ZipException, "ZIP Manipulation Exception")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										143
									
								
								Zip/src/ZipFileInfo.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								Zip/src/ZipFileInfo.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,143 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipFileInfo.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipFileInfo.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipFileInfo
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipFileInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Buffer.h"
 | 
			
		||||
#include <istream>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const char ZipFileInfo::HEADER[ZipCommon::HEADER_SIZE] = {'\x50', '\x4b', '\x01', '\x02'};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipFileInfo::ZipFileInfo(const ZipLocalFileHeader& header):
 | 
			
		||||
	_rawInfo(),
 | 
			
		||||
	_crc32(0),
 | 
			
		||||
	_compressedSize(0),
 | 
			
		||||
	_uncompressedSize(0),
 | 
			
		||||
	_fileName(),
 | 
			
		||||
	_lastModifiedAt(),
 | 
			
		||||
	_extraField()
 | 
			
		||||
{
 | 
			
		||||
	std::memset(_rawInfo, 0, FULLHEADER_SIZE);
 | 
			
		||||
	std::memcpy(_rawInfo, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	setCompressedSize(header.getCompressedSize());
 | 
			
		||||
	setUncompressedSize(header.getUncompressedSize());
 | 
			
		||||
	setCRC(header.getCRC());
 | 
			
		||||
	setCompressionMethod(header.getCompressionMethod());
 | 
			
		||||
	setCompressionLevel(header.getCompressionLevel());
 | 
			
		||||
	setRequiredVersion(header.getMajorVersionNumber(), header.getMinorVersionNumber());
 | 
			
		||||
	setHostSystem(header.getHostSystem());
 | 
			
		||||
	setLastModifiedAt(header.lastModifiedAt());
 | 
			
		||||
	setEncryption(false);
 | 
			
		||||
	setFileName(header.getFileName());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipFileInfo::ZipFileInfo(std::istream& in, bool assumeHeaderRead):
 | 
			
		||||
	_rawInfo(),
 | 
			
		||||
	_crc32(0),
 | 
			
		||||
	_compressedSize(0),
 | 
			
		||||
	_uncompressedSize(0),
 | 
			
		||||
	_fileName(),
 | 
			
		||||
	_lastModifiedAt(),
 | 
			
		||||
	_extraField()
 | 
			
		||||
{
 | 
			
		||||
	// sanity check
 | 
			
		||||
	poco_assert_dbg (RELATIVEOFFSETLOCALHEADER_POS + RELATIVEOFFSETLOCALHEADER_SIZE == FULLHEADER_SIZE);
 | 
			
		||||
	parse(in, assumeHeaderRead);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipFileInfo::~ZipFileInfo()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipFileInfo::parse(std::istream& inp, bool assumeHeaderRead)
 | 
			
		||||
{
 | 
			
		||||
	if (!assumeHeaderRead)
 | 
			
		||||
	{
 | 
			
		||||
		inp.read(_rawInfo, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		std::memcpy(_rawInfo, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
	poco_assert (std::memcmp(_rawInfo, HEADER, ZipCommon::HEADER_SIZE) == 0);
 | 
			
		||||
	// read the rest of the header
 | 
			
		||||
	inp.read(_rawInfo + ZipCommon::HEADER_SIZE, FULLHEADER_SIZE - ZipCommon::HEADER_SIZE);
 | 
			
		||||
	_crc32 = getCRCFromHeader();
 | 
			
		||||
	_compressedSize = getCompressedSizeFromHeader();
 | 
			
		||||
	_uncompressedSize = getUncompressedSizeFromHeader();
 | 
			
		||||
	parseDateTime();
 | 
			
		||||
	Poco::UInt16 len = getFileNameLength();
 | 
			
		||||
	Poco::Buffer<char> buf(len);
 | 
			
		||||
	inp.read(buf.begin(), len);
 | 
			
		||||
	_fileName = std::string(buf.begin(), len);
 | 
			
		||||
	if (hasExtraField())
 | 
			
		||||
	{
 | 
			
		||||
		len = getExtraFieldLength();
 | 
			
		||||
		Poco::Buffer<char> xtra(len);
 | 
			
		||||
		inp.read(xtra.begin(), len);
 | 
			
		||||
		_extraField = std::string(xtra.begin(), len);
 | 
			
		||||
	}
 | 
			
		||||
	len = getFileCommentLength();
 | 
			
		||||
	if (len > 0)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Buffer<char> buf2(len);
 | 
			
		||||
		inp.read(buf2.begin(), len);
 | 
			
		||||
		_fileComment = std::string(buf2.begin(), len);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
std::string ZipFileInfo::createHeader() const
 | 
			
		||||
{
 | 
			
		||||
	std::string result(_rawInfo, FULLHEADER_SIZE);
 | 
			
		||||
	result.append(_fileName);
 | 
			
		||||
	result.append(_extraField);
 | 
			
		||||
	result.append(_fileComment);
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										238
									
								
								Zip/src/ZipLocalFileHeader.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								Zip/src/ZipLocalFileHeader.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,238 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipLocalFileHeader.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipLocalFileHeader.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipLocalFileHeader
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipDataInfo.h"
 | 
			
		||||
#include "Poco/Zip/ParseCallback.h"
 | 
			
		||||
#include "Poco/Buffer.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const char ZipLocalFileHeader::HEADER[ZipCommon::HEADER_SIZE] = {'\x50', '\x4b', '\x03', '\x04'};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipLocalFileHeader::ZipLocalFileHeader(const Poco::Path& fileName, 
 | 
			
		||||
	const Poco::DateTime& lastModifiedAt,
 | 
			
		||||
	ZipCommon::CompressionMethod cm, 
 | 
			
		||||
	ZipCommon::CompressionLevel cl):
 | 
			
		||||
	_rawHeader(),
 | 
			
		||||
	_startPos(-1),
 | 
			
		||||
	_endPos(-1),
 | 
			
		||||
	_fileName(),
 | 
			
		||||
	_lastModifiedAt(),
 | 
			
		||||
	_extraField(),
 | 
			
		||||
	_crc32(0),
 | 
			
		||||
	_compressedSize(0),
 | 
			
		||||
	_uncompressedSize(0)
 | 
			
		||||
{
 | 
			
		||||
	std::memcpy(_rawHeader, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	std::memset(_rawHeader+ZipCommon::HEADER_SIZE, 0, FULLHEADER_SIZE - ZipCommon::HEADER_SIZE);
 | 
			
		||||
	ZipCommon::HostSystem hs = ZipCommon::HS_FAT;
 | 
			
		||||
 | 
			
		||||
#if (POCO_OS == POCO_OS_CYGWIN)
 | 
			
		||||
	hs = ZipCommon::HS_UNIX;
 | 
			
		||||
#endif
 | 
			
		||||
#if (POCO_OS == POCO_OS_VMS)
 | 
			
		||||
	hs = ZipCommon::HS_VMS;
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(POCO_OS_FAMILY_UNIX)
 | 
			
		||||
	hs = ZipCommon::HS_UNIX;
 | 
			
		||||
#endif
 | 
			
		||||
	setHostSystem(hs);
 | 
			
		||||
	setEncryption(false);
 | 
			
		||||
	setExtraFieldSize(0);
 | 
			
		||||
	setLastModifiedAt(lastModifiedAt);
 | 
			
		||||
	init(fileName, cm, cl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipLocalFileHeader::ZipLocalFileHeader(std::istream& inp, bool assumeHeaderRead, ParseCallback& callback):
 | 
			
		||||
	_rawHeader(),
 | 
			
		||||
	_startPos(inp.tellg()),
 | 
			
		||||
	_endPos(-1),
 | 
			
		||||
	_fileName(),
 | 
			
		||||
	_lastModifiedAt(),
 | 
			
		||||
	_extraField(),
 | 
			
		||||
	_crc32(0),
 | 
			
		||||
	_compressedSize(0),
 | 
			
		||||
	_uncompressedSize(0)
 | 
			
		||||
{
 | 
			
		||||
	poco_assert_dbg( (EXTRAFIELD_POS+EXTRAFIELD_LENGTH) == FULLHEADER_SIZE);
 | 
			
		||||
 | 
			
		||||
	if (assumeHeaderRead)
 | 
			
		||||
		_startPos -= ZipCommon::HEADER_SIZE;
 | 
			
		||||
 | 
			
		||||
	parse(inp, assumeHeaderRead);
 | 
			
		||||
 | 
			
		||||
	bool ok = callback.handleZipEntry(inp, *this);
 | 
			
		||||
 | 
			
		||||
	if (ok)
 | 
			
		||||
	{
 | 
			
		||||
		if (searchCRCAndSizesAfterData())
 | 
			
		||||
		{
 | 
			
		||||
			ZipDataInfo nfo(inp, false);
 | 
			
		||||
			setCRC(nfo.getCRC32());
 | 
			
		||||
			setCompressedSize(nfo.getCompressedSize());
 | 
			
		||||
			setUncompressedSize(nfo.getUncompressedSize());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		poco_assert_dbg(!searchCRCAndSizesAfterData());
 | 
			
		||||
		ZipUtil::sync(inp);
 | 
			
		||||
	}
 | 
			
		||||
	_endPos = _startPos + getHeaderSize() + _compressedSize; // exclude the data block!
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipLocalFileHeader::~ZipLocalFileHeader()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipLocalFileHeader::parse(std::istream& inp, bool assumeHeaderRead)
 | 
			
		||||
{
 | 
			
		||||
	if (!assumeHeaderRead)
 | 
			
		||||
	{
 | 
			
		||||
		inp.read(_rawHeader, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		std::memcpy(_rawHeader, HEADER, ZipCommon::HEADER_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
	poco_assert (std::memcmp(_rawHeader, HEADER, ZipCommon::HEADER_SIZE) == 0);
 | 
			
		||||
	// read the rest of the header
 | 
			
		||||
	inp.read(_rawHeader + ZipCommon::HEADER_SIZE, FULLHEADER_SIZE - ZipCommon::HEADER_SIZE);
 | 
			
		||||
	poco_assert (_rawHeader[VERSION_POS + 1]>= ZipCommon::HS_FAT && _rawHeader[VERSION_POS + 1] < ZipCommon::HS_UNUSED);
 | 
			
		||||
	poco_assert (getMajorVersionNumber() <= 2);
 | 
			
		||||
	poco_assert (ZipUtil::get16BitValue(_rawHeader, COMPR_METHOD_POS) < ZipCommon::CM_UNUSED);
 | 
			
		||||
	parseDateTime();
 | 
			
		||||
	Poco::UInt16 len = getFileNameLength();
 | 
			
		||||
	Poco::Buffer<char> buf(len);
 | 
			
		||||
	inp.read(buf.begin(), len);
 | 
			
		||||
	_fileName = std::string(buf.begin(), len);
 | 
			
		||||
	if (hasExtraField())
 | 
			
		||||
	{
 | 
			
		||||
		len = getExtraFieldLength();
 | 
			
		||||
		Poco::Buffer<char> xtra(len);
 | 
			
		||||
		inp.read(xtra.begin(), len);
 | 
			
		||||
		_extraField = std::string(xtra.begin(), len);
 | 
			
		||||
	}
 | 
			
		||||
	if (!searchCRCAndSizesAfterData())
 | 
			
		||||
	{
 | 
			
		||||
		_crc32 = getCRCFromHeader();
 | 
			
		||||
		_compressedSize = getCompressedSizeFromHeader();
 | 
			
		||||
		_uncompressedSize = getUncompressedSizeFromHeader();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool ZipLocalFileHeader::searchCRCAndSizesAfterData() const
 | 
			
		||||
{
 | 
			
		||||
	if (getCompressionMethod() == ZipCommon::CM_DEFLATE)
 | 
			
		||||
	{
 | 
			
		||||
		// check bit 3
 | 
			
		||||
		return ((ZipUtil::get16BitValue(_rawHeader, GENERAL_PURPOSE_POS) & 0x0008) != 0);
 | 
			
		||||
	}
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipLocalFileHeader::setFileName(const std::string& fileName, bool isDirectory)
 | 
			
		||||
{
 | 
			
		||||
	poco_assert (!fileName.empty());
 | 
			
		||||
	Poco::Path aPath(fileName);
 | 
			
		||||
 | 
			
		||||
	if (isDirectory)
 | 
			
		||||
	{
 | 
			
		||||
		aPath.makeDirectory();
 | 
			
		||||
		setCRC(0);
 | 
			
		||||
		setCompressedSize(0);
 | 
			
		||||
		setUncompressedSize(0);
 | 
			
		||||
		setCompressionMethod(ZipCommon::CM_STORE);
 | 
			
		||||
		setCompressionLevel(ZipCommon::CL_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		aPath.makeFile();
 | 
			
		||||
	}
 | 
			
		||||
	_fileName = aPath.toString(Poco::Path::PATH_UNIX);
 | 
			
		||||
	if (_fileName[0] == '/')
 | 
			
		||||
		_fileName = _fileName.substr(1);
 | 
			
		||||
	if (isDirectory)
 | 
			
		||||
	{
 | 
			
		||||
		poco_assert_dbg (_fileName[_fileName.size()-1] == '/');
 | 
			
		||||
	}
 | 
			
		||||
	setFileNameLength(static_cast<Poco::UInt16>(_fileName.size()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipLocalFileHeader::init(	const Poco::Path& fName, 
 | 
			
		||||
								ZipCommon::CompressionMethod cm, 
 | 
			
		||||
								ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	poco_assert (_fileName.empty());
 | 
			
		||||
	setSearchCRCAndSizesAfterData(false);
 | 
			
		||||
	Poco::Path fileName(fName);
 | 
			
		||||
	fileName.setDevice(""); // clear device!
 | 
			
		||||
	setFileName(fileName.toString(Poco::Path::PATH_UNIX), fileName.isDirectory());
 | 
			
		||||
	setRequiredVersion(2, 0);
 | 
			
		||||
	if (fileName.isFile())
 | 
			
		||||
	{
 | 
			
		||||
		setCompressionMethod(cm);
 | 
			
		||||
		setCompressionLevel(cl);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		setCompressionMethod(ZipCommon::CM_STORE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
std::string ZipLocalFileHeader::createHeader() const
 | 
			
		||||
{
 | 
			
		||||
	std::string result(_rawHeader, FULLHEADER_SIZE);
 | 
			
		||||
	result.append(_fileName);
 | 
			
		||||
	result.append(_extraField);
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										194
									
								
								Zip/src/ZipManipulator.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								Zip/src/ZipManipulator.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,194 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipManipulator.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipManipulator.cpp#2 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  ZipManipulator
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipManipulator.h"
 | 
			
		||||
#include "Poco/Zip/ZipException.h"
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
#include "Poco/Zip/Add.h"
 | 
			
		||||
#include "Poco/Zip/Delete.h"
 | 
			
		||||
#include "Poco/Zip/Keep.h"
 | 
			
		||||
#include "Poco/Zip/Rename.h"
 | 
			
		||||
#include "Poco/Zip/Replace.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
#include "Poco/Delegate.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include "Poco/FileStream.h"
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipManipulator::ZipManipulator(const std::string& zipFile, bool backupOriginalFile):
 | 
			
		||||
	_zipFile(zipFile),
 | 
			
		||||
	_backupOriginalFile(backupOriginalFile),
 | 
			
		||||
	_changes(),
 | 
			
		||||
	_in(0)
 | 
			
		||||
{
 | 
			
		||||
	std::ifstream in(zipFile.c_str());
 | 
			
		||||
	_in = new ZipArchive(in);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipManipulator::~ZipManipulator()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipManipulator::deleteFile(const std::string& zipPath)
 | 
			
		||||
{
 | 
			
		||||
	const ZipLocalFileHeader& entry = getForChange(zipPath);
 | 
			
		||||
	addOperation(zipPath, new Delete(entry));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipManipulator::replaceFile(const std::string& zipPath, const std::string& localPath)
 | 
			
		||||
{
 | 
			
		||||
	const ZipLocalFileHeader& entry = getForChange(zipPath);
 | 
			
		||||
	addOperation(zipPath, new Replace(entry, localPath));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipManipulator::renameFile(const std::string& zipPath, const std::string& newZipPath)
 | 
			
		||||
{
 | 
			
		||||
	const ZipLocalFileHeader& entry = getForChange(zipPath);
 | 
			
		||||
	// checked later in Compress too but the earlier one gets the error the better
 | 
			
		||||
	std::string fn = ZipUtil::validZipEntryFileName(newZipPath); 
 | 
			
		||||
	addOperation(zipPath, new Rename(entry, fn));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipManipulator::addFile(const std::string& zipPath, const std::string& localPath, ZipCommon::CompressionMethod cm, ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	addOperation(zipPath, new Add(zipPath, localPath, cm, cl));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive ZipManipulator::commit()
 | 
			
		||||
{
 | 
			
		||||
	// write to a tmp file
 | 
			
		||||
	std::string outFile(_zipFile + ".tmp");
 | 
			
		||||
	ZipArchive retVal(compress(outFile));
 | 
			
		||||
	//renaming
 | 
			
		||||
	{
 | 
			
		||||
		Poco::File aFile(_zipFile);
 | 
			
		||||
		if (_backupOriginalFile)
 | 
			
		||||
		{
 | 
			
		||||
			Poco::File tmp(_zipFile+".bak");
 | 
			
		||||
			if (tmp.exists())
 | 
			
		||||
				tmp.remove();
 | 
			
		||||
			aFile.renameTo(_zipFile+".bak");
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			aFile.remove();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		Poco::File resFile(outFile);
 | 
			
		||||
		Poco::File zipFile(_zipFile);
 | 
			
		||||
		if (zipFile.exists())
 | 
			
		||||
			zipFile.remove();
 | 
			
		||||
		resFile.renameTo(_zipFile);
 | 
			
		||||
	}
 | 
			
		||||
	return retVal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const ZipLocalFileHeader& ZipManipulator::getForChange(const std::string& zipPath) const
 | 
			
		||||
{
 | 
			
		||||
	ZipArchive::FileHeaders::const_iterator it = _in->findHeader(zipPath);
 | 
			
		||||
	if (it == _in->headerEnd())
 | 
			
		||||
		throw ZipManipulationException("entry not found: " + zipPath);
 | 
			
		||||
 | 
			
		||||
	if (_changes.find(zipPath) != _changes.end())
 | 
			
		||||
		throw ZipManipulationException("A change request exists already for entry " + zipPath);
 | 
			
		||||
 | 
			
		||||
	return it->second;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipManipulator::addOperation(const std::string& zipPath, ZipOperation::Ptr ptrOp)
 | 
			
		||||
{
 | 
			
		||||
	std::pair<Changes::iterator, bool> result = _changes.insert(std::make_pair(zipPath, ptrOp));
 | 
			
		||||
	if (!result.second)
 | 
			
		||||
		throw ZipManipulationException("A change request exists already for entry " + zipPath);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipManipulator::onEDone(const void*, const ZipLocalFileHeader& hdr)
 | 
			
		||||
{
 | 
			
		||||
	EDone(this, hdr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipArchive ZipManipulator::compress(const std::string& outFile)
 | 
			
		||||
{
 | 
			
		||||
	// write to a tmp file
 | 
			
		||||
	Poco::FileInputStream in(_zipFile);
 | 
			
		||||
	Poco::FileOutputStream out(outFile);
 | 
			
		||||
	Compress c(out, true);
 | 
			
		||||
	c.EDone += Poco::Delegate<ZipManipulator, const ZipLocalFileHeader>(this, &ZipManipulator::onEDone);
 | 
			
		||||
	
 | 
			
		||||
	ZipArchive::FileHeaders::const_iterator it = _in->headerBegin();
 | 
			
		||||
	for (; it != _in->headerEnd(); ++it)
 | 
			
		||||
	{
 | 
			
		||||
		Changes::iterator itC = _changes.find(it->first);
 | 
			
		||||
		if (itC != _changes.end())
 | 
			
		||||
		{
 | 
			
		||||
			itC->second->execute(c, in);
 | 
			
		||||
			_changes.erase(itC);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			Keep k(it->second);
 | 
			
		||||
			k.execute(c, in);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	//Remaining files are add operations!
 | 
			
		||||
	Changes::iterator itC = _changes.begin();
 | 
			
		||||
	for (; itC != _changes.end(); ++itC)
 | 
			
		||||
	{
 | 
			
		||||
		itC->second->execute(c, in);
 | 
			
		||||
	}
 | 
			
		||||
	_changes.clear();
 | 
			
		||||
	c.EDone -= Poco::Delegate<ZipManipulator, const ZipLocalFileHeader>(this, &ZipManipulator::onEDone);
 | 
			
		||||
	in.close();
 | 
			
		||||
	return c.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										54
									
								
								Zip/src/ZipOperation.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Zip/src/ZipOperation.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipOperation.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipOperation.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Manipulation
 | 
			
		||||
// Module:  ZipOperation
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipOperation.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipOperation::ZipOperation()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipOperation::~ZipOperation()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										318
									
								
								Zip/src/ZipStream.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								Zip/src/ZipStream.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,318 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipStream.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipStream.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipStream
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipStream.h"
 | 
			
		||||
#include "Poco/zlib.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/Zip/AutoDetectStream.h"
 | 
			
		||||
#include "Poco/Zip/PartialStream.h"
 | 
			
		||||
#include "Poco/Zip/ZipDataInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipException.h"
 | 
			
		||||
#include "Poco/Exception.h"
 | 
			
		||||
#include "Poco/InflatingStream.h"
 | 
			
		||||
#include "Poco/DeflatingStream.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipStreamBuf::ZipStreamBuf(std::istream& istr, const ZipLocalFileHeader& fileEntry, bool reposition):
 | 
			
		||||
	Poco::BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::in),
 | 
			
		||||
	_pIstr(&istr),
 | 
			
		||||
	_pOstr(0),
 | 
			
		||||
	_ptrBuf(),
 | 
			
		||||
	_ptrOBuf(),
 | 
			
		||||
	_ptrHelper(),
 | 
			
		||||
	_ptrOHelper(),
 | 
			
		||||
	_crc32(Poco::Checksum::TYPE_CRC32),
 | 
			
		||||
	_expectedCrc32(0),
 | 
			
		||||
	_checkCRC(true),
 | 
			
		||||
	_bytesWritten(0),
 | 
			
		||||
	_pHeader(0)
 | 
			
		||||
{
 | 
			
		||||
	if (fileEntry.isDirectory())
 | 
			
		||||
		return;
 | 
			
		||||
	_expectedCrc32 = fileEntry.getCRC();
 | 
			
		||||
	std::streamoff start = fileEntry.getDataStartPos();
 | 
			
		||||
	std::streamoff end = fileEntry.getDataEndPos();
 | 
			
		||||
	_checkCRC = !fileEntry.searchCRCAndSizesAfterData();
 | 
			
		||||
	if (fileEntry.getCompressionMethod() == ZipCommon::CM_DEFLATE)
 | 
			
		||||
	{
 | 
			
		||||
		// Fake init bytes at beginning of stream
 | 
			
		||||
		std::string init = ZipUtil::fakeZLibInitString(fileEntry.getCompressionLevel());
 | 
			
		||||
 | 
			
		||||
		// Fake adler at end of stream: just some dummy value, not checked anway
 | 
			
		||||
		std::string crc(4, ' ');
 | 
			
		||||
		if (fileEntry.searchCRCAndSizesAfterData())
 | 
			
		||||
		{
 | 
			
		||||
			_ptrHelper = new AutoDetectInputStream(istr, init, crc, reposition, start);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			_ptrHelper = new PartialInputStream(istr, start, end, reposition, init, crc);
 | 
			
		||||
		_ptrBuf = new Poco::InflatingInputStream(*_ptrHelper, Poco::InflatingStreamBuf::STREAM_ZIP);
 | 
			
		||||
	}
 | 
			
		||||
	else if (fileEntry.getCompressionMethod() == ZipCommon::CM_STORE)
 | 
			
		||||
	{
 | 
			
		||||
		if (fileEntry.searchCRCAndSizesAfterData())
 | 
			
		||||
		{
 | 
			
		||||
			_ptrBuf = new AutoDetectInputStream(istr, "", "", reposition, start);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			_ptrBuf = new PartialInputStream(istr, start, end, reposition);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		throw Poco::NotImplementedException("Unsupported compression method");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipStreamBuf::ZipStreamBuf(std::ostream& ostr, ZipLocalFileHeader& fileEntry, bool reposition):
 | 
			
		||||
	Poco::BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::out),
 | 
			
		||||
	_pIstr(0),
 | 
			
		||||
	_pOstr(&ostr),
 | 
			
		||||
	_ptrBuf(),
 | 
			
		||||
	_ptrOBuf(),
 | 
			
		||||
	_ptrHelper(),
 | 
			
		||||
	_ptrOHelper(),
 | 
			
		||||
	_crc32(Poco::Checksum::TYPE_CRC32),
 | 
			
		||||
	_expectedCrc32(0),
 | 
			
		||||
	_checkCRC(false),
 | 
			
		||||
	_bytesWritten(0),
 | 
			
		||||
	_pHeader(&fileEntry)
 | 
			
		||||
{
 | 
			
		||||
	if (fileEntry.isEncrypted())
 | 
			
		||||
		throw Poco::NotImplementedException("Encryption not supported");
 | 
			
		||||
 | 
			
		||||
	if (fileEntry.isDirectory())
 | 
			
		||||
	{
 | 
			
		||||
		// only header, no payload, zero crc
 | 
			
		||||
		fileEntry.setSearchCRCAndSizesAfterData(false);
 | 
			
		||||
		fileEntry.setCompressedSize(0);
 | 
			
		||||
		fileEntry.setUncompressedSize(0);
 | 
			
		||||
		fileEntry.setCRC(0);
 | 
			
		||||
		std::string header = fileEntry.createHeader();
 | 
			
		||||
		ostr.write(header.c_str(), static_cast<std::streamsize>(header.size()));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		fileEntry.setSearchCRCAndSizesAfterData(!reposition);
 | 
			
		||||
		if (fileEntry.getCompressionMethod() == ZipCommon::CM_DEFLATE)
 | 
			
		||||
		{
 | 
			
		||||
			int level = Z_DEFAULT_COMPRESSION;
 | 
			
		||||
			if (fileEntry.getCompressionLevel() == ZipCommon::CL_FAST || fileEntry.getCompressionLevel() == ZipCommon::CL_SUPERFAST)
 | 
			
		||||
				level = Z_BEST_SPEED;
 | 
			
		||||
			else if (fileEntry.getCompressionLevel() == ZipCommon::CL_MAXIMUM)
 | 
			
		||||
				level = Z_BEST_COMPRESSION;
 | 
			
		||||
			// ignore the zlib init string which is of size 2 and also ignore the 4 byte adler32 value at the end of the stream!
 | 
			
		||||
			_ptrOHelper = new PartialOutputStream(*_pOstr, 2, 4, false); 
 | 
			
		||||
			_ptrOBuf = new Poco::DeflatingOutputStream(*_ptrOHelper, DeflatingStreamBuf::STREAM_ZLIB, level);
 | 
			
		||||
		}
 | 
			
		||||
		else if (fileEntry.getCompressionMethod() == ZipCommon::CM_STORE)
 | 
			
		||||
		{
 | 
			
		||||
			_ptrOBuf = &ostr;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			throw Poco::NotImplementedException("Unsupported compression method");
 | 
			
		||||
		}
 | 
			
		||||
		// now write the header to the ostr!
 | 
			
		||||
		std::string header = fileEntry.createHeader();
 | 
			
		||||
		ostr.write(header.c_str(), static_cast<std::streamsize>(header.size()));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipStreamBuf::~ZipStreamBuf()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int ZipStreamBuf::readFromDevice(char* buffer, std::streamsize length)
 | 
			
		||||
{
 | 
			
		||||
	if (!_ptrBuf) return 0; // directory entry
 | 
			
		||||
	_ptrBuf->read(buffer, length);
 | 
			
		||||
	int cnt = _ptrBuf->gcount();
 | 
			
		||||
	if (cnt > 0)
 | 
			
		||||
	{
 | 
			
		||||
		_crc32.update(buffer, cnt);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (_crc32.checksum() != _expectedCrc32)
 | 
			
		||||
		{
 | 
			
		||||
			if (_checkCRC)
 | 
			
		||||
				throw ZipException("CRC failure");
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				// the CRC value is written directly after the data block
 | 
			
		||||
				// parse it directly from the input stream
 | 
			
		||||
				ZipDataInfo nfo(*_pIstr, false);
 | 
			
		||||
				// now push back the header to the stream, so that the ZipLocalFileHeader can read it
 | 
			
		||||
				Poco::Int32 size = static_cast<Poco::Int32>(nfo.getFullHeaderSize());
 | 
			
		||||
				_expectedCrc32 = nfo.getCRC32();
 | 
			
		||||
				const char* rawHeader = nfo.getRawHeader();
 | 
			
		||||
				for (Poco::Int32 i = size-1; i >= 0; --i)
 | 
			
		||||
					_pIstr->putback(rawHeader[i]);
 | 
			
		||||
				if (!crcValid())
 | 
			
		||||
					throw ZipException("CRC failure");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return cnt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int ZipStreamBuf::writeToDevice(const char* buffer, std::streamsize length)
 | 
			
		||||
{
 | 
			
		||||
	if (!_ptrOBuf) return 0; // directory entry
 | 
			
		||||
	if (length == 0)
 | 
			
		||||
		return 0;
 | 
			
		||||
	_bytesWritten += length;
 | 
			
		||||
	_ptrOBuf->write(buffer, length);
 | 
			
		||||
	_crc32.update(buffer, length);
 | 
			
		||||
	return length;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipStreamBuf::close()
 | 
			
		||||
{
 | 
			
		||||
	if (_ptrOBuf && _pHeader)
 | 
			
		||||
	{
 | 
			
		||||
		_ptrOBuf->flush();
 | 
			
		||||
		DeflatingOutputStream* pDO = dynamic_cast<DeflatingOutputStream*>(_ptrOBuf.get());
 | 
			
		||||
		if (pDO)
 | 
			
		||||
			pDO->close();
 | 
			
		||||
		if (_ptrOHelper)
 | 
			
		||||
		{
 | 
			
		||||
			_ptrOHelper->flush();
 | 
			
		||||
			_ptrOHelper->close();
 | 
			
		||||
		}
 | 
			
		||||
		_ptrOBuf = 0;
 | 
			
		||||
		poco_assert (*_pOstr);
 | 
			
		||||
		// write an extra datablock if required
 | 
			
		||||
		// or fix the crc entries
 | 
			
		||||
		if (_pHeader->searchCRCAndSizesAfterData())
 | 
			
		||||
		{
 | 
			
		||||
			ZipDataInfo info;
 | 
			
		||||
			info.setCRC32(_crc32.checksum());
 | 
			
		||||
			info.setUncompressedSize(_bytesWritten);
 | 
			
		||||
			info.setCompressedSize(static_cast<Poco::UInt32>(_ptrOHelper->bytesWritten()));
 | 
			
		||||
			_pOstr->write(info.getRawHeader(), static_cast<std::streamsize>(info.getFullHeaderSize()));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			poco_check_ptr (_pHeader);
 | 
			
		||||
			_pHeader->setCRC(_crc32.checksum());
 | 
			
		||||
			_pHeader->setUncompressedSize(_bytesWritten);
 | 
			
		||||
			_pHeader->setCompressedSize(static_cast<Poco::UInt32>(_ptrOHelper->bytesWritten()));
 | 
			
		||||
			_pOstr->seekp(_pHeader->getStartPos(), std::ios_base::beg);
 | 
			
		||||
			poco_assert (*_pOstr);
 | 
			
		||||
			std::string header = _pHeader->createHeader();
 | 
			
		||||
			_pOstr->write(header.c_str(), static_cast<std::streamsize>(header.size()));
 | 
			
		||||
			_pOstr->seekp(0, std::ios_base::end);
 | 
			
		||||
			poco_assert (*_pOstr);
 | 
			
		||||
		}
 | 
			
		||||
		_pHeader = 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool ZipStreamBuf::crcValid() const
 | 
			
		||||
{
 | 
			
		||||
	if (!_ptrBuf) return true; // directory entry
 | 
			
		||||
	return _crc32.checksum() == _expectedCrc32;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipIOS::ZipIOS(std::istream& istr, const ZipLocalFileHeader& fileEntry, bool reposition): _buf(istr, fileEntry, reposition)
 | 
			
		||||
{
 | 
			
		||||
	poco_ios_init(&_buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipIOS::ZipIOS(std::ostream& ostr, ZipLocalFileHeader& fileEntry, bool reposition): _buf(ostr, fileEntry, reposition)
 | 
			
		||||
{
 | 
			
		||||
	poco_ios_init(&_buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipIOS::~ZipIOS()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipStreamBuf* ZipIOS::rdbuf()
 | 
			
		||||
{
 | 
			
		||||
	return &_buf;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipInputStream::ZipInputStream(std::istream& istr, const ZipLocalFileHeader& fileEntry, bool reposition): ZipIOS(istr, fileEntry, reposition), std::istream(&_buf)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipInputStream::~ZipInputStream()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool ZipInputStream::crcValid() const
 | 
			
		||||
{
 | 
			
		||||
	return _buf.crcValid();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipOutputStream::ZipOutputStream(std::ostream& ostr, ZipLocalFileHeader& fileEntry, bool seekableOutput): ZipIOS(ostr, fileEntry, seekableOutput), std::ostream(&_buf)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipOutputStream::~ZipOutputStream()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipOutputStream::close()
 | 
			
		||||
{
 | 
			
		||||
	flush();
 | 
			
		||||
	_buf.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										212
									
								
								Zip/src/ZipUtil.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								Zip/src/ZipUtil.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,212 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipUtil.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/src/ZipUtil.cpp#4 $
 | 
			
		||||
//
 | 
			
		||||
// Library: Zip
 | 
			
		||||
// Package: Zip
 | 
			
		||||
// Module:  ZipUtil
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/ZipUtil.h"
 | 
			
		||||
#include "Poco/Zip/ZipException.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipFileInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipDataInfo.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchiveInfo.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace Poco {
 | 
			
		||||
namespace Zip {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Poco::DateTime ZipUtil::parseDateTime(const char* pVal, const Poco::UInt32 timePos, const Poco::UInt32 datePos)
 | 
			
		||||
{
 | 
			
		||||
	Poco::UInt16 time = ZipUtil::get16BitValue(pVal, timePos);
 | 
			
		||||
	Poco::UInt16 date = ZipUtil::get16BitValue(pVal, datePos);
 | 
			
		||||
	//TIME: second 0-4, minute 5-10, hour 11-15, second resolution is 2!
 | 
			
		||||
	int sec = 2*(time & 0x001fu);         // 0000 0000 0001 1111
 | 
			
		||||
	int min = ((time & 0x07e0u) >> 5);  // 0000 0111 1110 0000
 | 
			
		||||
	int hour= ((time & 0xf800u) >> 11); // 1111 1000 0000 0000
 | 
			
		||||
 | 
			
		||||
	//DATE: day 0-4, month 5-8, year (starting with 1980): 9-16
 | 
			
		||||
	int day = (date & 0x001fu);        // 0000 0000 0001 1111
 | 
			
		||||
	int mon = ((date & 0x01e0u) >> 5); // 0000 0001 1110 0000
 | 
			
		||||
	int year= 1980+((date & 0xfe00u) >> 9); // 1111 1110 0000 0000
 | 
			
		||||
	return Poco::DateTime(year, mon, day, hour, min, sec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipUtil::setDateTime(const Poco::DateTime& dt, char* pVal, const Poco::UInt32 timePos, const Poco::UInt32 datePos)
 | 
			
		||||
{
 | 
			
		||||
	//TIME: second 0-4, minute 5-10, hour 11-15
 | 
			
		||||
	Poco::UInt16 time = static_cast<Poco::UInt16>((dt.second()/2) + (dt.minute()<<5) + (dt.hour()<<11));
 | 
			
		||||
	//DATE: day 0-4, month 5-8, year (starting with 1980): 9-16
 | 
			
		||||
	int year = dt.year() - 1980;
 | 
			
		||||
	if (year<0)
 | 
			
		||||
		year = 0;
 | 
			
		||||
	Poco::UInt16 date = static_cast<Poco::UInt16>(dt.day() + (dt.month()<<5) + (year<<9));
 | 
			
		||||
	ZipUtil::set16BitValue(time, pVal, timePos);
 | 
			
		||||
	ZipUtil::set16BitValue(date, pVal, datePos);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
std::string ZipUtil::fakeZLibInitString(ZipCommon::CompressionLevel cl)
 | 
			
		||||
{
 | 
			
		||||
	std::string init(2, ' ');
 | 
			
		||||
 | 
			
		||||
	// compression info:
 | 
			
		||||
	// deflate is used, bit 0-3: 0x08
 | 
			
		||||
	// dictionary size is always 32k: calc ld2(32k)-8 = ld2(2^15) - 8 = 15 - 8 = 7 --> bit 4-7: 0x70
 | 
			
		||||
	init[0] = '\x78';
 | 
			
		||||
 | 
			
		||||
	// now fake flags
 | 
			
		||||
	// bits 0-4 check bits: set them so that init[0]*256+init[1] % 31 == 0
 | 
			
		||||
	// bit 5: preset dictionary? always no for us, set to 0
 | 
			
		||||
	// bits 6-7: compression level: 00 very fast, 01 fast, 10 normal, 11 best
 | 
			
		||||
	if (cl == ZipCommon::CL_SUPERFAST)
 | 
			
		||||
		init[1] = '\x00';
 | 
			
		||||
	else if (cl == ZipCommon::CL_FAST)
 | 
			
		||||
		init[1] = '\x40';
 | 
			
		||||
	else if (cl == ZipCommon::CL_NORMAL)
 | 
			
		||||
		init[1] = '\x80';
 | 
			
		||||
	else
 | 
			
		||||
		init[1] = '\xc0';
 | 
			
		||||
	// now set the last 5 bits
 | 
			
		||||
	Poco::UInt16 tmpVal = ((Poco::UInt16)init[0])*256+((unsigned char)init[1]);
 | 
			
		||||
	char checkBits = (31 - (char)(tmpVal%31));
 | 
			
		||||
	init[1] |= checkBits; // set the lower 5 bits
 | 
			
		||||
	tmpVal = ((Poco::UInt16)init[0])*256+((unsigned char)init[1]);
 | 
			
		||||
	poco_assert_dbg ((tmpVal % 31) == 0);
 | 
			
		||||
	return init;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipUtil::sync(std::istream& in)
 | 
			
		||||
{
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		PREFIX = 2, 
 | 
			
		||||
		BUFFER_SIZE = 1024
 | 
			
		||||
	};
 | 
			
		||||
	char temp[BUFFER_SIZE];
 | 
			
		||||
	in.read(temp, PREFIX);
 | 
			
		||||
	std::size_t tempPos = PREFIX;
 | 
			
		||||
 | 
			
		||||
	while (in.good() && !in.eof())
 | 
			
		||||
	{ 
 | 
			
		||||
		// all zip headers start withe same 2byte prefix
 | 
			
		||||
		if(std::memcmp(ZipLocalFileHeader::HEADER, &temp[tempPos - PREFIX], PREFIX) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			// we have a possible header!
 | 
			
		||||
			// read the next 2 bytes
 | 
			
		||||
			in.read(temp+tempPos, PREFIX);
 | 
			
		||||
			tempPos += PREFIX;
 | 
			
		||||
			if (std::memcmp(ZipLocalFileHeader::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0 || 
 | 
			
		||||
				std::memcmp(ZipArchiveInfo::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0 || 
 | 
			
		||||
				std::memcmp(ZipFileInfo::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0 ||
 | 
			
		||||
				std::memcmp(ZipDataInfo::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0)
 | 
			
		||||
			{
 | 
			
		||||
				if (std::memcmp(ZipLocalFileHeader::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0)
 | 
			
		||||
				{
 | 
			
		||||
					in.putback(ZipLocalFileHeader::HEADER[3]);
 | 
			
		||||
					in.putback(ZipLocalFileHeader::HEADER[2]);
 | 
			
		||||
					in.putback(ZipLocalFileHeader::HEADER[1]);
 | 
			
		||||
					in.putback(ZipLocalFileHeader::HEADER[0]);
 | 
			
		||||
				}
 | 
			
		||||
				else if (std::memcmp(ZipArchiveInfo::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0)
 | 
			
		||||
				{
 | 
			
		||||
					in.putback(ZipArchiveInfo::HEADER[3]);
 | 
			
		||||
					in.putback(ZipArchiveInfo::HEADER[2]);
 | 
			
		||||
					in.putback(ZipArchiveInfo::HEADER[1]);
 | 
			
		||||
					in.putback(ZipArchiveInfo::HEADER[0]);
 | 
			
		||||
				}
 | 
			
		||||
				else if (std::memcmp(ZipFileInfo::HEADER+PREFIX, &temp[tempPos - PREFIX], PREFIX) == 0)
 | 
			
		||||
				{
 | 
			
		||||
					in.putback(ZipFileInfo::HEADER[3]);
 | 
			
		||||
					in.putback(ZipFileInfo::HEADER[2]);
 | 
			
		||||
					in.putback(ZipFileInfo::HEADER[1]);
 | 
			
		||||
					in.putback(ZipFileInfo::HEADER[0]);
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					in.putback(ZipDataInfo::HEADER[3]);
 | 
			
		||||
					in.putback(ZipDataInfo::HEADER[2]);
 | 
			
		||||
					in.putback(ZipDataInfo::HEADER[1]);
 | 
			
		||||
					in.putback(ZipDataInfo::HEADER[0]);
 | 
			
		||||
				}
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				// we have read 2 bytes, should only be one: putback the last char
 | 
			
		||||
				in.putback(temp[tempPos - 1]);
 | 
			
		||||
				--tempPos;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// read one byte
 | 
			
		||||
			in.read(temp + tempPos, 1);
 | 
			
		||||
			++tempPos;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (tempPos > (BUFFER_SIZE - ZipCommon::HEADER_SIZE))
 | 
			
		||||
		{
 | 
			
		||||
			std::memcpy(temp, &temp[tempPos - ZipCommon::HEADER_SIZE], ZipCommon::HEADER_SIZE);
 | 
			
		||||
			tempPos = ZipCommon::HEADER_SIZE;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipUtil::verifyZipEntryFileName(const std::string& fn)
 | 
			
		||||
{
 | 
			
		||||
	if (fn.find("\\") != std::string::npos)
 | 
			
		||||
		throw ZipException("Illegal entry name " + fn + " containing \\");
 | 
			
		||||
	if (fn == "/")
 | 
			
		||||
		throw ZipException("Illegal entry name /");
 | 
			
		||||
	if (fn.empty())
 | 
			
		||||
		throw ZipException("Illegal empty entry name");
 | 
			
		||||
	if (fn.find(ZipCommon::ILLEGAL_PATH) != std::string::npos)
 | 
			
		||||
		throw ZipException("Illegal entry name " + fn + " containing " + ZipCommon::ILLEGAL_PATH);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
std::string ZipUtil::validZipEntryFileName(const Poco::Path& entry)
 | 
			
		||||
{
 | 
			
		||||
	std::string fn = entry.toString(Poco::Path::PATH_UNIX);
 | 
			
		||||
	verifyZipEntryFileName(fn);
 | 
			
		||||
	return fn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace Poco::Zip
 | 
			
		||||
							
								
								
									
										18
									
								
								Zip/testsuite/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Zip/testsuite/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/testsuite/Makefile#1 $
 | 
			
		||||
#
 | 
			
		||||
# Makefile for Poco Zip testsuite
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/global
 | 
			
		||||
 | 
			
		||||
objects = ZipTestSuite Driver \
 | 
			
		||||
	ZipTest	CompressTest PartialStreamTest
 | 
			
		||||
 | 
			
		||||
target         = testrunner
 | 
			
		||||
target_version = 1
 | 
			
		||||
target_libs    = PocoZip PocoNet PocoFoundation CppUnit
 | 
			
		||||
 | 
			
		||||
include $(POCO_BASE)/build/rules/exec
 | 
			
		||||
							
								
								
									
										9
									
								
								Zip/testsuite/TestSuite.vmsbuild
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Zip/testsuite/TestSuite.vmsbuild
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#
 | 
			
		||||
# TestSuite.vmsbuild
 | 
			
		||||
#
 | 
			
		||||
# $Id: //poco/1.3/Zip/testsuite/TestSuite.vmsbuild#1 $
 | 
			
		||||
#
 | 
			
		||||
EXE=TestRunner
 | 
			
		||||
ZipTestSuite
 | 
			
		||||
Driver
 | 
			
		||||
<SourceFilesHere>
 | 
			
		||||
							
								
								
									
										197
									
								
								Zip/testsuite/TestSuite_VS71.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										197
									
								
								Zip/testsuite/TestSuite_VS71.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,197 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="TestSuite"
 | 
			
		||||
	ProjectGUID="{9665fc3c-db71-4c6c-aaee-aafd73cb31e7}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\include;..\..\Foundation\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Net\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="TRUE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="CppUnitd.lib WinTestRunnerd.lib PocoFoundationd.lib PocoZipd.lib PocoNetd.lib"
 | 
			
		||||
				OutputFile="bin/TestSuited.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="bin/TestSuited.pdb"
 | 
			
		||||
				SubSystem="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="TRUE"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="TRUE"
 | 
			
		||||
				OptimizeForWindowsApplication="TRUE"
 | 
			
		||||
				AdditionalIncludeDirectories="..\include;..\..\Foundation\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Net\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="TRUE"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="FALSE"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="TRUE"
 | 
			
		||||
				ForceConformanceInForLoopScope="TRUE"
 | 
			
		||||
				RuntimeTypeInfo="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="TRUE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="CppUnit.lib WinTestRunner.lib PocoFoundation.lib PocoZip.lib PocoNet.lib"
 | 
			
		||||
				OutputFile="bin/TestSuite.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="FALSE"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="2"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Zip"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\CompressTest.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStreamTest.h">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTest.h">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\CompressTest.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStreamTest.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTest.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="_Suite"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTestSuite.h">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTestSuite.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="_Driver"
 | 
			
		||||
			Filter="">
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				Filter="">
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\WinDriver.cpp">
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										267
									
								
								Zip/testsuite/TestSuite_VS80.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								Zip/testsuite/TestSuite_VS80.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,267 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="8,00"
 | 
			
		||||
	Name="TestSuite"
 | 
			
		||||
	ProjectGUID="{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\include;..\..\Foundation\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Net\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="CppUnitd.lib WinTestRunnerd.lib PocoFoundationd.lib PocoZipd.lib PocoNetd.lib"
 | 
			
		||||
				OutputFile="bin/TestSuited.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="bin/TestSuited.pdb"
 | 
			
		||||
				SubSystem="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\include;..\..\Foundation\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Net\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="3"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="CppUnit.lib WinTestRunner.lib PocoFoundation.lib PocoZip.lib PocoNet.lib"
 | 
			
		||||
				OutputFile="bin/TestSuite.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="2"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Zip"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\CompressTest.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStreamTest.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTest.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\CompressTest.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStreamTest.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTest.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="_Suite"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTestSuite.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTestSuite.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="_Driver"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\WinDriver.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										267
									
								
								Zip/testsuite/TestSuite_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								Zip/testsuite/TestSuite_vs90.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,267 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="9.00"
 | 
			
		||||
	Name="TestSuite"
 | 
			
		||||
	ProjectGUID="{9665FC3C-DB71-4C6C-AAEE-AAFD73CB31E7}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="debug_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\debug_shared"
 | 
			
		||||
			IntermediateDirectory="obj\debug_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\include;..\..\Foundation\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Net\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				BufferSecurityCheck="true"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="CppUnitd.lib WinTestRunnerd.lib PocoFoundationd.lib PocoZipd.lib PocoNetd.lib"
 | 
			
		||||
				OutputFile="bin/TestSuited.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="bin/TestSuited.pdb"
 | 
			
		||||
				SubSystem="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="release_shared|Win32"
 | 
			
		||||
			OutputDirectory="obj\release_shared"
 | 
			
		||||
			IntermediateDirectory="obj\release_shared"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="2"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="4"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\include;..\..\Foundation\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Net\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;POCO_DLL;WINVER=0x0500"
 | 
			
		||||
				StringPooling="true"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				TreatWChar_tAsBuiltInType="true"
 | 
			
		||||
				ForceConformanceInForLoopScope="true"
 | 
			
		||||
				RuntimeTypeInfo="true"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="false"
 | 
			
		||||
				DebugInformationFormat="3"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				AdditionalDependencies="CppUnit.lib WinTestRunner.lib PocoFoundation.lib PocoZip.lib PocoNet.lib"
 | 
			
		||||
				OutputFile="bin/TestSuite.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				ProgramDatabaseFile=""
 | 
			
		||||
				SubSystem="2"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Zip"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\CompressTest.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStreamTest.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTest.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\CompressTest.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\PartialStreamTest.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTest.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="_Suite"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Header Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTestSuite.h"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\ZipTestSuite.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="_Driver"
 | 
			
		||||
			>
 | 
			
		||||
			<Filter
 | 
			
		||||
				Name="Source Files"
 | 
			
		||||
				>
 | 
			
		||||
				<File
 | 
			
		||||
					RelativePath=".\src\WinDriver.cpp"
 | 
			
		||||
					>
 | 
			
		||||
				</File>
 | 
			
		||||
			</Filter>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Zip/testsuite/data/data.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Zip/testsuite/data/data.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Zip/testsuite/data/doc.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Zip/testsuite/data/doc.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Zip/testsuite/data/java.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Zip/testsuite/data/java.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Zip/testsuite/data/test.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Zip/testsuite/data/test.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										165
									
								
								Zip/testsuite/src/CompressTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								Zip/testsuite/src/CompressTest.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,165 @@
 | 
			
		||||
//
 | 
			
		||||
// CompressTest.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/CompressTest.cpp#5 $
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "CompressTest.h"
 | 
			
		||||
#include "ZipTest.h"
 | 
			
		||||
#include "Poco/Zip/Compress.h"
 | 
			
		||||
#include "Poco/Zip/ZipManipulator.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include "Poco/FileStream.h"
 | 
			
		||||
#include "CppUnit/TestCaller.h"
 | 
			
		||||
#include "CppUnit/TestSuite.h"
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using namespace Poco::Zip;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CompressTest::CompressTest(const std::string& name): CppUnit::TestCase(name)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CompressTest::~CompressTest()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::testSingleFile()
 | 
			
		||||
{
 | 
			
		||||
	std::ofstream out("appinf.zip", std::ios::binary);
 | 
			
		||||
	Poco::Path theFile(ZipTest::getTestFile("test.zip"));
 | 
			
		||||
	Compress c(out, true);
 | 
			
		||||
	c.addFile(theFile, theFile.getFileName());
 | 
			
		||||
	ZipArchive a(c.close());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::testDirectory()
 | 
			
		||||
{
 | 
			
		||||
	std::ofstream out("pocobin.zip", std::ios::binary);
 | 
			
		||||
	Poco::File aFile("some/");
 | 
			
		||||
	if (aFile.exists())
 | 
			
		||||
		aFile.remove(true);
 | 
			
		||||
	Poco::File aDir("some/recursive/dir/");
 | 
			
		||||
	aDir.createDirectories();
 | 
			
		||||
	Poco::File aDir2("some/other/recursive/dir/");
 | 
			
		||||
	aDir2.createDirectories();
 | 
			
		||||
	Poco::File aF("some/recursive/dir/test.file");
 | 
			
		||||
	aF.createFile();
 | 
			
		||||
	Poco::FileOutputStream fos(aF.path());
 | 
			
		||||
	fos << "just some test data";
 | 
			
		||||
	fos.close();
 | 
			
		||||
 | 
			
		||||
	Poco::Path theFile(aFile.path());
 | 
			
		||||
	theFile.makeDirectory();
 | 
			
		||||
	Compress c(out, true);
 | 
			
		||||
	c.addRecursive(theFile, ZipCommon::CL_MAXIMUM, false, theFile);
 | 
			
		||||
	ZipArchive a(c.close());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::testManipulator()
 | 
			
		||||
{
 | 
			
		||||
	{
 | 
			
		||||
		std::ofstream out("appinf.zip", std::ios::binary);
 | 
			
		||||
		Poco::Path theFile(ZipTest::getTestFile("test.zip"));
 | 
			
		||||
		Compress c(out, true);
 | 
			
		||||
		c.addFile(theFile, theFile.getFileName());
 | 
			
		||||
		ZipArchive a(c.close());
 | 
			
		||||
	}
 | 
			
		||||
	ZipManipulator zm("appinf.zip", true);
 | 
			
		||||
	zm.renameFile("test.zip", "renamedtest.zip");
 | 
			
		||||
	zm.addFile("doc/othertest.zip", ZipTest::getTestFile("test.zip"));
 | 
			
		||||
	ZipArchive archive=zm.commit();
 | 
			
		||||
	assert (archive.findHeader("doc/othertest.zip") != archive.headerEnd());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::testManipulatorDel()
 | 
			
		||||
{
 | 
			
		||||
	{
 | 
			
		||||
		std::ofstream out("appinf.zip", std::ios::binary);
 | 
			
		||||
		Poco::Path theFile(ZipTest::getTestFile("test.zip"));
 | 
			
		||||
		Compress c(out, true);
 | 
			
		||||
		c.addFile(theFile, theFile.getFileName());
 | 
			
		||||
		ZipArchive a(c.close());
 | 
			
		||||
	}
 | 
			
		||||
	ZipManipulator zm("appinf.zip", true);
 | 
			
		||||
	zm.deleteFile("test.zip");
 | 
			
		||||
	zm.addFile("doc/data.zip", ZipTest::getTestFile("data.zip"));
 | 
			
		||||
	ZipArchive archive=zm.commit();
 | 
			
		||||
	assert (archive.findHeader("test.zip") == archive.headerEnd());
 | 
			
		||||
	assert (archive.findHeader("doc/data.zip") != archive.headerEnd());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::testManipulatorReplace()
 | 
			
		||||
{
 | 
			
		||||
	{
 | 
			
		||||
		std::ofstream out("appinf.zip", std::ios::binary);
 | 
			
		||||
		Poco::Path theFile(ZipTest::getTestFile("test.zip"));
 | 
			
		||||
		Compress c(out, true);
 | 
			
		||||
		c.addFile(theFile, theFile.getFileName());
 | 
			
		||||
		ZipArchive a(c.close());
 | 
			
		||||
	}
 | 
			
		||||
	ZipManipulator zm("appinf.zip", true);
 | 
			
		||||
	zm.replaceFile("test.zip", ZipTest::getTestFile("doc.zip"));
 | 
			
		||||
	
 | 
			
		||||
	ZipArchive archive=zm.commit();
 | 
			
		||||
	assert (archive.findHeader("test.zip") != archive.headerEnd());
 | 
			
		||||
	assert (archive.findHeader("doc.zip") == archive.headerEnd());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::setUp()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CompressTest::tearDown()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CppUnit::Test* CompressTest::suite()
 | 
			
		||||
{
 | 
			
		||||
	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("CompressTest");
 | 
			
		||||
 | 
			
		||||
	CppUnit_addTest(pSuite, CompressTest, testSingleFile);
 | 
			
		||||
	CppUnit_addTest(pSuite, CompressTest, testDirectory);
 | 
			
		||||
	CppUnit_addTest(pSuite, CompressTest, testManipulator);
 | 
			
		||||
	CppUnit_addTest(pSuite, CompressTest, testManipulatorDel);
 | 
			
		||||
	CppUnit_addTest(pSuite, CompressTest, testManipulatorReplace);
 | 
			
		||||
 | 
			
		||||
	return pSuite;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								Zip/testsuite/src/CompressTest.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								Zip/testsuite/src/CompressTest.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
//
 | 
			
		||||
// CompressTest.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/CompressTest.h#4 $
 | 
			
		||||
//
 | 
			
		||||
// Definition of the CompressTest class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef CompressTest_INCLUDED
 | 
			
		||||
#define CompressTest_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "CppUnit/TestCase.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CompressTest: public CppUnit::TestCase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	CompressTest(const std::string& name);
 | 
			
		||||
	~CompressTest();
 | 
			
		||||
 | 
			
		||||
	void testSingleFile();
 | 
			
		||||
	void testDirectory();
 | 
			
		||||
	void testManipulator();
 | 
			
		||||
	void testManipulatorDel();
 | 
			
		||||
	void testManipulatorReplace();
 | 
			
		||||
 | 
			
		||||
	void setUp();
 | 
			
		||||
	void tearDown();
 | 
			
		||||
 | 
			
		||||
	static CppUnit::Test* suite();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // CompressTest_INCLUDED
 | 
			
		||||
							
								
								
									
										39
									
								
								Zip/testsuite/src/Driver.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Zip/testsuite/src/Driver.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
//
 | 
			
		||||
// Driver.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/Driver.cpp#2 $
 | 
			
		||||
//
 | 
			
		||||
// Console-based test driver for Poco Zip.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "CppUnit/TestRunner.h"
 | 
			
		||||
#include "ZipTestSuite.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CppUnitMain(ZipTestSuite)
 | 
			
		||||
							
								
								
									
										139
									
								
								Zip/testsuite/src/PartialStreamTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								Zip/testsuite/src/PartialStreamTest.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,139 @@
 | 
			
		||||
//
 | 
			
		||||
// PartialStreamTest.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/PartialStreamTest.cpp#3 $
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "PartialStreamTest.h"
 | 
			
		||||
#include "CppUnit/TestCaller.h"
 | 
			
		||||
#include "CppUnit/TestSuite.h"
 | 
			
		||||
#include "Poco/Zip/PartialStream.h"
 | 
			
		||||
#include <sstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using namespace Poco::Zip;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialStreamTest::PartialStreamTest(const std::string& name): CppUnit::TestCase(name)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartialStreamTest::~PartialStreamTest()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamTest::testReading()
 | 
			
		||||
{
 | 
			
		||||
	std::string message("some dummy message !");
 | 
			
		||||
	std::string prefix("pre ");
 | 
			
		||||
	std::string postfix(" post");
 | 
			
		||||
	std::string result(prefix+message+postfix);
 | 
			
		||||
	std::istringstream istr(message);
 | 
			
		||||
	PartialInputStream in(istr, 0, static_cast<std::streamoff>(message.length()), true, prefix, postfix);
 | 
			
		||||
	char buf[124];
 | 
			
		||||
	in.read(buf, 124);
 | 
			
		||||
	std::string res(buf, in.gcount());
 | 
			
		||||
	poco_assert (res == result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamTest::testWriting()
 | 
			
		||||
{
 | 
			
		||||
	std::string prefix("X");
 | 
			
		||||
	std::string message("some test message");
 | 
			
		||||
	std::string postfix("YYY");
 | 
			
		||||
	std::string result(prefix+message+postfix);
 | 
			
		||||
	std::ostringstream ostr;
 | 
			
		||||
	PartialOutputStream out(ostr, prefix.size(), postfix.size());
 | 
			
		||||
	out.write(result.c_str(), static_cast<std::streamsize>(result.length()));
 | 
			
		||||
	poco_assert (out.good());
 | 
			
		||||
	out.close();
 | 
			
		||||
	std::string res (ostr.str());
 | 
			
		||||
	poco_assert (out.bytesWritten() == message.size());
 | 
			
		||||
	poco_assert (message == res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamTest::testWritingZero()
 | 
			
		||||
{
 | 
			
		||||
	std::string prefix("X");
 | 
			
		||||
	std::string message;
 | 
			
		||||
	std::string postfix("YYY");
 | 
			
		||||
	std::string result(prefix+message+postfix);
 | 
			
		||||
	std::ostringstream ostr;
 | 
			
		||||
	PartialOutputStream out(ostr, prefix.size(), postfix.size());
 | 
			
		||||
	out.write(result.c_str(), static_cast<std::streamsize>(result.length()));
 | 
			
		||||
	poco_assert (out.good());
 | 
			
		||||
	out.close();
 | 
			
		||||
	std::string res (ostr.str());
 | 
			
		||||
	poco_assert (out.bytesWritten() == message.size());
 | 
			
		||||
	poco_assert (message == res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamTest::testWritingOne()
 | 
			
		||||
{
 | 
			
		||||
	std::string prefix("X");
 | 
			
		||||
	std::string message("a");
 | 
			
		||||
	std::string postfix("YYY");
 | 
			
		||||
	std::string result(prefix+message+postfix);
 | 
			
		||||
	std::ostringstream ostr;
 | 
			
		||||
	PartialOutputStream out(ostr, prefix.size(), postfix.size());
 | 
			
		||||
	out.write(result.c_str(), static_cast<std::streamsize>(result.length()));
 | 
			
		||||
	poco_assert (out.good());
 | 
			
		||||
	out.close();
 | 
			
		||||
	std::string res (ostr.str());
 | 
			
		||||
	poco_assert (out.bytesWritten() == message.size());
 | 
			
		||||
	poco_assert (message == res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamTest::setUp()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PartialStreamTest::tearDown()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CppUnit::Test* PartialStreamTest::suite()
 | 
			
		||||
{
 | 
			
		||||
	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("PartialStreamTest");
 | 
			
		||||
 | 
			
		||||
	CppUnit_addTest(pSuite, PartialStreamTest, testReading);
 | 
			
		||||
	CppUnit_addTest(pSuite, PartialStreamTest, testWriting);
 | 
			
		||||
	CppUnit_addTest(pSuite, PartialStreamTest, testWritingZero);
 | 
			
		||||
	CppUnit_addTest(pSuite, PartialStreamTest, testWritingOne);
 | 
			
		||||
 | 
			
		||||
	return pSuite;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								Zip/testsuite/src/PartialStreamTest.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								Zip/testsuite/src/PartialStreamTest.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
//
 | 
			
		||||
// PartialStreamTest.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/PartialStreamTest.h#3 $
 | 
			
		||||
//
 | 
			
		||||
// Definition of the PartialStreamTest class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PartialStreamTest_INCLUDED
 | 
			
		||||
#define PartialStreamTest_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "CppUnit/TestCase.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PartialStreamTest: public CppUnit::TestCase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	PartialStreamTest(const std::string& name);
 | 
			
		||||
	~PartialStreamTest();
 | 
			
		||||
 | 
			
		||||
	void testReading();
 | 
			
		||||
	void testWriting();
 | 
			
		||||
	void testWritingZero();
 | 
			
		||||
	void testWritingOne();
 | 
			
		||||
 | 
			
		||||
	void setUp();
 | 
			
		||||
	void tearDown();
 | 
			
		||||
 | 
			
		||||
	static CppUnit::Test* suite();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // PartialStreamTest_INCLUDED
 | 
			
		||||
							
								
								
									
										50
									
								
								Zip/testsuite/src/WinDriver.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Zip/testsuite/src/WinDriver.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
//
 | 
			
		||||
// WinDriver.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/WinDriver.cpp#2 $
 | 
			
		||||
//
 | 
			
		||||
// Windows test driver for Poco Zip.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "WinTestRunner/WinTestRunner.h"
 | 
			
		||||
#include "ZipTestSuite.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestDriver: public CppUnit::WinTestRunnerApp
 | 
			
		||||
{
 | 
			
		||||
	void TestMain()
 | 
			
		||||
	{
 | 
			
		||||
		CppUnit::WinTestRunner runner;
 | 
			
		||||
		runner.addTest(ZipTestSuite::suite());
 | 
			
		||||
		runner.run();
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TestDriver theDriver;
 | 
			
		||||
							
								
								
									
										286
									
								
								Zip/testsuite/src/ZipTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										286
									
								
								Zip/testsuite/src/ZipTest.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,286 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipTest.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/ZipTest.cpp#6 $
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "ZipTest.h"
 | 
			
		||||
#include "Poco/Zip/SkipCallback.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "Poco/Zip/ZipArchive.h"
 | 
			
		||||
#include "Poco/Zip/ZipStream.h"
 | 
			
		||||
#include "Poco/Zip/Decompress.h"
 | 
			
		||||
#include "Poco/StreamCopier.h"
 | 
			
		||||
#include "Poco/File.h"
 | 
			
		||||
#include "Poco/URI.h"
 | 
			
		||||
#include "Poco/Path.h"
 | 
			
		||||
#include "Poco/Delegate.h"
 | 
			
		||||
#include "Poco/Net/HTTPClientSession.h"
 | 
			
		||||
#include "Poco/Net/HTTPRequest.h"
 | 
			
		||||
#include "Poco/Net/HTTPResponse.h"
 | 
			
		||||
#include "Poco/Net/HTTPServer.h"
 | 
			
		||||
#include "Poco/Net/HTTPServerParams.h"
 | 
			
		||||
#include "Poco/Net/AbstractHTTPRequestHandler.h"
 | 
			
		||||
#include "Poco/Net/HTTPRequestHandlerFactory.h"
 | 
			
		||||
#include "Poco/Net/HTTPServerRequest.h"
 | 
			
		||||
#include "Poco/Net/HTTPServerResponse.h"
 | 
			
		||||
#include "Poco/Net/ServerSocket.h"
 | 
			
		||||
#include "Poco/StreamCopier.h"
 | 
			
		||||
#include "CppUnit/TestCaller.h"
 | 
			
		||||
#include "CppUnit/TestSuite.h"
 | 
			
		||||
#include <fstream>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using namespace Poco::Zip;
 | 
			
		||||
using namespace Poco::Net;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace
 | 
			
		||||
{
 | 
			
		||||
	class ZipFileRequestHandler: public HTTPRequestHandler
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		ZipFileRequestHandler()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
 | 
			
		||||
		{
 | 
			
		||||
			response.setChunkedTransferEncoding(true);
 | 
			
		||||
			std::string testFile = ZipTest::getTestFile("test.zip");
 | 
			
		||||
			std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
			poco_assert (inp);
 | 
			
		||||
		
 | 
			
		||||
			response.setContentType("application/zip");
 | 
			
		||||
			
 | 
			
		||||
			std::ostream& ostr = response.send();
 | 
			
		||||
			Poco::StreamCopier::copyStream(inp, ostr);
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	class RequestHandlerFactory: public HTTPRequestHandlerFactory
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request)
 | 
			
		||||
		{
 | 
			
		||||
			if (request.getURI() == "/test.zip")
 | 
			
		||||
				return new ZipFileRequestHandler;
 | 
			
		||||
			else
 | 
			
		||||
				return 0;
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ZipTest::ZipTest(const std::string& name): CppUnit::TestCase(name)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ZipTest::~ZipTest()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::testSkipSingleFile()
 | 
			
		||||
{
 | 
			
		||||
	std::string testFile = getTestFile("test.zip");
 | 
			
		||||
	std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
	poco_assert (inp);
 | 
			
		||||
	SkipCallback skip;
 | 
			
		||||
	ZipLocalFileHeader hdr(inp, false, skip);
 | 
			
		||||
	poco_assert (ZipCommon::HS_FAT == hdr.getHostSystem());
 | 
			
		||||
	int major = hdr.getMajorVersionNumber();
 | 
			
		||||
	int minor = hdr.getMinorVersionNumber();
 | 
			
		||||
	poco_assert (major <= 2);
 | 
			
		||||
	std::size_t hdrSize = hdr.getHeaderSize();
 | 
			
		||||
	poco_assert (hdrSize > 30);
 | 
			
		||||
	ZipCommon::CompressionMethod cm = hdr.getCompressionMethod();
 | 
			
		||||
	poco_assert (!hdr.isEncrypted());
 | 
			
		||||
	Poco::DateTime aDate = hdr.lastModifiedAt();
 | 
			
		||||
	Poco::UInt32 cS = hdr.getCompressedSize();
 | 
			
		||||
	Poco::UInt32 uS = hdr.getUncompressedSize();
 | 
			
		||||
	const std::string& fileName = hdr.getFileName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::testDecompressSingleFile()
 | 
			
		||||
{
 | 
			
		||||
	std::string testFile = getTestFile("test.zip");
 | 
			
		||||
	std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
	poco_assert (inp);
 | 
			
		||||
	ZipArchive arch(inp);
 | 
			
		||||
	ZipArchive::FileHeaders::const_iterator it = arch.findHeader("Zip_VS71.vcproj");
 | 
			
		||||
	poco_assert (it != arch.headerEnd());
 | 
			
		||||
	ZipInputStream zipin (inp, it->second);
 | 
			
		||||
	std::ostringstream out(std::ios::binary);
 | 
			
		||||
	Poco::StreamCopier::copyStream(zipin, out);
 | 
			
		||||
	poco_assert(!out.str().empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::testCrcAndSizeAfterData()
 | 
			
		||||
{
 | 
			
		||||
	std::string testFile = getTestFile("java.zip");
 | 
			
		||||
	std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
	poco_assert (inp);
 | 
			
		||||
	Decompress dec(inp, Poco::Path());
 | 
			
		||||
	dec.EError += Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	dec.decompressAllFiles();
 | 
			
		||||
	dec.EError -= Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	poco_assert (_errCnt == 0);
 | 
			
		||||
	poco_assert (!dec.mapping().empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::testCrcAndSizeAfterDataWithArchive()
 | 
			
		||||
{
 | 
			
		||||
	std::string testFile = getTestFile("java.zip");
 | 
			
		||||
	std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
	poco_assert (inp);
 | 
			
		||||
	Poco::Zip::ZipArchive zip(inp);
 | 
			
		||||
	inp.clear();
 | 
			
		||||
	inp.seekg(0);
 | 
			
		||||
	Poco::Zip::ZipArchive::FileHeaders::const_iterator it = zip.headerBegin();
 | 
			
		||||
	for ( ; it!=zip.headerEnd(); ++it)
 | 
			
		||||
	{
 | 
			
		||||
		Poco::Zip::ZipInputStream zipis(inp,it->second);
 | 
			
		||||
		Poco::Path path(it->second.getFileName());
 | 
			
		||||
		if (path.isFile())
 | 
			
		||||
		{
 | 
			
		||||
			std::ofstream os("test.dat");
 | 
			
		||||
			Poco::StreamCopier::copyStream(zipis,os);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
std::string ZipTest::getTestFile(const std::string& testFile)
 | 
			
		||||
{
 | 
			
		||||
	Poco::Path root;
 | 
			
		||||
	root.makeAbsolute();
 | 
			
		||||
	Poco::Path result;
 | 
			
		||||
	while (!Poco::Path::find(root.toString(), "data", result))
 | 
			
		||||
	{
 | 
			
		||||
		root.makeParent();
 | 
			
		||||
		if (root.toString().empty() || root.toString() == "/")
 | 
			
		||||
			throw Poco::FileNotFoundException("Didn't find data subdir");
 | 
			
		||||
	}
 | 
			
		||||
	result.makeDirectory();
 | 
			
		||||
	result.setFileName(testFile);
 | 
			
		||||
	Poco::File aFile(result.toString());
 | 
			
		||||
	if (!aFile.exists() || (aFile.exists() && !aFile.isFile()))
 | 
			
		||||
		throw Poco::FileNotFoundException("Didn't find " + testFile);
 | 
			
		||||
	
 | 
			
		||||
	return result.toString();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::testDecompress()
 | 
			
		||||
{
 | 
			
		||||
	std::string testFile = getTestFile("test.zip");
 | 
			
		||||
	std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
	poco_assert (inp);
 | 
			
		||||
	Decompress dec(inp, Poco::Path());
 | 
			
		||||
	dec.EError += Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	dec.decompressAllFiles();
 | 
			
		||||
	dec.EError -= Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	poco_assert (_errCnt == 0);
 | 
			
		||||
	poco_assert (!dec.mapping().empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::testDecompressFlat()
 | 
			
		||||
{
 | 
			
		||||
	std::string testFile = getTestFile("test.zip");
 | 
			
		||||
	std::ifstream inp(testFile.c_str(), std::ios::binary);
 | 
			
		||||
	poco_assert (inp);
 | 
			
		||||
	Decompress dec(inp, Poco::Path(), true);
 | 
			
		||||
	dec.EError += Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	dec.decompressAllFiles();
 | 
			
		||||
	dec.EError -= Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	poco_assert (_errCnt == 0);
 | 
			
		||||
	poco_assert (!dec.mapping().empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::decompressDirectlyFromNet()
 | 
			
		||||
{
 | 
			
		||||
	ServerSocket svs(22222);
 | 
			
		||||
	HTTPServerParams* pParams = new HTTPServerParams;
 | 
			
		||||
	pParams->setKeepAlive(true);
 | 
			
		||||
	HTTPServer srv(new RequestHandlerFactory, svs, pParams);
 | 
			
		||||
	srv.start();
 | 
			
		||||
	Poco::URI uri("http://localhost:22222/test.zip");
 | 
			
		||||
 | 
			
		||||
	HTTPClientSession session("localhost", 22222);
 | 
			
		||||
	HTTPRequest req(HTTPRequest::HTTP_GET, "/test.zip", HTTPMessage::HTTP_1_1);
 | 
			
		||||
	session.sendRequest(req);
 | 
			
		||||
	HTTPResponse res;
 | 
			
		||||
	std::istream& rs = session.receiveResponse(res);
 | 
			
		||||
	Decompress dec(rs, Poco::Path());
 | 
			
		||||
	dec.EError += Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	dec.decompressAllFiles();
 | 
			
		||||
	dec.EError -= Poco::Delegate<ZipTest, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &ZipTest::onDecompressError);
 | 
			
		||||
	poco_assert (_errCnt == 0);
 | 
			
		||||
	poco_assert (!dec.mapping().empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::onDecompressError(const void* pSender, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string>& info)
 | 
			
		||||
{
 | 
			
		||||
	++_errCnt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::setUp()
 | 
			
		||||
{
 | 
			
		||||
	_errCnt = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ZipTest::tearDown()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CppUnit::Test* ZipTest::suite()
 | 
			
		||||
{
 | 
			
		||||
	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ZipTest");
 | 
			
		||||
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, testSkipSingleFile);
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, testDecompressSingleFile);
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, testDecompress);
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, testDecompressFlat);
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, decompressDirectlyFromNet);
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, testCrcAndSizeAfterData);
 | 
			
		||||
	CppUnit_addTest(pSuite, ZipTest, testCrcAndSizeAfterDataWithArchive);
 | 
			
		||||
	return pSuite;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										73
									
								
								Zip/testsuite/src/ZipTest.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								Zip/testsuite/src/ZipTest.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipTest.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/ZipTest.h#5 $
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipTest class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef ZipTest_INCLUDED
 | 
			
		||||
#define ZipTest_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "Poco/Zip/Zip.h"
 | 
			
		||||
#include "Poco/Zip/ZipLocalFileHeader.h"
 | 
			
		||||
#include "CppUnit/TestCase.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipTest: public CppUnit::TestCase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	ZipTest(const std::string& name);
 | 
			
		||||
	~ZipTest();
 | 
			
		||||
 | 
			
		||||
	void testSkipSingleFile();
 | 
			
		||||
	void testDecompressSingleFile();
 | 
			
		||||
	void testDecompress();
 | 
			
		||||
	void decompressDirectlyFromNet();
 | 
			
		||||
	void testCrcAndSizeAfterData();
 | 
			
		||||
	void testCrcAndSizeAfterDataWithArchive();
 | 
			
		||||
 | 
			
		||||
	void testDecompressFlat();
 | 
			
		||||
 | 
			
		||||
	void setUp();
 | 
			
		||||
	void tearDown();
 | 
			
		||||
 | 
			
		||||
	static CppUnit::Test* suite();
 | 
			
		||||
 | 
			
		||||
	static std::string getTestFile(const std::string& testFile);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void onDecompressError(const void* pSender, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string>& info);
 | 
			
		||||
	
 | 
			
		||||
	int _errCnt;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // ZipTest_INCLUDED
 | 
			
		||||
							
								
								
									
										48
									
								
								Zip/testsuite/src/ZipTestSuite.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Zip/testsuite/src/ZipTestSuite.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipTestSuite.cpp
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/ZipTestSuite.cpp#1 $
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "ZipTestSuite.h"
 | 
			
		||||
#include "ZipTest.h"
 | 
			
		||||
#include "PartialStreamTest.h"
 | 
			
		||||
#include "CompressTest.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CppUnit::Test* ZipTestSuite::suite()
 | 
			
		||||
{
 | 
			
		||||
	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ZipTestSuite");
 | 
			
		||||
 | 
			
		||||
	pSuite->addTest(ZipTest::suite());
 | 
			
		||||
	pSuite->addTest(PartialStreamTest::suite());
 | 
			
		||||
	pSuite->addTest(CompressTest::suite());
 | 
			
		||||
 | 
			
		||||
	return pSuite;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								Zip/testsuite/src/ZipTestSuite.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Zip/testsuite/src/ZipTestSuite.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
//
 | 
			
		||||
// ZipTestSuite.h
 | 
			
		||||
//
 | 
			
		||||
// $Id: //poco/1.3/Zip/testsuite/src/ZipTestSuite.h#1 $
 | 
			
		||||
//
 | 
			
		||||
// Definition of the ZipTestSuite class.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
 | 
			
		||||
// and Contributors.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person or organization
 | 
			
		||||
// obtaining a copy of the software and accompanying documentation covered by
 | 
			
		||||
// this license (the "Software") to use, reproduce, display, distribute,
 | 
			
		||||
// execute, and transmit the Software, and to prepare derivative works of the
 | 
			
		||||
// Software, and to permit third-parties to whom the Software is furnished to
 | 
			
		||||
// do so, all subject to the following:
 | 
			
		||||
// 
 | 
			
		||||
// The copyright notices in the Software and this entire statement, including
 | 
			
		||||
// the above license grant, this restriction and the following disclaimer,
 | 
			
		||||
// must be included in all copies of the Software, in whole or in part, and
 | 
			
		||||
// all derivative works of the Software, unless such copies or derivative
 | 
			
		||||
// works are solely in the form of machine-executable object code generated by
 | 
			
		||||
// a source language processor.
 | 
			
		||||
// 
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 | 
			
		||||
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 | 
			
		||||
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef ZipTestSuite_INCLUDED
 | 
			
		||||
#define ZipTestSuite_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "CppUnit/TestSuite.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZipTestSuite
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static CppUnit::Test* suite();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // ZipTestSuite_INCLUDED
 | 
			
		||||
		Reference in New Issue
	
	Block a user