diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2007-04-17 04:00:00 +0400 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:15:50 +0300 |
commit | a145bfc7cf17f7bbcfae8f0064333c8ea75b455c (patch) | |
tree | 4ea458c9f35956fe080562989a702ea8c9af4b90 /CPP/7zip/Archive/GZip | |
parent | d9666cf046a8453b33b3e2fbf4d82295a9f87df3 (diff) |
4.45 beta
Diffstat (limited to 'CPP/7zip/Archive/GZip')
-rwxr-xr-x | CPP/7zip/Archive/GZip/DllExports.cpp | 125 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZip.dsp | 321 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZip.dsw | 29 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipHandler.cpp | 34 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipHandler.h | 19 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipHandlerOut.cpp | 4 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipIn.cpp | 61 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipIn.h | 9 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipOut.cpp | 2 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipRegister.cpp | 18 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipUpdate.cpp | 31 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/GZipUpdate.h | 6 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/makefile | 60 | ||||
-rwxr-xr-x | CPP/7zip/Archive/GZip/resource.rc | 5 |
14 files changed, 101 insertions, 623 deletions
diff --git a/CPP/7zip/Archive/GZip/DllExports.cpp b/CPP/7zip/Archive/GZip/DllExports.cpp deleted file mode 100755 index 3bddcfb9..00000000 --- a/CPP/7zip/Archive/GZip/DllExports.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// DLLExports.cpp - -#include "StdAfx.h" - -#include "Common/MyInitGuid.h" -#include "Common/ComTry.h" -#include "Windows/PropVariant.h" -#include "../../ICoder.h" -#include "GZipHandler.h" - -// {23170F69-40C1-278A-1000-000110EF0000} -DEFINE_GUID(CLSID_CGZipHandler, -0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xEF, 0x00, 0x00); - -// {23170F69-40C1-278B-0401-080000000100} -DEFINE_GUID(CLSID_CCompressDeflateEncoder, -0x23170F69, 0x40C1, 0x278B, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00); - -// {23170F69-40C1-278B-0401-080000000000} -DEFINE_GUID(CLSID_CCompressDeflateDecoder, -0x23170F69, 0x40C1, 0x278B, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00); - -HINSTANCE g_hInstance; -#ifndef _UNICODE -bool g_IsNT = false; -static bool IsItWindowsNT() -{ - OSVERSIONINFO versionInfo; - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if (!::GetVersionEx(&versionInfo)) - return false; - return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); -} -#endif - -#ifndef COMPRESS_DEFLATE -#include "../Common/CodecsPath.h" -CSysString GetDeflateCodecPath() -{ - return GetCodecsFolderPrefix() + TEXT("Deflate.dll"); -} -#endif - -extern "C" -BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) -{ - if (dwReason == DLL_PROCESS_ATTACH) - { - g_hInstance = hInstance; - #ifndef _UNICODE - g_IsNT = IsItWindowsNT(); - #endif - } - return TRUE; -} - -STDAPI CreateObject( - const GUID *classID, - const GUID *interfaceID, - void **outObject) -{ - COM_TRY_BEGIN - *outObject = 0; - if (*classID != CLSID_CGZipHandler) - return CLASS_E_CLASSNOTAVAILABLE; - int needIn = *interfaceID == IID_IInArchive; - int needOut = *interfaceID == IID_IOutArchive; - if (needIn || needOut) - { - NArchive::NGZip::CHandler *temp = new NArchive::NGZip::CHandler; - if (needIn) - { - CMyComPtr<IInArchive> inArchive = (IInArchive *)temp; - *outObject = inArchive.Detach(); - } - else - { - CMyComPtr<IOutArchive> outArchive = (IOutArchive *)temp; - *outObject = outArchive.Detach(); - } - } - else - return E_NOINTERFACE; - COM_TRY_END - return S_OK; -} - -STDAPI GetHandlerProperty(PROPID propID, PROPVARIANT *value) -{ - NWindows::NCOM::CPropVariant propVariant; - switch(propID) - { - case NArchive::kName: - propVariant = L"GZip"; - break; - case NArchive::kClassID: - { - if ((value->bstrVal = ::SysAllocStringByteLen( - (const char *)&CLSID_CGZipHandler, sizeof(GUID))) != 0) - value->vt = VT_BSTR; - return S_OK; - } - case NArchive::kExtension: - propVariant = L"gz gzip tgz tpz"; - break; - case NArchive::kAddExtension: - propVariant = L"* * .tar .tar"; - break; - case NArchive::kUpdate: - propVariant = true; - break; - case NArchive::kKeepName: - propVariant = true; - break; - case NArchive::kStartSignature: - { - const unsigned char sig[] = { 0x1F, 0x8B }; - if ((value->bstrVal = ::SysAllocStringByteLen((const char *)sig, 2)) != 0) - value->vt = VT_BSTR; - return S_OK; - } - } - propVariant.Detach(value); - return S_OK; -} diff --git a/CPP/7zip/Archive/GZip/GZip.dsp b/CPP/7zip/Archive/GZip/GZip.dsp deleted file mode 100755 index 3af06b46..00000000 --- a/CPP/7zip/Archive/GZip/GZip.dsp +++ /dev/null @@ -1,321 +0,0 @@ -# Microsoft Developer Studio Project File - Name="GZip" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=GZip - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "GZip.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "GZip.mak" CFG="GZip - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "GZip - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "GZip - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "GZip - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 1 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GZIP_EXPORTS" /YX /FD /c -# ADD CPP /nologo /Gz /MD /W3 /GX /O1 /I "..\..\..\\" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GZIP_EXPORTS" /Yu"StdAfx.h" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"C:\Program Files\7-Zip\Formats\gz.dll" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "GZip - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 1 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GZIP_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /Gz /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GZIP_EXPORTS" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"C:\Program Files\7-Zip\Formats\gz.dll" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "GZip - Win32 Release" -# Name "GZip - Win32 Debug" -# Begin Group "Spec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\Archive.def -# End Source File -# Begin Source File - -SOURCE=.\DllExports.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZip.ico -# End Source File -# Begin Source File - -SOURCE=.\resource.rc -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"StdAfx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\Alloc.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CRC.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\String.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\String.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.h -# End Source File -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.h -# End Source File -# End Group -# Begin Group "Compression" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\Copy\CopyCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Copy\CopyCoder.h -# End Source File -# End Group -# Begin Group "Engine" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\GZipHandler.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZipHandler.h -# End Source File -# Begin Source File - -SOURCE=.\GZipHandlerOut.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZipHeader.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZipHeader.h -# End Source File -# Begin Source File - -SOURCE=.\GZipIn.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZipIn.h -# End Source File -# Begin Source File - -SOURCE=.\GZipItem.h -# End Source File -# Begin Source File - -SOURCE=.\GZipOut.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZipOut.h -# End Source File -# Begin Source File - -SOURCE=.\GZipUpdate.cpp -# End Source File -# Begin Source File - -SOURCE=.\GZipUpdate.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\ProgressUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.h -# End Source File -# End Group -# Begin Group "Archive Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\Common\CodecsPath.cpp -# End Source File -# Begin Source File - -SOURCE=..\Common\CodecsPath.h -# End Source File -# Begin Source File - -SOURCE=..\Common\CoderLoader.h -# End Source File -# Begin Source File - -SOURCE=..\Common\InStreamWithCRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\Common\InStreamWithCRC.h -# End Source File -# Begin Source File - -SOURCE=..\Common\OutStreamWithCRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\Common\OutStreamWithCRC.h -# End Source File -# Begin Source File - -SOURCE=..\Common\ParseProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\Common\ParseProperties.h -# End Source File -# End Group -# Begin Source File - -SOURCE=.\gz.ico -# End Source File -# End Target -# End Project diff --git a/CPP/7zip/Archive/GZip/GZip.dsw b/CPP/7zip/Archive/GZip/GZip.dsw deleted file mode 100755 index 5ff50d2c..00000000 --- a/CPP/7zip/Archive/GZip/GZip.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "GZip"=.\GZip.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/CPP/7zip/Archive/GZip/GZipHandler.cpp b/CPP/7zip/Archive/GZip/GZipHandler.cpp index ff592324..427098ce 100755 --- a/CPP/7zip/Archive/GZip/GZipHandler.cpp +++ b/CPP/7zip/Archive/GZip/GZipHandler.cpp @@ -5,7 +5,6 @@ #include "GZipHandler.h" #include "Common/Defs.h" -#include "Common/CRC.h" #include "Common/StringConvert.h" #include "Common/ComTry.h" #include "Windows/PropVariant.h" @@ -13,23 +12,16 @@ #include "../../ICoder.h" #include "../../Common/ProgressUtils.h" +#include "../../Common/CreateCoder.h" #include "../Common/OutStreamWithCRC.h" -#ifdef COMPRESS_DEFLATE -#include "../../Compress/Deflate/DeflateDecoder.h" -#else -// {23170F69-40C1-278B-0401-080000000000} -DEFINE_GUID(CLSID_CCompressDeflateDecoder, -0x23170F69, 0x40C1, 0x278B, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00); -#include "../Common/CoderLoader.h" -extern CSysString GetDeflateCodecPath(); -#endif - using namespace NWindows; namespace NArchive { namespace NGZip { +static const CMethodId kMethodId_Deflate = 0x040108; + const wchar_t *kHostOS[] = { L"FAT", @@ -269,9 +261,6 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems, new CLocalCompressProgressInfo; CMyComPtr<ICompressProgressInfo> compressProgress = localCompressProgressSpec; - #ifndef COMPRESS_DEFLATE - CCoderLibrary lib; - #endif CMyComPtr<ICompressCoder> deflateDecoder; bool firstItem = true; RINOK(m_Stream->Seek(m_StreamStartPosition, STREAM_SEEK_SET, NULL)); @@ -305,12 +294,15 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems, { if(!deflateDecoder) { - #ifdef COMPRESS_DEFLATE - deflateDecoder = new NCompress::NDeflate::NDecoder::CCOMCoder; - #else - RINOK(lib.LoadAndCreateCoder(GetDeflateCodecPath(), - CLSID_CCompressDeflateDecoder, &deflateDecoder)); - #endif + RINOK(CreateCoder( + EXTERNAL_CODECS_VARS + kMethodId_Deflate, deflateDecoder, false)); + if (!deflateDecoder) + { + outStream.Release(); + RINOK(extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kUnSupportedMethod)); + return S_OK; + } } try { @@ -358,4 +350,6 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems, return S_OK; } +IMPL_ISetCompressCodecsInfo + }} diff --git a/CPP/7zip/Archive/GZip/GZipHandler.h b/CPP/7zip/Archive/GZip/GZipHandler.h index 9af7e4a4..ace3c657 100755 --- a/CPP/7zip/Archive/GZip/GZipHandler.h +++ b/CPP/7zip/Archive/GZip/GZipHandler.h @@ -7,6 +7,8 @@ #include "../IArchive.h" +#include "../../Common/CreateCoder.h" + #include "GZipIn.h" #include "GZipUpdate.h" @@ -17,13 +19,17 @@ class CHandler: public IInArchive, public IOutArchive, public ISetProperties, + PUBLIC_ISetCompressCodecsInfo public CMyUnknownImp { public: - MY_UNKNOWN_IMP3( - IInArchive, - IOutArchive, - ISetProperties) + MY_QUERYINTERFACE_BEGIN + MY_QUERYINTERFACE_ENTRY(IInArchive) + MY_QUERYINTERFACE_ENTRY(IOutArchive) + MY_QUERYINTERFACE_ENTRY(ISetProperties) + QUERY_ENTRY_ISetCompressCodecsInfo + MY_QUERYINTERFACE_END + MY_ADDREF_RELEASE STDMETHOD(Open)(IInStream *inStream, const UInt64 *maxCheckStartPosition, @@ -55,7 +61,8 @@ public: // ISetProperties STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties); -public: + DECL_ISetCompressCodecsInfo + CHandler() { InitMethodProperties(); } private: @@ -67,6 +74,8 @@ private: CCompressionMethodMode m_Method; UInt32 m_Level; + DECL_EXTERNAL_CODECS_VARS + void InitMethodProperties() { m_Method.NumMatchFinderCyclesDefined = false; diff --git a/CPP/7zip/Archive/GZip/GZipHandlerOut.cpp b/CPP/7zip/Archive/GZip/GZipHandlerOut.cpp index cc896016..906a324a 100755 --- a/CPP/7zip/Archive/GZip/GZipHandlerOut.cpp +++ b/CPP/7zip/Archive/GZip/GZipHandlerOut.cpp @@ -138,7 +138,9 @@ STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt (level >= 7 ? kNumFastBytesX7 : kNumFastBytesX1)); - return UpdateArchive(m_Stream, size, outStream, newItem, m_Method, itemIndex, updateCallback); + return UpdateArchive( + EXTERNAL_CODECS_VARS + m_Stream, size, outStream, newItem, m_Method, itemIndex, updateCallback); } if (indexInArchive != 0) diff --git a/CPP/7zip/Archive/GZip/GZipIn.cpp b/CPP/7zip/Archive/GZip/GZipIn.cpp index 2b16d369..69eb491e 100755 --- a/CPP/7zip/Archive/GZip/GZipIn.cpp +++ b/CPP/7zip/Archive/GZip/GZipIn.cpp @@ -10,6 +10,11 @@ #include "../../Common/StreamUtils.h" +extern "C" +{ + #include "../../../../C/7zCrc.h" +} + namespace NArchive { namespace NGZip { @@ -23,43 +28,44 @@ HRESULT CInArchive::ReadBytes(ISequentialInStream *inStream, void *data, UInt32 return S_OK; } -HRESULT CInArchive::ReadByte(ISequentialInStream *inStream, Byte &value) +HRESULT CInArchive::ReadByte(ISequentialInStream *inStream, Byte &value, UInt32 &crc) { - return ReadBytes(inStream, &value, 1); + HRESULT res = ReadBytes(inStream, &value, 1); + crc = CRC_UPDATE_BYTE(crc, value); + return res; } -HRESULT CInArchive::ReadUInt16(ISequentialInStream *inStream, UInt16 &value) +HRESULT CInArchive::ReadUInt16(ISequentialInStream *inStream, UInt16 &value, UInt32 &crc) { value = 0; for (int i = 0; i < 2; i++) { Byte b; - RINOK(ReadByte(inStream, b)); + RINOK(ReadByte(inStream, b, crc)); value |= (UInt16(b) << (8 * i)); } return S_OK; } -HRESULT CInArchive::ReadUInt32(ISequentialInStream *inStream, UInt32 &value) +HRESULT CInArchive::ReadUInt32(ISequentialInStream *inStream, UInt32 &value, UInt32 &crc) { value = 0; for (int i = 0; i < 4; i++) { Byte b; - RINOK(ReadByte(inStream, b)); + RINOK(ReadByte(inStream, b, crc)); value |= (UInt32(b) << (8 * i)); } return S_OK; } -HRESULT CInArchive::ReadZeroTerminatedString(ISequentialInStream *inStream, AString &resString, CCRC &crc) +HRESULT CInArchive::ReadZeroTerminatedString(ISequentialInStream *inStream, AString &resString, UInt32 &crc) { resString.Empty(); for (;;) { Byte c; - RINOK(ReadByte(inStream, c)); - crc.UpdateByte(c); + RINOK(ReadByte(inStream, c, crc)); if (c == 0) return S_OK; resString += char(c); @@ -72,31 +78,24 @@ HRESULT CInArchive::ReadHeader(ISequentialInStream *inStream, CItem &item) m_Position = 0; UInt16 signature; - RINOK(ReadUInt16(inStream, signature)); + UInt32 crc = CRC_INIT_VAL;; + RINOK(ReadUInt16(inStream, signature, crc)); if (signature != kSignature) return S_FALSE; - RINOK(ReadByte(inStream, item.CompressionMethod)); - RINOK(ReadByte(inStream, item.Flags)); - RINOK(ReadUInt32(inStream, item.Time)); - RINOK(ReadByte(inStream, item.ExtraFlags)); - RINOK(ReadByte(inStream, item.HostOS)); - CCRC crc; - crc.Update(&signature, 2); - crc.UpdateByte(item.CompressionMethod); - crc.UpdateByte(item.Flags); - crc.UpdateUInt32(item.Time); - crc.UpdateByte(item.ExtraFlags); - crc.UpdateByte(item.HostOS); - + RINOK(ReadByte(inStream, item.CompressionMethod, crc)); + RINOK(ReadByte(inStream, item.Flags, crc)); + RINOK(ReadUInt32(inStream, item.Time, crc)); + RINOK(ReadByte(inStream, item.ExtraFlags, crc)); + RINOK(ReadByte(inStream, item.HostOS, crc)); + if (item.ExtraFieldIsPresent()) { UInt16 extraSize; - RINOK(ReadUInt16(inStream, extraSize)); - crc.UpdateUInt16(extraSize); + RINOK(ReadUInt16(inStream, extraSize, crc)); item.Extra.SetCapacity(extraSize); RINOK(ReadBytes(inStream, item.Extra, extraSize)); - crc.Update(item.Extra, extraSize); + crc = CrcUpdate(crc, item.Extra, extraSize); } if (item.NameIsPresent()) RINOK(ReadZeroTerminatedString(inStream, item.Name, crc)); @@ -105,8 +104,9 @@ HRESULT CInArchive::ReadHeader(ISequentialInStream *inStream, CItem &item) if (item.HeaderCRCIsPresent()) { UInt16 headerCRC; - RINOK(ReadUInt16(inStream, headerCRC)); - if ((UInt16)crc.GetDigest() != headerCRC) + UInt32 dummy = 0; + RINOK(ReadUInt16(inStream, headerCRC, dummy)); + if ((UInt16)CRC_GET_DIGEST(crc) != headerCRC) return S_FALSE; } return S_OK; @@ -114,8 +114,9 @@ HRESULT CInArchive::ReadHeader(ISequentialInStream *inStream, CItem &item) HRESULT CInArchive::ReadPostHeader(ISequentialInStream *inStream, CItem &item) { - RINOK(ReadUInt32(inStream, item.FileCRC)); - return ReadUInt32(inStream, item.UnPackSize32); + UInt32 dummy = 0; + RINOK(ReadUInt32(inStream, item.FileCRC, dummy)); + return ReadUInt32(inStream, item.UnPackSize32, dummy); } }} diff --git a/CPP/7zip/Archive/GZip/GZipIn.h b/CPP/7zip/Archive/GZip/GZipIn.h index 998470e0..c2e07490 100755 --- a/CPP/7zip/Archive/GZip/GZipIn.h +++ b/CPP/7zip/Archive/GZip/GZipIn.h @@ -5,7 +5,6 @@ #include "GZipHeader.h" #include "GZipItem.h" -#include "Common/CRC.h" #include "../../IStream.h" namespace NArchive { @@ -16,10 +15,10 @@ class CInArchive UInt64 m_Position; HRESULT ReadBytes(ISequentialInStream *inStream, void *data, UInt32 size); - HRESULT ReadZeroTerminatedString(ISequentialInStream *inStream, AString &resString, CCRC &crc); - HRESULT ReadByte(ISequentialInStream *inStream, Byte &value); - HRESULT ReadUInt16(ISequentialInStream *inStream, UInt16 &value); - HRESULT ReadUInt32(ISequentialInStream *inStream, UInt32 &value); + HRESULT ReadZeroTerminatedString(ISequentialInStream *inStream, AString &resString, UInt32 &crc); + HRESULT ReadByte(ISequentialInStream *inStream, Byte &value, UInt32 &crc); + HRESULT ReadUInt16(ISequentialInStream *inStream, UInt16 &value, UInt32 &crc); + HRESULT ReadUInt32(ISequentialInStream *inStream, UInt32 &value, UInt32 &crc); public: HRESULT ReadHeader(ISequentialInStream *inStream, CItem &item); HRESULT ReadPostHeader(ISequentialInStream *inStream, CItem &item); diff --git a/CPP/7zip/Archive/GZip/GZipOut.cpp b/CPP/7zip/Archive/GZip/GZipOut.cpp index afa8a931..af01c79f 100755 --- a/CPP/7zip/Archive/GZip/GZipOut.cpp +++ b/CPP/7zip/Archive/GZip/GZipOut.cpp @@ -3,7 +3,7 @@ #include "StdAfx.h" #include "GZipOut.h" -#include "Common/CRC.h" + #include "Windows/Defs.h" #include "../../Common/StreamUtils.h" diff --git a/CPP/7zip/Archive/GZip/GZipRegister.cpp b/CPP/7zip/Archive/GZip/GZipRegister.cpp new file mode 100755 index 00000000..e293cfc3 --- /dev/null +++ b/CPP/7zip/Archive/GZip/GZipRegister.cpp @@ -0,0 +1,18 @@ +// GZipRegister.cpp + +#include "StdAfx.h" + +#include "../../Common/RegisterArc.h" + +#include "GZipHandler.h" +static IInArchive *CreateArc() { return new NArchive::NGZip::CHandler; } +#ifndef EXTRACT_ONLY +static IOutArchive *CreateArcOut() { return new NArchive::NGZip::CHandler; } +#else +#define CreateArcOut 0 +#endif + +static CArcInfo g_ArcInfo = + { L"GZip", L"gz gzip tgz tpz", L"* * .tar .tar", 0xEF, { 0x1F, 0x8B }, 2, true, CreateArc, CreateArcOut }; + +REGISTER_ARC(GZip) diff --git a/CPP/7zip/Archive/GZip/GZipUpdate.cpp b/CPP/7zip/Archive/GZip/GZipUpdate.cpp index 45e6e985..c9567245 100755 --- a/CPP/7zip/Archive/GZip/GZipUpdate.cpp +++ b/CPP/7zip/Archive/GZip/GZipUpdate.cpp @@ -12,26 +12,21 @@ #include "../../ICoder.h" #include "../../Common/ProgressUtils.h" +#include "../../Common/CreateCoder.h" #include "../../Compress/Copy/CopyCoder.h" #include "../Common/InStreamWithCRC.h" -#ifdef COMPRESS_DEFLATE -#include "../../Compress/Deflate/DeflateEncoder.h" -#else -// {23170F69-40C1-278B-0401-080000000100} -DEFINE_GUID(CLSID_CCompressDeflateEncoder, -0x23170F69, 0x40C1, 0x278B, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00); -#include "../Common/CoderLoader.h" -extern CSysString GetDeflateCodecPath(); -#endif - namespace NArchive { namespace NGZip { +static const CMethodId kMethodId_Deflate = 0x040108; + static const Byte kHostOS = NFileHeader::NHostOS::kFAT; -HRESULT UpdateArchive(IInStream * /* inStream */, +HRESULT UpdateArchive( + DECL_EXTERNAL_CODECS_LOC_VARS + IInStream * /* inStream */, UInt64 unpackSize, ISequentialOutStream *outStream, const CItem &newItem, @@ -45,9 +40,6 @@ HRESULT UpdateArchive(IInStream * /* inStream */, RINOK(updateCallback->SetTotal(complexity)); - #ifndef COMPRESS_DEFLATE - CCoderLibrary lib; - #endif CMyComPtr<ICompressCoder> deflateEncoder; complexity = 0; @@ -83,12 +75,11 @@ HRESULT UpdateArchive(IInStream * /* inStream */, localCompressProgressSpec->Init(localProgress, &complexity, NULL); { - #ifdef COMPRESS_DEFLATE - deflateEncoder = new NCompress::NDeflate::NEncoder::CCOMCoder; - #else - RINOK(lib.LoadAndCreateCoder(GetDeflateCodecPath(), - CLSID_CCompressDeflateEncoder, &deflateEncoder)); - #endif + RINOK(CreateCoder( + EXTERNAL_CODECS_LOC_VARS + kMethodId_Deflate, deflateEncoder, true)); + if (!deflateEncoder) + return E_NOTIMPL; NWindows::NCOM::CPropVariant properties[] = { diff --git a/CPP/7zip/Archive/GZip/GZipUpdate.h b/CPP/7zip/Archive/GZip/GZipUpdate.h index c06e8a4c..7ab92848 100755 --- a/CPP/7zip/Archive/GZip/GZipUpdate.h +++ b/CPP/7zip/Archive/GZip/GZipUpdate.h @@ -5,6 +5,8 @@ #include "../IArchive.h" +#include "../../Common/CreateCoder.h" + #include "GZipOut.h" #include "GZipItem.h" @@ -19,7 +21,9 @@ struct CCompressionMethodMode UInt32 NumMatchFinderCycles; }; -HRESULT UpdateArchive(IInStream *inStream, +HRESULT UpdateArchive( + DECL_EXTERNAL_CODECS_LOC_VARS + IInStream *inStream, UInt64 unpackSize, ISequentialOutStream *outStream, const CItem &newItem, diff --git a/CPP/7zip/Archive/GZip/makefile b/CPP/7zip/Archive/GZip/makefile deleted file mode 100755 index abc3f1e4..00000000 --- a/CPP/7zip/Archive/GZip/makefile +++ /dev/null @@ -1,60 +0,0 @@ -PROG = gz.dll -DEF_FILE = ../Archive.def -CFLAGS = $(CFLAGS) -I ../../../ -LIBS = $(LIBS) oleaut32.lib user32.lib - -GZ_OBJS = \ - $O\GZipHandler.obj \ - $O\GZipHandlerOut.obj \ - $O\GZipHeader.obj \ - $O\GZipIn.obj \ - $O\GZipOut.obj \ - $O\GZipUpdate.obj \ - $O\DllExports.obj \ - -COMMON_OBJS = \ - $O\Alloc.obj \ - $O\CRC.obj \ - $O\NewHandler.obj \ - $O\String.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - -WIN_OBJS = \ - $O\DLL.obj \ - $O\PropVariant.obj \ - -7ZIP_COMMON_OBJS = \ - $O\ProgressUtils.obj \ - $O\StreamUtils.obj \ - -AR_COMMON_OBJS = \ - $O\CodecsPath.obj \ - $O\InStreamWithCRC.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(GZ_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(AR_COMMON_OBJS) \ - $O\CopyCoder.obj \ - $O\resource.res - -!include "../../../Build.mak" - -$(GZ_OBJS): $(*B).cpp - $(COMPL) -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../Common/$(*B).cpp - $(COMPL) -$O\CopyCoder.obj: ../../Compress/Copy/$(*B).cpp - $(COMPL) diff --git a/CPP/7zip/Archive/GZip/resource.rc b/CPP/7zip/Archive/GZip/resource.rc deleted file mode 100755 index 29fb4825..00000000 --- a/CPP/7zip/Archive/GZip/resource.rc +++ /dev/null @@ -1,5 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_DLL("GZip Plugin", "gz") - -101 ICON "gz.ico" |