mirror of
https://github.com/pocoproject/poco.git
synced 2025-01-31 06:35:03 +01:00
added Zip to trunk
This commit is contained in:
parent
4975ac2c44
commit
ba13c39636
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
|
322
Zip/src/Compress.cpp
Normal file
322
Zip/src/Compress.cpp
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
//
|
||||||
|
// 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);
|
||||||
|
Poco::File::FileSize size = aFile.getSize();
|
||||||
|
if (size < 16)
|
||||||
|
{
|
||||||
|
cm = ZipCommon::CM_STORE;
|
||||||
|
cl = ZipCommon::CL_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
319
Zip/src/ZipStream.cpp
Normal file
319
Zip/src/ZipStream.cpp
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
//
|
||||||
|
// 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)
|
||||||
|
{
|
||||||
|
_ptrOHelper = new PartialOutputStream(*_pOstr, 0, 0, false);
|
||||||
|
_ptrOBuf = _ptrOHelper;
|
||||||
|
}
|
||||||
|
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
|
Loading…
x
Reference in New Issue
Block a user