seven_zip_ruby 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +25 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +39 -0
- data/README.md +176 -0
- data/Rakefile +47 -0
- data/ext/C/Types.h +254 -0
- data/ext/CPP/7zip/Archive/IArchive.h +234 -0
- data/ext/CPP/7zip/IDecl.h +15 -0
- data/ext/CPP/7zip/IPassword.h +24 -0
- data/ext/CPP/7zip/IProgress.h +33 -0
- data/ext/CPP/7zip/IStream.h +58 -0
- data/ext/CPP/7zip/PropID.h +76 -0
- data/ext/CPP/Common/MyCom.h +225 -0
- data/ext/CPP/Common/MyGuidDef.h +54 -0
- data/ext/CPP/Common/MyInitGuid.h +22 -0
- data/ext/CPP/Common/MyUnknown.h +13 -0
- data/ext/CPP/Common/MyWindows.h +204 -0
- data/ext/CPP/Common/Types.h +11 -0
- data/ext/CPP/Windows/PropVariant.h +56 -0
- data/ext/CPP/include_windows/basetyps.h +19 -0
- data/ext/CPP/include_windows/tchar.h +89 -0
- data/ext/CPP/include_windows/windows.h +194 -0
- data/ext/p7zip/Asm/x64/7zCrcT8U.asm +103 -0
- data/ext/p7zip/Asm/x86/7zCrcT8U.asm +101 -0
- data/ext/p7zip/C/7zBuf.h +39 -0
- data/ext/p7zip/C/7zBuf2.c +45 -0
- data/ext/p7zip/C/7zCrc.c +76 -0
- data/ext/p7zip/C/7zCrc.h +25 -0
- data/ext/p7zip/C/7zCrcOpt.c +34 -0
- data/ext/p7zip/C/7zCrcT8.c +43 -0
- data/ext/p7zip/C/7zStream.c +169 -0
- data/ext/p7zip/C/7zVersion.h +7 -0
- data/ext/p7zip/C/Aes.c +284 -0
- data/ext/p7zip/C/Aes.h +38 -0
- data/ext/p7zip/C/Alloc.back3 +238 -0
- data/ext/p7zip/C/Alloc.c +280 -0
- data/ext/p7zip/C/Alloc.c.back +243 -0
- data/ext/p7zip/C/Alloc.c.back2 +222 -0
- data/ext/p7zip/C/Alloc.h +27 -0
- data/ext/p7zip/C/Bra.c +133 -0
- data/ext/p7zip/C/Bra.h +68 -0
- data/ext/p7zip/C/Bra86.c +85 -0
- data/ext/p7zip/C/BraIA64.c +67 -0
- data/ext/p7zip/C/BwtSort.c +516 -0
- data/ext/p7zip/C/BwtSort.h +30 -0
- data/ext/p7zip/C/CpuArch.c +168 -0
- data/ext/p7zip/C/CpuArch.h +155 -0
- data/ext/p7zip/C/Delta.c +62 -0
- data/ext/p7zip/C/Delta.h +23 -0
- data/ext/p7zip/C/HuffEnc.c +146 -0
- data/ext/p7zip/C/HuffEnc.h +27 -0
- data/ext/p7zip/C/LzFind.c +761 -0
- data/ext/p7zip/C/LzFind.h +115 -0
- data/ext/p7zip/C/LzFindMt.c +793 -0
- data/ext/p7zip/C/LzFindMt.h +105 -0
- data/ext/p7zip/C/LzHash.h +54 -0
- data/ext/p7zip/C/Lzma2Dec.c +356 -0
- data/ext/p7zip/C/Lzma2Dec.h +84 -0
- data/ext/p7zip/C/Lzma2Enc.c +477 -0
- data/ext/p7zip/C/Lzma2Enc.h +66 -0
- data/ext/p7zip/C/LzmaDec.c +999 -0
- data/ext/p7zip/C/LzmaDec.h +231 -0
- data/ext/p7zip/C/LzmaEnc.c +2268 -0
- data/ext/p7zip/C/LzmaEnc.h +80 -0
- data/ext/p7zip/C/LzmaUtil/Lzma86Dec.c +61 -0
- data/ext/p7zip/C/LzmaUtil/Lzma86Dec.h +51 -0
- data/ext/p7zip/C/LzmaUtil/Lzma86Enc.c +113 -0
- data/ext/p7zip/C/LzmaUtil/Lzma86Enc.h +78 -0
- data/ext/p7zip/C/MtCoder.c +327 -0
- data/ext/p7zip/C/MtCoder.h +98 -0
- data/ext/p7zip/C/Ppmd.h +85 -0
- data/ext/p7zip/C/Ppmd7.c +708 -0
- data/ext/p7zip/C/Ppmd7.h +140 -0
- data/ext/p7zip/C/Ppmd7Dec.c +187 -0
- data/ext/p7zip/C/Ppmd7Enc.c +185 -0
- data/ext/p7zip/C/Ppmd8.c +1120 -0
- data/ext/p7zip/C/Ppmd8.h +133 -0
- data/ext/p7zip/C/Ppmd8Dec.c +155 -0
- data/ext/p7zip/C/Ppmd8Enc.c +161 -0
- data/ext/p7zip/C/RotateDefs.h +20 -0
- data/ext/p7zip/C/Sha256.c +204 -0
- data/ext/p7zip/C/Sha256.h +26 -0
- data/ext/p7zip/C/Sort.c +93 -0
- data/ext/p7zip/C/Sort.h +20 -0
- data/ext/p7zip/C/Threads.c +582 -0
- data/ext/p7zip/C/Threads.h +123 -0
- data/ext/p7zip/C/Types.h +254 -0
- data/ext/p7zip/C/Xz.c +88 -0
- data/ext/p7zip/C/Xz.h +252 -0
- data/ext/p7zip/C/XzCrc64.c +33 -0
- data/ext/p7zip/C/XzCrc64.h +26 -0
- data/ext/p7zip/C/XzDec.c +875 -0
- data/ext/p7zip/C/XzEnc.c +497 -0
- data/ext/p7zip/C/XzEnc.h +25 -0
- data/ext/p7zip/C/XzIn.c +306 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.cpp +3 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.h +50 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.cpp +332 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.h +68 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.cpp +444 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.h +55 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zExtract.cpp +270 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.cpp +123 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.h +58 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +149 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.h +58 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.cpp +482 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.h +119 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHandlerOut.cpp +483 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.cpp +14 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.h +97 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.cpp +1276 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.h +245 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zItem.h +268 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.cpp +866 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.h +152 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.cpp +164 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.h +22 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zRegister.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.cpp +24 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.h +35 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.cpp +1216 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.h +88 -0
- data/ext/p7zip/CPP/7zip/Archive/ApmHandler.cpp +356 -0
- data/ext/p7zip/CPP/7zip/Archive/ArchiveExports.cpp +135 -0
- data/ext/p7zip/CPP/7zip/Archive/ArjHandler.cpp +798 -0
- data/ext/p7zip/CPP/7zip/Archive/Bz2Handler.cpp +423 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.cpp +189 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.h +44 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.cpp +929 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.h +28 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.cpp +15 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.h +44 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.cpp +272 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.h +161 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabItem.h +63 -0
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.cpp +721 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.h +29 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.cpp +24 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.h +28 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.cpp +937 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.h +244 -0
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.cpp +239 -0
- data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.h +28 -0
- data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.cpp +389 -0
- data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.h +119 -0
- data/ext/p7zip/CPP/7zip/Archive/Com/ComRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.cpp +121 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.h +174 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +240 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.h +80 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.cpp +239 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.h +88 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +15 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.h +37 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.cpp +22 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.h +24 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.cpp +62 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.h +12 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.cpp +623 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.h +87 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +42 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.h +67 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.cpp +61 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.h +24 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.cpp +190 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.h +84 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.h +36 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.h +36 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.cpp +177 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.h +18 -0
- data/ext/p7zip/CPP/7zip/Archive/CpioHandler.cpp +624 -0
- data/ext/p7zip/CPP/7zip/Archive/CramfsHandler.cpp +644 -0
- data/ext/p7zip/CPP/7zip/Archive/DebHandler.cpp +413 -0
- data/ext/p7zip/CPP/7zip/Archive/DeflateProps.cpp +118 -0
- data/ext/p7zip/CPP/7zip/Archive/DeflateProps.h +35 -0
- data/ext/p7zip/CPP/7zip/Archive/DllExports2.cpp +76 -0
- data/ext/p7zip/CPP/7zip/Archive/DmgHandler.cpp +918 -0
- data/ext/p7zip/CPP/7zip/Archive/ElfHandler.cpp +534 -0
- data/ext/p7zip/CPP/7zip/Archive/FatHandler.cpp +996 -0
- data/ext/p7zip/CPP/7zip/Archive/FlvHandler.cpp +544 -0
- data/ext/p7zip/CPP/7zip/Archive/GzHandler.cpp +698 -0
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.cpp +243 -0
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.h +26 -0
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.cpp +480 -0
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.h +154 -0
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/IArchive.h +234 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.cpp +326 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.h +30 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.cpp +21 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.h +61 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.cpp +453 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.h +315 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoItem.h +141 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/LzhHandler.cpp +775 -0
- data/ext/p7zip/CPP/7zip/Archive/LzmaHandler.cpp +430 -0
- data/ext/p7zip/CPP/7zip/Archive/MachoHandler.cpp +500 -0
- data/ext/p7zip/CPP/7zip/Archive/MbrHandler.cpp +507 -0
- data/ext/p7zip/CPP/7zip/Archive/MslzHandler.cpp +257 -0
- data/ext/p7zip/CPP/7zip/Archive/MubHandler.cpp +266 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.cpp +130 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.h +47 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.cpp +510 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.h +43 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.cpp +1461 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.h +181 -0
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/NtfsHandler.cpp +1764 -0
- data/ext/p7zip/CPP/7zip/Archive/PeHandler.cpp +1752 -0
- data/ext/p7zip/CPP/7zip/Archive/PpmdHandler.cpp +456 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.cpp +869 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.h +66 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.cpp +21 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.h +205 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.cpp +478 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.h +123 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.cpp +55 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.h +79 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.cpp +78 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.h +49 -0
- data/ext/p7zip/CPP/7zip/Archive/RpmHandler.cpp +292 -0
- data/ext/p7zip/CPP/7zip/Archive/SplitHandler.cpp +366 -0
- data/ext/p7zip/CPP/7zip/Archive/SquashfsHandler.cpp +2155 -0
- data/ext/p7zip/CPP/7zip/Archive/SwfHandler.cpp +706 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.cpp +386 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.h +61 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandlerOut.cpp +122 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.cpp +25 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.h +108 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.cpp +207 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.h +17 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarItem.h +72 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.cpp +187 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.h +28 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarRegister.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.cpp +139 -0
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.h +34 -0
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.cpp +451 -0
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.h +37 -0
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.cpp +876 -0
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.h +375 -0
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfRegister.cpp +13 -0
- data/ext/p7zip/CPP/7zip/Archive/VhdHandler.cpp +734 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.cpp +660 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.h +77 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandlerOut.cpp +639 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.cpp +855 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.h +297 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimRegister.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Archive/XarHandler.cpp +588 -0
- data/ext/p7zip/CPP/7zip/Archive/XzHandler.cpp +707 -0
- data/ext/p7zip/CPP/7zip/Archive/ZHandler.cpp +161 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.cpp +379 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.h +56 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipCompressionMode.h +42 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.cpp +822 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.h +101 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp +537 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.cpp +36 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.h +284 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.cpp +893 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.h +125 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.cpp +181 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.h +281 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItemEx.h +34 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.cpp +289 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.h +56 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipRegister.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.cpp +1076 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.h +58 -0
- data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile +328 -0
- data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.depend +4962 -0
- data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.list +265 -0
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zFM.txt +163 -0
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zG.txt +131 -0
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7za.txt +253 -0
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_ALL.txt +32 -0
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_Format7zFree.txt +290 -0
- data/ext/p7zip/CPP/7zip/CMAKE/generate.sh +37 -0
- data/ext/p7zip/CPP/7zip/CMAKE/generate_xcode.sh +32 -0
- data/ext/p7zip/CPP/7zip/Common/CWrappers.cpp +226 -0
- data/ext/p7zip/CPP/7zip/Common/CWrappers.h +109 -0
- data/ext/p7zip/CPP/7zip/Common/CreateCoder.cpp +293 -0
- data/ext/p7zip/CPP/7zip/Common/CreateCoder.h +98 -0
- data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.cpp +55 -0
- data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.h +10 -0
- data/ext/p7zip/CPP/7zip/Common/FileStreams.cpp +273 -0
- data/ext/p7zip/CPP/7zip/Common/FileStreams.h +134 -0
- data/ext/p7zip/CPP/7zip/Common/FilterCoder.cpp +247 -0
- data/ext/p7zip/CPP/7zip/Common/FilterCoder.h +128 -0
- data/ext/p7zip/CPP/7zip/Common/InBuffer.cpp +83 -0
- data/ext/p7zip/CPP/7zip/Common/InBuffer.h +81 -0
- data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.cpp +122 -0
- data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.h +48 -0
- data/ext/p7zip/CPP/7zip/Common/LimitedStreams.cpp +154 -0
- data/ext/p7zip/CPP/7zip/Common/LimitedStreams.h +125 -0
- data/ext/p7zip/CPP/7zip/Common/LockedStream.cpp +23 -0
- data/ext/p7zip/CPP/7zip/Common/LockedStream.h +38 -0
- data/ext/p7zip/CPP/7zip/Common/MemBlocks.cpp +183 -0
- data/ext/p7zip/CPP/7zip/Common/MemBlocks.h +71 -0
- data/ext/p7zip/CPP/7zip/Common/MethodId.cpp +27 -0
- data/ext/p7zip/CPP/7zip/Common/MethodId.h +10 -0
- data/ext/p7zip/CPP/7zip/Common/MethodProps.cpp +99 -0
- data/ext/p7zip/CPP/7zip/Common/MethodProps.h +41 -0
- data/ext/p7zip/CPP/7zip/Common/OffsetStream.cpp +35 -0
- data/ext/p7zip/CPP/7zip/Common/OffsetStream.h +25 -0
- data/ext/p7zip/CPP/7zip/Common/OutBuffer.cpp +116 -0
- data/ext/p7zip/CPP/7zip/Common/OutBuffer.h +64 -0
- data/ext/p7zip/CPP/7zip/Common/OutMemStream.cpp +142 -0
- data/ext/p7zip/CPP/7zip/Common/OutMemStream.h +96 -0
- data/ext/p7zip/CPP/7zip/Common/ProgressMt.cpp +53 -0
- data/ext/p7zip/CPP/7zip/Common/ProgressMt.h +46 -0
- data/ext/p7zip/CPP/7zip/Common/ProgressUtils.cpp +42 -0
- data/ext/p7zip/CPP/7zip/Common/ProgressUtils.h +34 -0
- data/ext/p7zip/CPP/7zip/Common/RegisterArc.h +32 -0
- data/ext/p7zip/CPP/7zip/Common/RegisterCodec.h +33 -0
- data/ext/p7zip/CPP/7zip/Common/StreamBinder.cpp +152 -0
- data/ext/p7zip/CPP/7zip/Common/StreamBinder.h +38 -0
- data/ext/p7zip/CPP/7zip/Common/StreamObjects.cpp +221 -0
- data/ext/p7zip/CPP/7zip/Common/StreamObjects.h +135 -0
- data/ext/p7zip/CPP/7zip/Common/StreamUtils.cpp +56 -0
- data/ext/p7zip/CPP/7zip/Common/StreamUtils.h +13 -0
- data/ext/p7zip/CPP/7zip/Common/VirtThread.cpp +46 -0
- data/ext/p7zip/CPP/7zip/Common/VirtThread.h +23 -0
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.cpp +309 -0
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.h +98 -0
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.cpp +90 -0
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.h +59 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Const.h +54 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.cpp +26 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.h +31 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.cpp +943 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.h +205 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.cpp +895 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.h +245 -0
- data/ext/p7zip/CPP/7zip/Compress/BZip2Register.cpp +20 -0
- data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.cpp +386 -0
- data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.h +115 -0
- data/ext/p7zip/CPP/7zip/Compress/Bcj2Register.cpp +19 -0
- data/ext/p7zip/CPP/7zip/Compress/BcjCoder.cpp +15 -0
- data/ext/p7zip/CPP/7zip/Compress/BcjCoder.h +19 -0
- data/ext/p7zip/CPP/7zip/Compress/BcjRegister.cpp +19 -0
- data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.cpp +24 -0
- data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.h +141 -0
- data/ext/p7zip/CPP/7zip/Compress/BitlEncoder.h +57 -0
- data/ext/p7zip/CPP/7zip/Compress/BitmDecoder.h +66 -0
- data/ext/p7zip/CPP/7zip/Compress/BitmEncoder.h +50 -0
- data/ext/p7zip/CPP/7zip/Compress/BranchCoder.cpp +19 -0
- data/ext/p7zip/CPP/7zip/Compress/BranchCoder.h +44 -0
- data/ext/p7zip/CPP/7zip/Compress/BranchMisc.cpp +37 -0
- data/ext/p7zip/CPP/7zip/Compress/BranchMisc.h +14 -0
- data/ext/p7zip/CPP/7zip/Compress/BranchRegister.cpp +30 -0
- data/ext/p7zip/CPP/7zip/Compress/ByteSwap.cpp +73 -0
- data/ext/p7zip/CPP/7zip/Compress/CodecExports.cpp +160 -0
- data/ext/p7zip/CPP/7zip/Compress/CopyCoder.cpp +67 -0
- data/ext/p7zip/CPP/7zip/Compress/CopyCoder.h +34 -0
- data/ext/p7zip/CPP/7zip/Compress/CopyRegister.cpp +14 -0
- data/ext/p7zip/CPP/7zip/Compress/Deflate64Register.cpp +20 -0
- data/ext/p7zip/CPP/7zip/Compress/DeflateConst.h +134 -0
- data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.cpp +353 -0
- data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.h +157 -0
- data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.cpp +986 -0
- data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.h +211 -0
- data/ext/p7zip/CPP/7zip/Compress/DeflateRegister.cpp +21 -0
- data/ext/p7zip/CPP/7zip/Compress/DeltaFilter.cpp +112 -0
- data/ext/p7zip/CPP/7zip/Compress/DllExports.cpp +39 -0
- data/ext/p7zip/CPP/7zip/Compress/DllExports2.cpp +28 -0
- data/ext/p7zip/CPP/7zip/Compress/HuffmanDecoder.h +89 -0
- data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.cpp +219 -0
- data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.h +57 -0
- data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.cpp +89 -0
- data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.h +34 -0
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +531 -0
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +1018 -0
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +48 -0
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +311 -0
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +20 -0
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/makefile +173 -0
- data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.cpp +14 -0
- data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.h +66 -0
- data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.cpp +220 -0
- data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.h +106 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.cpp +189 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.h +73 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.cpp +94 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.h +36 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Register.cpp +20 -0
- data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.cpp +252 -0
- data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.h +84 -0
- data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.cpp +149 -0
- data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.h +36 -0
- data/ext/p7zip/CPP/7zip/Compress/LzmaRegister.cpp +20 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzx.h +61 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.cpp +90 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.h +46 -0
- data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.cpp +387 -0
- data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.h +159 -0
- data/ext/p7zip/CPP/7zip/Compress/Mtf8.h +193 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.cpp +167 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.h +78 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.cpp +119 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.h +48 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdRegister.cpp +21 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdZip.cpp +223 -0
- data/ext/p7zip/CPP/7zip/Compress/PpmdZip.h +72 -0
- data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.cpp +175 -0
- data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.h +264 -0
- data/ext/p7zip/CPP/7zip/Compress/RangeCoder.h +205 -0
- data/ext/p7zip/CPP/7zip/Compress/RangeCoderBit.h +114 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar/makefile +34 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.depend +158 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.list +64 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.cpp +480 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.h +88 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.cpp +391 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.h +174 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.cpp +897 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.h +267 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.cpp +1091 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.h +179 -0
- data/ext/p7zip/CPP/7zip/Compress/RarCodecsRegister.cpp +26 -0
- data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.cpp +145 -0
- data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.h +38 -0
- data/ext/p7zip/CPP/7zip/Compress/ZDecoder.cpp +159 -0
- data/ext/p7zip/CPP/7zip/Compress/ZDecoder.h +42 -0
- data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.cpp +89 -0
- data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.h +48 -0
- data/ext/p7zip/CPP/7zip/Compress/ZlibEncoder.cpp +61 -0
- data/ext/p7zip/CPP/7zip/Compress/ZlibEncoder.h +48 -0
- data/ext/p7zip/CPP/7zip/Crypto/7zAes.cpp +244 -0
- data/ext/p7zip/CPP/7zip/Crypto/7zAes.h +117 -0
- data/ext/p7zip/CPP/7zip/Crypto/7zAesRegister.cpp +18 -0
- data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.cpp +109 -0
- data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.h +39 -0
- data/ext/p7zip/CPP/7zip/Crypto/MyAes.cpp +48 -0
- data/ext/p7zip/CPP/7zip/Crypto/MyAes.h +38 -0
- data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp +83 -0
- data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.h +21 -0
- data/ext/p7zip/CPP/7zip/Crypto/RandGen.cpp +107 -0
- data/ext/p7zip/CPP/7zip/Crypto/RandGen.h +21 -0
- data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.cpp +133 -0
- data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.h +50 -0
- data/ext/p7zip/CPP/7zip/Crypto/RarAes.cpp +134 -0
- data/ext/p7zip/CPP/7zip/Crypto/RarAes.h +47 -0
- data/ext/p7zip/CPP/7zip/Crypto/Sha1.cpp +229 -0
- data/ext/p7zip/CPP/7zip/Crypto/Sha1.h +68 -0
- data/ext/p7zip/CPP/7zip/Crypto/WzAes.cpp +221 -0
- data/ext/p7zip/CPP/7zip/Crypto/WzAes.h +125 -0
- data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.cpp +88 -0
- data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.h +56 -0
- data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.cpp +164 -0
- data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.h +47 -0
- data/ext/p7zip/CPP/7zip/Guid.txt +170 -0
- data/ext/p7zip/CPP/7zip/ICoder.h +186 -0
- data/ext/p7zip/CPP/7zip/IDecl.h +15 -0
- data/ext/p7zip/CPP/7zip/IPassword.h +24 -0
- data/ext/p7zip/CPP/7zip/IProgress.h +33 -0
- data/ext/p7zip/CPP/7zip/IStream.h +58 -0
- data/ext/p7zip/CPP/7zip/MyVersion.h +11 -0
- data/ext/p7zip/CPP/7zip/PREMAKE/generate.sh +18 -0
- data/ext/p7zip/CPP/7zip/PREMAKE/premake4.lua +263 -0
- data/ext/p7zip/CPP/7zip/PropID.h +76 -0
- data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA.pro +228 -0
- data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA_osx.pro +228 -0
- data/ext/p7zip/CPP/7zip/QMAKE/test_emul/test_emul.pro +26 -0
- data/ext/p7zip/CPP/7zip/TEST/TestUI/TestUI.cpp +560 -0
- data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile +33 -0
- data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.depend +577 -0
- data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.list +16 -0
- data/ext/p7zip/CPP/Common/AutoPtr.h +35 -0
- data/ext/p7zip/CPP/Common/Buffer.h +77 -0
- data/ext/p7zip/CPP/Common/CRC.cpp +7 -0
- data/ext/p7zip/CPP/Common/C_FileIO.cpp +88 -0
- data/ext/p7zip/CPP/Common/C_FileIO.h +47 -0
- data/ext/p7zip/CPP/Common/ComTry.h +18 -0
- data/ext/p7zip/CPP/Common/CommandLineParser.cpp +230 -0
- data/ext/p7zip/CPP/Common/CommandLineParser.h +72 -0
- data/ext/p7zip/CPP/Common/Defs.h +20 -0
- data/ext/p7zip/CPP/Common/DynamicBuffer.h +50 -0
- data/ext/p7zip/CPP/Common/IntToString.cpp +77 -0
- data/ext/p7zip/CPP/Common/IntToString.h +19 -0
- data/ext/p7zip/CPP/Common/Lang.cpp +130 -0
- data/ext/p7zip/CPP/Common/Lang.h +28 -0
- data/ext/p7zip/CPP/Common/ListFileUtils.cpp +75 -0
- data/ext/p7zip/CPP/Common/ListFileUtils.h +11 -0
- data/ext/p7zip/CPP/Common/MyCom.h +225 -0
- data/ext/p7zip/CPP/Common/MyException.h +14 -0
- data/ext/p7zip/CPP/Common/MyGuidDef.h +54 -0
- data/ext/p7zip/CPP/Common/MyInitGuid.h +22 -0
- data/ext/p7zip/CPP/Common/MyMap.cpp +140 -0
- data/ext/p7zip/CPP/Common/MyMap.h +28 -0
- data/ext/p7zip/CPP/Common/MyString.cpp +206 -0
- data/ext/p7zip/CPP/Common/MyString.h +601 -0
- data/ext/p7zip/CPP/Common/MyUnknown.h +13 -0
- data/ext/p7zip/CPP/Common/MyVector.cpp +87 -0
- data/ext/p7zip/CPP/Common/MyVector.h +266 -0
- data/ext/p7zip/CPP/Common/MyWindows.cpp +111 -0
- data/ext/p7zip/CPP/Common/MyWindows.h +218 -0
- data/ext/p7zip/CPP/Common/MyXml.cpp +209 -0
- data/ext/p7zip/CPP/Common/MyXml.h +40 -0
- data/ext/p7zip/CPP/Common/NewHandler.h +16 -0
- data/ext/p7zip/CPP/Common/StdInStream.cpp +100 -0
- data/ext/p7zip/CPP/Common/StdInStream.h +32 -0
- data/ext/p7zip/CPP/Common/StdOutStream.cpp +93 -0
- data/ext/p7zip/CPP/Common/StdOutStream.h +35 -0
- data/ext/p7zip/CPP/Common/StringConvert.cpp +181 -0
- data/ext/p7zip/CPP/Common/StringConvert.h +73 -0
- data/ext/p7zip/CPP/Common/StringToInt.cpp +90 -0
- data/ext/p7zip/CPP/Common/StringToInt.h +18 -0
- data/ext/p7zip/CPP/Common/TextConfig.cpp +138 -0
- data/ext/p7zip/CPP/Common/TextConfig.h +22 -0
- data/ext/p7zip/CPP/Common/Types.h +11 -0
- data/ext/p7zip/CPP/Common/UTFConvert.cpp +145 -0
- data/ext/p7zip/CPP/Common/UTFConvert.h +11 -0
- data/ext/p7zip/CPP/Common/Wildcard.cpp +462 -0
- data/ext/p7zip/CPP/Common/Wildcard.h +80 -0
- data/ext/p7zip/CPP/Windows/COM.cpp +37 -0
- data/ext/p7zip/CPP/Windows/COM.h +69 -0
- data/ext/p7zip/CPP/Windows/Clipboard.cpp +160 -0
- data/ext/p7zip/CPP/Windows/Clipboard.h +28 -0
- data/ext/p7zip/CPP/Windows/CommonDialog.h +19 -0
- data/ext/p7zip/CPP/Windows/Control/ComboBox.h +82 -0
- data/ext/p7zip/CPP/Windows/Control/Controls.cpp +515 -0
- data/ext/p7zip/CPP/Windows/Control/Dialog.cpp +560 -0
- data/ext/p7zip/CPP/Windows/Control/Dialog.h +179 -0
- data/ext/p7zip/CPP/Windows/Control/DialogImpl.h +73 -0
- data/ext/p7zip/CPP/Windows/Control/Edit.h +24 -0
- data/ext/p7zip/CPP/Windows/Control/ListView.h +164 -0
- data/ext/p7zip/CPP/Windows/Control/ProgressBar.h +34 -0
- data/ext/p7zip/CPP/Windows/Control/Static.h +23 -0
- data/ext/p7zip/CPP/Windows/Control/StatusBar.h +56 -0
- data/ext/p7zip/CPP/Windows/Control/Window2.cpp +211 -0
- data/ext/p7zip/CPP/Windows/Control/Window2.h +111 -0
- data/ext/p7zip/CPP/Windows/DLL.cpp +193 -0
- data/ext/p7zip/CPP/Windows/DLL.h +48 -0
- data/ext/p7zip/CPP/Windows/Defs.h +17 -0
- data/ext/p7zip/CPP/Windows/Error.cpp +58 -0
- data/ext/p7zip/CPP/Windows/Error.h +33 -0
- data/ext/p7zip/CPP/Windows/FileDir.cpp +927 -0
- data/ext/p7zip/CPP/Windows/FileDir.h +115 -0
- data/ext/p7zip/CPP/Windows/FileFind.cpp +604 -0
- data/ext/p7zip/CPP/Windows/FileFind.h +126 -0
- data/ext/p7zip/CPP/Windows/FileIO.cpp +475 -0
- data/ext/p7zip/CPP/Windows/FileIO.h +110 -0
- data/ext/p7zip/CPP/Windows/FileName.cpp +50 -0
- data/ext/p7zip/CPP/Windows/FileName.h +27 -0
- data/ext/p7zip/CPP/Windows/Menu.h +4 -0
- data/ext/p7zip/CPP/Windows/NtCheck.h +44 -0
- data/ext/p7zip/CPP/Windows/PropVariant.cpp +243 -0
- data/ext/p7zip/CPP/Windows/PropVariant.h +56 -0
- data/ext/p7zip/CPP/Windows/PropVariantConversions.cpp +142 -0
- data/ext/p7zip/CPP/Windows/PropVariantConversions.h +14 -0
- data/ext/p7zip/CPP/Windows/PropVariantUtils.cpp +78 -0
- data/ext/p7zip/CPP/Windows/PropVariantUtils.h +28 -0
- data/ext/p7zip/CPP/Windows/Registry.cpp +313 -0
- data/ext/p7zip/CPP/Windows/Registry.h +113 -0
- data/ext/p7zip/CPP/Windows/ResourceString.h +22 -0
- data/ext/p7zip/CPP/Windows/Shell.h +21 -0
- data/ext/p7zip/CPP/Windows/Synchronization.cpp +157 -0
- data/ext/p7zip/CPP/Windows/Synchronization.h +187 -0
- data/ext/p7zip/CPP/Windows/Synchronization2.h +218 -0
- data/ext/p7zip/CPP/Windows/System.cpp +166 -0
- data/ext/p7zip/CPP/Windows/System.h +16 -0
- data/ext/p7zip/CPP/Windows/Thread.h +41 -0
- data/ext/p7zip/CPP/Windows/Time.cpp +88 -0
- data/ext/p7zip/CPP/Windows/Time.h +21 -0
- data/ext/p7zip/CPP/Windows/Window.cpp +101 -0
- data/ext/p7zip/CPP/Windows/Window.h +43 -0
- data/ext/p7zip/CPP/include_windows/basetyps.h +19 -0
- data/ext/p7zip/CPP/include_windows/tchar.h +89 -0
- data/ext/p7zip/CPP/include_windows/windows.h +194 -0
- data/ext/p7zip/CPP/myWindows/StdAfx.h +124 -0
- data/ext/p7zip/CPP/myWindows/config.h +67 -0
- data/ext/p7zip/CPP/myWindows/initguid.h +4 -0
- data/ext/p7zip/CPP/myWindows/makefile +21 -0
- data/ext/p7zip/CPP/myWindows/makefile.depend +32 -0
- data/ext/p7zip/CPP/myWindows/makefile.list +28 -0
- data/ext/p7zip/CPP/myWindows/myAddExeFlag.cpp +20 -0
- data/ext/p7zip/CPP/myWindows/myGetTickCount.cpp +8 -0
- data/ext/p7zip/CPP/myWindows/myPrivate.h +17 -0
- data/ext/p7zip/CPP/myWindows/mySplitCommandLine.cpp +82 -0
- data/ext/p7zip/CPP/myWindows/test_emul.cpp +745 -0
- data/ext/p7zip/CPP/myWindows/wine_GetXXXDefaultLangID.cpp +741 -0
- data/ext/p7zip/CPP/myWindows/wine_date_and_time.cpp +434 -0
- data/ext/p7zip/ChangeLog +914 -0
- data/ext/p7zip/DOCS/7zC.txt +194 -0
- data/ext/p7zip/DOCS/7zFormat.txt +469 -0
- data/ext/p7zip/DOCS/License.txt +52 -0
- data/ext/p7zip/DOCS/MANUAL/commands/add.htm +87 -0
- data/ext/p7zip/DOCS/MANUAL/commands/bench.htm +79 -0
- data/ext/p7zip/DOCS/MANUAL/commands/delete.htm +59 -0
- data/ext/p7zip/DOCS/MANUAL/commands/extract.htm +91 -0
- data/ext/p7zip/DOCS/MANUAL/commands/extract_full.htm +68 -0
- data/ext/p7zip/DOCS/MANUAL/commands/index.htm +33 -0
- data/ext/p7zip/DOCS/MANUAL/commands/list.htm +77 -0
- data/ext/p7zip/DOCS/MANUAL/commands/style.css +232 -0
- data/ext/p7zip/DOCS/MANUAL/commands/test.htm +46 -0
- data/ext/p7zip/DOCS/MANUAL/commands/update.htm +66 -0
- data/ext/p7zip/DOCS/MANUAL/exit_codes.htm +27 -0
- data/ext/p7zip/DOCS/MANUAL/index.htm +29 -0
- data/ext/p7zip/DOCS/MANUAL/style.css +232 -0
- data/ext/p7zip/DOCS/MANUAL/switches/ar_exclude.htm +56 -0
- data/ext/p7zip/DOCS/MANUAL/switches/ar_include.htm +83 -0
- data/ext/p7zip/DOCS/MANUAL/switches/ar_no.htm +52 -0
- data/ext/p7zip/DOCS/MANUAL/switches/charset.htm +49 -0
- data/ext/p7zip/DOCS/MANUAL/switches/exclude.htm +60 -0
- data/ext/p7zip/DOCS/MANUAL/switches/include.htm +87 -0
- data/ext/p7zip/DOCS/MANUAL/switches/index.htm +64 -0
- data/ext/p7zip/DOCS/MANUAL/switches/large_pages.htm +50 -0
- data/ext/p7zip/DOCS/MANUAL/switches/list_tech.htm +36 -0
- data/ext/p7zip/DOCS/MANUAL/switches/method.htm +625 -0
- data/ext/p7zip/DOCS/MANUAL/switches/output_dir.htm +53 -0
- data/ext/p7zip/DOCS/MANUAL/switches/overwrite.htm +56 -0
- data/ext/p7zip/DOCS/MANUAL/switches/password.htm +54 -0
- data/ext/p7zip/DOCS/MANUAL/switches/recurse.htm +83 -0
- data/ext/p7zip/DOCS/MANUAL/switches/sfx.htm +156 -0
- data/ext/p7zip/DOCS/MANUAL/switches/ssc.htm +50 -0
- data/ext/p7zip/DOCS/MANUAL/switches/stdin.htm +55 -0
- data/ext/p7zip/DOCS/MANUAL/switches/stdout.htm +50 -0
- data/ext/p7zip/DOCS/MANUAL/switches/stop_switch.htm +31 -0
- data/ext/p7zip/DOCS/MANUAL/switches/style.css +232 -0
- data/ext/p7zip/DOCS/MANUAL/switches/type.htm +83 -0
- data/ext/p7zip/DOCS/MANUAL/switches/update.htm +176 -0
- data/ext/p7zip/DOCS/MANUAL/switches/volume.htm +49 -0
- data/ext/p7zip/DOCS/MANUAL/switches/working_dir.htm +55 -0
- data/ext/p7zip/DOCS/MANUAL/switches/yes.htm +48 -0
- data/ext/p7zip/DOCS/MANUAL/syntax.htm +120 -0
- data/ext/p7zip/DOCS/Methods.txt +152 -0
- data/ext/p7zip/DOCS/copying.txt +504 -0
- data/ext/p7zip/DOCS/history.txt +456 -0
- data/ext/p7zip/DOCS/lzma.txt +598 -0
- data/ext/p7zip/DOCS/readme.txt +181 -0
- data/ext/p7zip/DOCS/unRarLicense.txt +41 -0
- data/ext/p7zip/README +358 -0
- data/ext/p7zip/TODO +39 -0
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/ChangeLog +41 -0
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme +21 -0
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme.u7z +30 -0
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/u7z +133 -0
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/README +21 -0
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/check.sh +117 -0
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/files.tar +0 -0
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 +33 -0
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/p7zip +144 -0
- data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-shared +14 -0
- data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-static +10 -0
- data/ext/p7zip/install.sh +206 -0
- data/ext/p7zip/install_local_context_menu.sh +18 -0
- data/ext/p7zip/integration_context_menu.txt +51 -0
- data/ext/p7zip/makefile +181 -0
- data/ext/p7zip/makefile.aix_gcc +22 -0
- data/ext/p7zip/makefile.beos +18 -0
- data/ext/p7zip/makefile.crc32 +8 -0
- data/ext/p7zip/makefile.cygwin +20 -0
- data/ext/p7zip/makefile.cygwin_asm +21 -0
- data/ext/p7zip/makefile.djgpp_old +21 -0
- data/ext/p7zip/makefile.djgpp_watt +47 -0
- data/ext/p7zip/makefile.freebsd5 +20 -0
- data/ext/p7zip/makefile.freebsd6 +20 -0
- data/ext/p7zip/makefile.glb +39 -0
- data/ext/p7zip/makefile.gprof +18 -0
- data/ext/p7zip/makefile.hpux-acc +17 -0
- data/ext/p7zip/makefile.hpux-acc_64 +19 -0
- data/ext/p7zip/makefile.hpux-gcc +21 -0
- data/ext/p7zip/makefile.linux_amd64 +22 -0
- data/ext/p7zip/makefile.linux_amd64_asm +24 -0
- data/ext/p7zip/makefile.linux_amd64_asm_icc +27 -0
- data/ext/p7zip/makefile.linux_any_cpu +22 -0
- data/ext/p7zip/makefile.linux_any_cpu_gcc_4.X +24 -0
- data/ext/p7zip/makefile.linux_clang_amd64 +22 -0
- data/ext/p7zip/makefile.linux_cross_arm +22 -0
- data/ext/p7zip/makefile.linux_gcc_2.95_no_need_for_libstdc +20 -0
- data/ext/p7zip/makefile.linux_other +23 -0
- data/ext/p7zip/makefile.linux_s390x +23 -0
- data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X +26 -0
- data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X_fltk +26 -0
- data/ext/p7zip/makefile.linux_x86_asm_gcc_mudflap_4.X +26 -0
- data/ext/p7zip/makefile.linux_x86_asm_icc +25 -0
- data/ext/p7zip/makefile.linux_x86_icc +24 -0
- data/ext/p7zip/makefile.machine_base +22 -0
- data/ext/p7zip/makefile.macosx_32bits +20 -0
- data/ext/p7zip/makefile.macosx_32bits_asm +23 -0
- data/ext/p7zip/makefile.macosx_32bits_ppc +21 -0
- data/ext/p7zip/makefile.macosx_64bits +20 -0
- data/ext/p7zip/makefile.macosx_llvm_64bits +20 -0
- data/ext/p7zip/makefile.netbsd +21 -0
- data/ext/p7zip/makefile.netware_asm_gcc_3.X +41 -0
- data/ext/p7zip/makefile.oldmake +174 -0
- data/ext/p7zip/makefile.openbsd +20 -0
- data/ext/p7zip/makefile.openbsd_no_port +20 -0
- data/ext/p7zip/makefile.qnx_shared.bin +21 -0
- data/ext/p7zip/makefile.qnx_static +21 -0
- data/ext/p7zip/makefile.rules +661 -0
- data/ext/p7zip/makefile.solaris_sparc_CC_32 +21 -0
- data/ext/p7zip/makefile.solaris_sparc_CC_64 +23 -0
- data/ext/p7zip/makefile.solaris_sparc_gcc +21 -0
- data/ext/p7zip/makefile.solaris_x86 +19 -0
- data/ext/p7zip/makefile.tru64 +22 -0
- data/ext/seven_zip_ruby/depend +5 -0
- data/ext/seven_zip_ruby/extconf.rb +131 -0
- data/ext/seven_zip_ruby/guid_defs.h +29 -0
- data/ext/seven_zip_ruby/mutex.h +10 -0
- data/ext/seven_zip_ruby/posix/mutex.h +94 -0
- data/ext/seven_zip_ruby/seven_zip_archive.cpp +1614 -0
- data/ext/seven_zip_ruby/seven_zip_archive.h +515 -0
- data/ext/seven_zip_ruby/util_common.h +444 -0
- data/ext/seven_zip_ruby/utils.cpp +576 -0
- data/ext/seven_zip_ruby/utils.h +25 -0
- data/ext/seven_zip_ruby/win32/mutex.h +130 -0
- data/lib/seven_zip_ruby.rb +16 -0
- data/lib/seven_zip_ruby/7z.dll +0 -0
- data/lib/seven_zip_ruby/7z64.dll +0 -0
- data/lib/seven_zip_ruby/archive_info.rb +21 -0
- data/lib/seven_zip_ruby/entry_info.rb +45 -0
- data/lib/seven_zip_ruby/exception.rb +7 -0
- data/lib/seven_zip_ruby/seven_zip_reader.rb +180 -0
- data/lib/seven_zip_ruby/seven_zip_writer.rb +143 -0
- data/lib/seven_zip_ruby/update_info.rb +116 -0
- data/lib/seven_zip_ruby/version.rb +3 -0
- data/seven_zip_ruby.gemspec +26 -0
- data/spec/seven_zip_ruby_spec.rb +490 -0
- data/spec/seven_zip_ruby_spec_helper.rb +122 -0
- metadata +820 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Archive/Zip/Header.h
|
|
2
|
+
|
|
3
|
+
#include "StdAfx.h"
|
|
4
|
+
|
|
5
|
+
#include "ZipHeader.h"
|
|
6
|
+
|
|
7
|
+
namespace NArchive {
|
|
8
|
+
namespace NZip {
|
|
9
|
+
|
|
10
|
+
namespace NSignature
|
|
11
|
+
{
|
|
12
|
+
UInt32 kLocalFileHeader = 0x04034B50 + 1;
|
|
13
|
+
UInt32 kDataDescriptor = 0x08074B50 + 1;
|
|
14
|
+
UInt32 kCentralFileHeader = 0x02014B50 + 1;
|
|
15
|
+
UInt32 kEndOfCentralDir = 0x06054B50 + 1;
|
|
16
|
+
UInt32 kZip64EndOfCentralDir = 0x06064B50 + 1;
|
|
17
|
+
UInt32 kZip64EndOfCentralDirLocator = 0x07064B50 + 1;
|
|
18
|
+
|
|
19
|
+
class CMarkersInitializer
|
|
20
|
+
{
|
|
21
|
+
public:
|
|
22
|
+
CMarkersInitializer()
|
|
23
|
+
{
|
|
24
|
+
kLocalFileHeader--;
|
|
25
|
+
kDataDescriptor--;
|
|
26
|
+
kCentralFileHeader--;
|
|
27
|
+
kEndOfCentralDir--;
|
|
28
|
+
kZip64EndOfCentralDir--;
|
|
29
|
+
kZip64EndOfCentralDirLocator--;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
static CMarkersInitializer g_MarkerInitializer;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}}
|
|
36
|
+
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// Archive/Zip/Header.h
|
|
2
|
+
|
|
3
|
+
#ifndef __ARCHIVE_ZIP_HEADER_H
|
|
4
|
+
#define __ARCHIVE_ZIP_HEADER_H
|
|
5
|
+
|
|
6
|
+
#include "Common/Types.h"
|
|
7
|
+
|
|
8
|
+
namespace NArchive {
|
|
9
|
+
namespace NZip {
|
|
10
|
+
|
|
11
|
+
namespace NSignature
|
|
12
|
+
{
|
|
13
|
+
extern UInt32 kLocalFileHeader;
|
|
14
|
+
extern UInt32 kDataDescriptor;
|
|
15
|
+
extern UInt32 kCentralFileHeader;
|
|
16
|
+
extern UInt32 kEndOfCentralDir;
|
|
17
|
+
extern UInt32 kZip64EndOfCentralDir;
|
|
18
|
+
extern UInt32 kZip64EndOfCentralDirLocator;
|
|
19
|
+
|
|
20
|
+
static const UInt32 kMarkerSize = 4;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const UInt32 kEcdSize = 22;
|
|
24
|
+
const UInt32 kZip64EcdSize = 44;
|
|
25
|
+
const UInt32 kZip64EcdLocatorSize = 20;
|
|
26
|
+
/*
|
|
27
|
+
struct CEndOfCentralDirectoryRecord
|
|
28
|
+
{
|
|
29
|
+
UInt16 ThisDiskNumber;
|
|
30
|
+
UInt16 StartCentralDirectoryDiskNumber;
|
|
31
|
+
UInt16 NumEntriesInCentaralDirectoryOnThisDisk;
|
|
32
|
+
UInt16 NumEntriesInCentaralDirectory;
|
|
33
|
+
UInt32 CentralDirectorySize;
|
|
34
|
+
UInt32 CentralDirectoryStartOffset;
|
|
35
|
+
UInt16 CommentSize;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
struct CEndOfCentralDirectoryRecordFull
|
|
39
|
+
{
|
|
40
|
+
UInt32 Signature;
|
|
41
|
+
CEndOfCentralDirectoryRecord Header;
|
|
42
|
+
};
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
namespace NFileHeader
|
|
46
|
+
{
|
|
47
|
+
/*
|
|
48
|
+
struct CVersion
|
|
49
|
+
{
|
|
50
|
+
Byte Version;
|
|
51
|
+
Byte HostOS;
|
|
52
|
+
};
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
namespace NCompressionMethod
|
|
56
|
+
{
|
|
57
|
+
enum EType
|
|
58
|
+
{
|
|
59
|
+
kStored = 0,
|
|
60
|
+
kShrunk = 1,
|
|
61
|
+
kReduced1 = 2,
|
|
62
|
+
kReduced2 = 3,
|
|
63
|
+
kReduced3 = 4,
|
|
64
|
+
kReduced4 = 5,
|
|
65
|
+
kImploded = 6,
|
|
66
|
+
kReservedTokenizing = 7, // reserved for tokenizing
|
|
67
|
+
kDeflated = 8,
|
|
68
|
+
kDeflated64 = 9,
|
|
69
|
+
kPKImploding = 10,
|
|
70
|
+
|
|
71
|
+
kBZip2 = 12,
|
|
72
|
+
kLZMA = 14,
|
|
73
|
+
kTerse = 18,
|
|
74
|
+
kLz77 = 19,
|
|
75
|
+
kJpeg = 0x60,
|
|
76
|
+
kWavPack = 0x61,
|
|
77
|
+
kPPMd = 0x62,
|
|
78
|
+
kWzAES = 0x63
|
|
79
|
+
};
|
|
80
|
+
const int kNumCompressionMethods = 11;
|
|
81
|
+
const Byte kMadeByProgramVersion = 63;
|
|
82
|
+
|
|
83
|
+
const Byte kExtractVersion_Default = 10;
|
|
84
|
+
const Byte kExtractVersion_Dir = 20;
|
|
85
|
+
const Byte kExtractVersion_ZipCrypto = 20;
|
|
86
|
+
const Byte kExtractVersion_Deflate = 20;
|
|
87
|
+
const Byte kExtractVersion_Deflate64 = 21;
|
|
88
|
+
const Byte kExtractVersion_Zip64 = 45;
|
|
89
|
+
const Byte kExtractVersion_BZip2 = 46;
|
|
90
|
+
const Byte kExtractVersion_Aes = 51;
|
|
91
|
+
const Byte kExtractVersion_LZMA = 63;
|
|
92
|
+
const Byte kExtractVersion_PPMd = 63;
|
|
93
|
+
|
|
94
|
+
// const Byte kSupportedVersion = 20;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
namespace NExtraID
|
|
98
|
+
{
|
|
99
|
+
enum
|
|
100
|
+
{
|
|
101
|
+
kZip64 = 0x01,
|
|
102
|
+
kNTFS = 0x0A,
|
|
103
|
+
kStrongEncrypt = 0x17,
|
|
104
|
+
kUnixTime = 0x5455,
|
|
105
|
+
kWzAES = 0x9901
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
namespace NNtfsExtra
|
|
110
|
+
{
|
|
111
|
+
const UInt16 kTagTime = 1;
|
|
112
|
+
enum
|
|
113
|
+
{
|
|
114
|
+
kMTime = 0,
|
|
115
|
+
kATime,
|
|
116
|
+
kCTime
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
namespace NUnixTime
|
|
121
|
+
{
|
|
122
|
+
enum
|
|
123
|
+
{
|
|
124
|
+
kMTime = 0,
|
|
125
|
+
kATime,
|
|
126
|
+
kCTime
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const UInt32 kLocalBlockSize = 26;
|
|
131
|
+
/*
|
|
132
|
+
struct CLocalBlock
|
|
133
|
+
{
|
|
134
|
+
CVersion ExtractVersion;
|
|
135
|
+
|
|
136
|
+
UInt16 Flags;
|
|
137
|
+
UInt16 CompressionMethod;
|
|
138
|
+
UInt32 Time;
|
|
139
|
+
UInt32 FileCRC;
|
|
140
|
+
UInt32 PackSize;
|
|
141
|
+
UInt32 UnPackSize;
|
|
142
|
+
UInt16 NameSize;
|
|
143
|
+
UInt16 ExtraSize;
|
|
144
|
+
};
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
const UInt32 kDataDescriptorSize = 16;
|
|
148
|
+
// const UInt32 kDataDescriptor64Size = 16 + 8;
|
|
149
|
+
/*
|
|
150
|
+
struct CDataDescriptor
|
|
151
|
+
{
|
|
152
|
+
UInt32 Signature;
|
|
153
|
+
UInt32 FileCRC;
|
|
154
|
+
UInt32 PackSize;
|
|
155
|
+
UInt32 UnPackSize;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
struct CLocalBlockFull
|
|
159
|
+
{
|
|
160
|
+
UInt32 Signature;
|
|
161
|
+
CLocalBlock Header;
|
|
162
|
+
};
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
const UInt32 kCentralBlockSize = 42;
|
|
166
|
+
/*
|
|
167
|
+
struct CBlock
|
|
168
|
+
{
|
|
169
|
+
CVersion MadeByVersion;
|
|
170
|
+
CVersion ExtractVersion;
|
|
171
|
+
UInt16 Flags;
|
|
172
|
+
UInt16 CompressionMethod;
|
|
173
|
+
UInt32 Time;
|
|
174
|
+
UInt32 FileCRC;
|
|
175
|
+
UInt32 PackSize;
|
|
176
|
+
UInt32 UnPackSize;
|
|
177
|
+
UInt16 NameSize;
|
|
178
|
+
UInt16 ExtraSize;
|
|
179
|
+
UInt16 CommentSize;
|
|
180
|
+
UInt16 DiskNumberStart;
|
|
181
|
+
UInt16 InternalAttributes;
|
|
182
|
+
UInt32 ExternalAttributes;
|
|
183
|
+
UInt32 LocalHeaderOffset;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
struct CBlockFull
|
|
187
|
+
{
|
|
188
|
+
UInt32 Signature;
|
|
189
|
+
CBlock Header;
|
|
190
|
+
};
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
namespace NFlags
|
|
194
|
+
{
|
|
195
|
+
const int kEncrypted = 1 << 0;
|
|
196
|
+
const int kLzmaEOS = 1 << 1;
|
|
197
|
+
const int kDescriptorUsedMask = 1 << 3;
|
|
198
|
+
const int kStrongEncrypted = 1 << 6;
|
|
199
|
+
const int kUtf8 = 1 << 11;
|
|
200
|
+
|
|
201
|
+
const int kImplodeDictionarySizeMask = 1 << 1;
|
|
202
|
+
const int kImplodeLiteralsOnMask = 1 << 2;
|
|
203
|
+
|
|
204
|
+
const int kDeflateTypeBitStart = 1;
|
|
205
|
+
const int kNumDeflateTypeBits = 2;
|
|
206
|
+
const int kNumDeflateTypes = (1 << kNumDeflateTypeBits);
|
|
207
|
+
const int kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
namespace NHostOS
|
|
211
|
+
{
|
|
212
|
+
enum EEnum
|
|
213
|
+
{
|
|
214
|
+
kFAT = 0,
|
|
215
|
+
kAMIGA = 1,
|
|
216
|
+
kVMS = 2, // VAX/VMS
|
|
217
|
+
kUnix = 3,
|
|
218
|
+
kVM_CMS = 4,
|
|
219
|
+
kAtari = 5, // what if it's a minix filesystem? [cjh]
|
|
220
|
+
kHPFS = 6, // filesystem used by OS/2 (and NT 3.x)
|
|
221
|
+
kMac = 7,
|
|
222
|
+
kZ_System = 8,
|
|
223
|
+
kCPM = 9,
|
|
224
|
+
kTOPS20 = 10, // pkzip 2.50 NTFS
|
|
225
|
+
kNTFS = 11, // filesystem used by Windows NT
|
|
226
|
+
kQDOS = 12, // SMS/QDOS
|
|
227
|
+
kAcorn = 13, // Archimedes Acorn RISC OS
|
|
228
|
+
kVFAT = 14, // filesystem used by Windows 95, NT
|
|
229
|
+
kMVS = 15,
|
|
230
|
+
kBeOS = 16, // hybrid POSIX/database filesystem
|
|
231
|
+
kTandem = 17,
|
|
232
|
+
kOS400 = 18,
|
|
233
|
+
kOSX = 19
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
namespace NUnixAttribute
|
|
237
|
+
{
|
|
238
|
+
const UInt32 kIFMT = 0170000; /* Unix file type mask */
|
|
239
|
+
|
|
240
|
+
const UInt32 kIFDIR = 0040000; /* Unix directory */
|
|
241
|
+
const UInt32 kIFREG = 0100000; /* Unix regular file */
|
|
242
|
+
const UInt32 kIFSOCK = 0140000; /* Unix socket (BSD, not SysV or Amiga) */
|
|
243
|
+
const UInt32 kIFLNK = 0120000; /* Unix symbolic link (not SysV, Amiga) */
|
|
244
|
+
const UInt32 kIFBLK = 0060000; /* Unix block special (not Amiga) */
|
|
245
|
+
const UInt32 kIFCHR = 0020000; /* Unix character special (not Amiga) */
|
|
246
|
+
const UInt32 kIFIFO = 0010000; /* Unix fifo (BCC, not MSC or Amiga) */
|
|
247
|
+
|
|
248
|
+
const UInt32 kISUID = 04000; /* Unix set user id on execution */
|
|
249
|
+
const UInt32 kISGID = 02000; /* Unix set group id on execution */
|
|
250
|
+
const UInt32 kISVTX = 01000; /* Unix directory permissions control */
|
|
251
|
+
const UInt32 kENFMT = kISGID; /* Unix record locking enforcement flag */
|
|
252
|
+
const UInt32 kIRWXU = 00700; /* Unix read, write, execute: owner */
|
|
253
|
+
const UInt32 kIRUSR = 00400; /* Unix read permission: owner */
|
|
254
|
+
const UInt32 kIWUSR = 00200; /* Unix write permission: owner */
|
|
255
|
+
const UInt32 kIXUSR = 00100; /* Unix execute permission: owner */
|
|
256
|
+
const UInt32 kIRWXG = 00070; /* Unix read, write, execute: group */
|
|
257
|
+
const UInt32 kIRGRP = 00040; /* Unix read permission: group */
|
|
258
|
+
const UInt32 kIWGRP = 00020; /* Unix write permission: group */
|
|
259
|
+
const UInt32 kIXGRP = 00010; /* Unix execute permission: group */
|
|
260
|
+
const UInt32 kIRWXO = 00007; /* Unix read, write, execute: other */
|
|
261
|
+
const UInt32 kIROTH = 00004; /* Unix read permission: other */
|
|
262
|
+
const UInt32 kIWOTH = 00002; /* Unix write permission: other */
|
|
263
|
+
const UInt32 kIXOTH = 00001; /* Unix execute permission: other */
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
namespace NAmigaAttribute
|
|
267
|
+
{
|
|
268
|
+
const UInt32 kIFMT = 06000; /* Amiga file type mask */
|
|
269
|
+
const UInt32 kIFDIR = 04000; /* Amiga directory */
|
|
270
|
+
const UInt32 kIFREG = 02000; /* Amiga regular file */
|
|
271
|
+
const UInt32 kIHIDDEN = 00200; /* to be supported in AmigaDOS 3.x */
|
|
272
|
+
const UInt32 kISCRIPT = 00100; /* executable script (text command file) */
|
|
273
|
+
const UInt32 kIPURE = 00040; /* allow loading into resident memory */
|
|
274
|
+
const UInt32 kIARCHIVE = 00020; /* not modified since bit was last set */
|
|
275
|
+
const UInt32 kIREAD = 00010; /* can be opened for reading */
|
|
276
|
+
const UInt32 kIWRITE = 00004; /* can be opened for writing */
|
|
277
|
+
const UInt32 kIEXECUTE = 00002; /* executable image, a loadable runfile */
|
|
278
|
+
const UInt32 kIDELETE = 00001; /* can be deleted */
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
}}
|
|
283
|
+
|
|
284
|
+
#endif
|
|
@@ -0,0 +1,893 @@
|
|
|
1
|
+
// Archive/ZipIn.cpp
|
|
2
|
+
|
|
3
|
+
#include "StdAfx.h"
|
|
4
|
+
|
|
5
|
+
#include "../../../../C/CpuArch.h"
|
|
6
|
+
|
|
7
|
+
#include "Common/DynamicBuffer.h"
|
|
8
|
+
|
|
9
|
+
#include "../../Common/LimitedStreams.h"
|
|
10
|
+
#include "../../Common/StreamUtils.h"
|
|
11
|
+
|
|
12
|
+
#include "ZipIn.h"
|
|
13
|
+
|
|
14
|
+
#define Get16(p) GetUi16(p)
|
|
15
|
+
#define Get32(p) GetUi32(p)
|
|
16
|
+
#define Get64(p) GetUi64(p)
|
|
17
|
+
|
|
18
|
+
namespace NArchive {
|
|
19
|
+
namespace NZip {
|
|
20
|
+
|
|
21
|
+
HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit)
|
|
22
|
+
{
|
|
23
|
+
_inBufMode = false;
|
|
24
|
+
Close();
|
|
25
|
+
RINOK(stream->Seek(0, STREAM_SEEK_CUR, &m_StreamStartPosition));
|
|
26
|
+
m_Position = m_StreamStartPosition;
|
|
27
|
+
RINOK(FindAndReadMarker(stream, searchHeaderSizeLimit));
|
|
28
|
+
RINOK(stream->Seek(m_Position, STREAM_SEEK_SET, NULL));
|
|
29
|
+
m_Stream = stream;
|
|
30
|
+
return S_OK;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void CInArchive::Close()
|
|
34
|
+
{
|
|
35
|
+
_inBuffer.ReleaseStream();
|
|
36
|
+
m_Stream.Release();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
HRESULT CInArchive::Seek(UInt64 offset)
|
|
40
|
+
{
|
|
41
|
+
return m_Stream->Seek(offset, STREAM_SEEK_SET, NULL);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
//////////////////////////////////////
|
|
45
|
+
// Markers
|
|
46
|
+
|
|
47
|
+
static inline bool TestMarkerCandidate(const Byte *p, UInt32 &value)
|
|
48
|
+
{
|
|
49
|
+
value = Get32(p);
|
|
50
|
+
return
|
|
51
|
+
(value == NSignature::kLocalFileHeader) ||
|
|
52
|
+
(value == NSignature::kEndOfCentralDir);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static const UInt32 kNumMarkerAddtionalBytes = 2;
|
|
56
|
+
static inline bool TestMarkerCandidate2(const Byte *p, UInt32 &value)
|
|
57
|
+
{
|
|
58
|
+
value = Get32(p);
|
|
59
|
+
if (value == NSignature::kEndOfCentralDir)
|
|
60
|
+
return (Get16(p + 4) == 0);
|
|
61
|
+
return (value == NSignature::kLocalFileHeader && p[4] < 128);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
HRESULT CInArchive::FindAndReadMarker(IInStream *stream, const UInt64 *searchHeaderSizeLimit)
|
|
65
|
+
{
|
|
66
|
+
ArcInfo.Clear();
|
|
67
|
+
m_Position = m_StreamStartPosition;
|
|
68
|
+
|
|
69
|
+
Byte marker[NSignature::kMarkerSize];
|
|
70
|
+
RINOK(ReadStream_FALSE(stream, marker, NSignature::kMarkerSize));
|
|
71
|
+
m_Position += NSignature::kMarkerSize;
|
|
72
|
+
if (TestMarkerCandidate(marker, m_Signature))
|
|
73
|
+
return S_OK;
|
|
74
|
+
|
|
75
|
+
CByteDynamicBuffer dynamicBuffer;
|
|
76
|
+
const UInt32 kSearchMarkerBufferSize = 0x10000;
|
|
77
|
+
dynamicBuffer.EnsureCapacity(kSearchMarkerBufferSize);
|
|
78
|
+
Byte *buffer = dynamicBuffer;
|
|
79
|
+
UInt32 numBytesPrev = NSignature::kMarkerSize - 1;
|
|
80
|
+
memcpy(buffer, marker + 1, numBytesPrev);
|
|
81
|
+
UInt64 curTestPos = m_StreamStartPosition + 1;
|
|
82
|
+
for (;;)
|
|
83
|
+
{
|
|
84
|
+
if (searchHeaderSizeLimit != NULL)
|
|
85
|
+
if (curTestPos - m_StreamStartPosition > *searchHeaderSizeLimit)
|
|
86
|
+
break;
|
|
87
|
+
size_t numReadBytes = kSearchMarkerBufferSize - numBytesPrev;
|
|
88
|
+
RINOK(ReadStream(stream, buffer + numBytesPrev, &numReadBytes));
|
|
89
|
+
m_Position += numReadBytes;
|
|
90
|
+
UInt32 numBytesInBuffer = numBytesPrev + (UInt32)numReadBytes;
|
|
91
|
+
const UInt32 kMarker2Size = NSignature::kMarkerSize + kNumMarkerAddtionalBytes;
|
|
92
|
+
if (numBytesInBuffer < kMarker2Size)
|
|
93
|
+
break;
|
|
94
|
+
UInt32 numTests = numBytesInBuffer - kMarker2Size + 1;
|
|
95
|
+
for (UInt32 pos = 0; pos < numTests; pos++)
|
|
96
|
+
{
|
|
97
|
+
if (buffer[pos] != 0x50)
|
|
98
|
+
continue;
|
|
99
|
+
if (TestMarkerCandidate2(buffer + pos, m_Signature))
|
|
100
|
+
{
|
|
101
|
+
curTestPos += pos;
|
|
102
|
+
ArcInfo.StartPosition = curTestPos;
|
|
103
|
+
m_Position = curTestPos + NSignature::kMarkerSize;
|
|
104
|
+
return S_OK;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
curTestPos += numTests;
|
|
108
|
+
numBytesPrev = numBytesInBuffer - numTests;
|
|
109
|
+
memmove(buffer, buffer + numTests, numBytesPrev);
|
|
110
|
+
}
|
|
111
|
+
return S_FALSE;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
HRESULT CInArchive::ReadBytes(void *data, UInt32 size, UInt32 *processedSize)
|
|
115
|
+
{
|
|
116
|
+
size_t realProcessedSize = size;
|
|
117
|
+
HRESULT result = S_OK;
|
|
118
|
+
if (_inBufMode)
|
|
119
|
+
{
|
|
120
|
+
try { realProcessedSize = _inBuffer.ReadBytes((Byte *)data, size); }
|
|
121
|
+
catch (const CInBufferException &e) { return e.ErrorCode; }
|
|
122
|
+
}
|
|
123
|
+
else
|
|
124
|
+
result = ReadStream(m_Stream, data, &realProcessedSize);
|
|
125
|
+
if (processedSize != NULL)
|
|
126
|
+
*processedSize = (UInt32)realProcessedSize;
|
|
127
|
+
m_Position += realProcessedSize;
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
void CInArchive::Skip(UInt64 num)
|
|
132
|
+
{
|
|
133
|
+
for (UInt64 i = 0; i < num; i++)
|
|
134
|
+
ReadByte();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
void CInArchive::IncreaseRealPosition(UInt64 addValue)
|
|
138
|
+
{
|
|
139
|
+
if (m_Stream->Seek(addValue, STREAM_SEEK_CUR, &m_Position) != S_OK)
|
|
140
|
+
throw CInArchiveException(CInArchiveException::kSeekStreamError);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
bool CInArchive::ReadBytesAndTestSize(void *data, UInt32 size)
|
|
144
|
+
{
|
|
145
|
+
UInt32 realProcessedSize;
|
|
146
|
+
if (ReadBytes(data, size, &realProcessedSize) != S_OK)
|
|
147
|
+
throw CInArchiveException(CInArchiveException::kReadStreamError);
|
|
148
|
+
return (realProcessedSize == size);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
void CInArchive::SafeReadBytes(void *data, UInt32 size)
|
|
152
|
+
{
|
|
153
|
+
if (!ReadBytesAndTestSize(data, size))
|
|
154
|
+
throw CInArchiveException(CInArchiveException::kUnexpectedEndOfArchive);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
void CInArchive::ReadBuffer(CByteBuffer &buffer, UInt32 size)
|
|
158
|
+
{
|
|
159
|
+
buffer.SetCapacity(size);
|
|
160
|
+
if (size > 0)
|
|
161
|
+
SafeReadBytes(buffer, size);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
Byte CInArchive::ReadByte()
|
|
165
|
+
{
|
|
166
|
+
Byte b;
|
|
167
|
+
SafeReadBytes(&b, 1);
|
|
168
|
+
return b;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
UInt16 CInArchive::ReadUInt16()
|
|
172
|
+
{
|
|
173
|
+
Byte buf[2];
|
|
174
|
+
SafeReadBytes(buf, 2);
|
|
175
|
+
return Get16(buf);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
UInt32 CInArchive::ReadUInt32()
|
|
179
|
+
{
|
|
180
|
+
Byte buf[4];
|
|
181
|
+
SafeReadBytes(buf, 4);
|
|
182
|
+
return Get32(buf);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
UInt64 CInArchive::ReadUInt64()
|
|
186
|
+
{
|
|
187
|
+
Byte buf[8];
|
|
188
|
+
SafeReadBytes(buf, 8);
|
|
189
|
+
return Get64(buf);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
bool CInArchive::ReadUInt32(UInt32 &value)
|
|
193
|
+
{
|
|
194
|
+
Byte buf[4];
|
|
195
|
+
if (!ReadBytesAndTestSize(buf, 4))
|
|
196
|
+
return false;
|
|
197
|
+
value = Get32(buf);
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
void CInArchive::ReadFileName(UInt32 nameSize, AString &dest)
|
|
202
|
+
{
|
|
203
|
+
if (nameSize == 0)
|
|
204
|
+
dest.Empty();
|
|
205
|
+
char *p = dest.GetBuffer((int)nameSize);
|
|
206
|
+
SafeReadBytes(p, nameSize);
|
|
207
|
+
p[nameSize] = 0;
|
|
208
|
+
dest.ReleaseBuffer();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
void CInArchive::ReadExtra(UInt32 extraSize, CExtraBlock &extraBlock,
|
|
212
|
+
UInt64 &unpackSize, UInt64 &packSize, UInt64 &localHeaderOffset, UInt32 &diskStartNumber)
|
|
213
|
+
{
|
|
214
|
+
extraBlock.Clear();
|
|
215
|
+
UInt32 remain = extraSize;
|
|
216
|
+
while(remain >= 4)
|
|
217
|
+
{
|
|
218
|
+
CExtraSubBlock subBlock;
|
|
219
|
+
subBlock.ID = ReadUInt16();
|
|
220
|
+
UInt32 dataSize = ReadUInt16();
|
|
221
|
+
remain -= 4;
|
|
222
|
+
if (dataSize > remain) // it's bug
|
|
223
|
+
dataSize = remain;
|
|
224
|
+
if (subBlock.ID == NFileHeader::NExtraID::kZip64)
|
|
225
|
+
{
|
|
226
|
+
if (unpackSize == 0xFFFFFFFF)
|
|
227
|
+
{
|
|
228
|
+
if (dataSize < 8)
|
|
229
|
+
break;
|
|
230
|
+
unpackSize = ReadUInt64();
|
|
231
|
+
remain -= 8;
|
|
232
|
+
dataSize -= 8;
|
|
233
|
+
}
|
|
234
|
+
if (packSize == 0xFFFFFFFF)
|
|
235
|
+
{
|
|
236
|
+
if (dataSize < 8)
|
|
237
|
+
break;
|
|
238
|
+
packSize = ReadUInt64();
|
|
239
|
+
remain -= 8;
|
|
240
|
+
dataSize -= 8;
|
|
241
|
+
}
|
|
242
|
+
if (localHeaderOffset == 0xFFFFFFFF)
|
|
243
|
+
{
|
|
244
|
+
if (dataSize < 8)
|
|
245
|
+
break;
|
|
246
|
+
localHeaderOffset = ReadUInt64();
|
|
247
|
+
remain -= 8;
|
|
248
|
+
dataSize -= 8;
|
|
249
|
+
}
|
|
250
|
+
if (diskStartNumber == 0xFFFF)
|
|
251
|
+
{
|
|
252
|
+
if (dataSize < 4)
|
|
253
|
+
break;
|
|
254
|
+
diskStartNumber = ReadUInt32();
|
|
255
|
+
remain -= 4;
|
|
256
|
+
dataSize -= 4;
|
|
257
|
+
}
|
|
258
|
+
for (UInt32 i = 0; i < dataSize; i++)
|
|
259
|
+
ReadByte();
|
|
260
|
+
}
|
|
261
|
+
else
|
|
262
|
+
{
|
|
263
|
+
ReadBuffer(subBlock.Data, dataSize);
|
|
264
|
+
extraBlock.SubBlocks.Add(subBlock);
|
|
265
|
+
}
|
|
266
|
+
remain -= dataSize;
|
|
267
|
+
}
|
|
268
|
+
Skip(remain);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
HRESULT CInArchive::ReadLocalItem(CItemEx &item)
|
|
272
|
+
{
|
|
273
|
+
const int kBufSize = 26;
|
|
274
|
+
Byte p[kBufSize];
|
|
275
|
+
SafeReadBytes(p, kBufSize);
|
|
276
|
+
|
|
277
|
+
item.ExtractVersion.Version = p[0];
|
|
278
|
+
item.ExtractVersion.HostOS = p[1];
|
|
279
|
+
item.Flags = Get16(p + 2);
|
|
280
|
+
item.CompressionMethod = Get16(p + 4);
|
|
281
|
+
item.Time = Get32(p + 6);
|
|
282
|
+
item.FileCRC = Get32(p + 10);
|
|
283
|
+
item.PackSize = Get32(p + 14);
|
|
284
|
+
item.UnPackSize = Get32(p + 18);
|
|
285
|
+
UInt32 fileNameSize = Get16(p + 22);
|
|
286
|
+
item.LocalExtraSize = Get16(p + 24);
|
|
287
|
+
ReadFileName(fileNameSize, item.Name);
|
|
288
|
+
item.FileHeaderWithNameSize = 4 + NFileHeader::kLocalBlockSize + fileNameSize;
|
|
289
|
+
if (item.LocalExtraSize > 0)
|
|
290
|
+
{
|
|
291
|
+
UInt64 localHeaderOffset = 0;
|
|
292
|
+
UInt32 diskStartNumber = 0;
|
|
293
|
+
ReadExtra(item.LocalExtraSize, item.LocalExtra, item.UnPackSize, item.PackSize,
|
|
294
|
+
localHeaderOffset, diskStartNumber);
|
|
295
|
+
}
|
|
296
|
+
/*
|
|
297
|
+
if (item.IsDir())
|
|
298
|
+
item.UnPackSize = 0; // check It
|
|
299
|
+
*/
|
|
300
|
+
return S_OK;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
static bool FlagsAreSame(CItem &i1, CItem &i2)
|
|
304
|
+
{
|
|
305
|
+
if (i1.CompressionMethod != i2.CompressionMethod)
|
|
306
|
+
return false;
|
|
307
|
+
// i1.Time
|
|
308
|
+
|
|
309
|
+
if (i1.Flags == i2.Flags)
|
|
310
|
+
return true;
|
|
311
|
+
UInt32 mask = 0xFFFF;
|
|
312
|
+
switch(i1.CompressionMethod)
|
|
313
|
+
{
|
|
314
|
+
case NFileHeader::NCompressionMethod::kDeflated:
|
|
315
|
+
mask = 0x7FF9;
|
|
316
|
+
break;
|
|
317
|
+
default:
|
|
318
|
+
if (i1.CompressionMethod <= NFileHeader::NCompressionMethod::kImploded)
|
|
319
|
+
mask = 0x7FFF;
|
|
320
|
+
}
|
|
321
|
+
return ((i1.Flags & mask) == (i2.Flags & mask));
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
HRESULT CInArchive::ReadLocalItemAfterCdItem(CItemEx &item)
|
|
325
|
+
{
|
|
326
|
+
if (item.FromLocal)
|
|
327
|
+
return S_OK;
|
|
328
|
+
try
|
|
329
|
+
{
|
|
330
|
+
RINOK(Seek(ArcInfo.Base + item.LocalHeaderPosition));
|
|
331
|
+
CItemEx localItem;
|
|
332
|
+
if (ReadUInt32() != NSignature::kLocalFileHeader)
|
|
333
|
+
return S_FALSE;
|
|
334
|
+
RINOK(ReadLocalItem(localItem));
|
|
335
|
+
if (!FlagsAreSame(item, localItem))
|
|
336
|
+
return S_FALSE;
|
|
337
|
+
|
|
338
|
+
if ((!localItem.HasDescriptor() &&
|
|
339
|
+
(
|
|
340
|
+
item.FileCRC != localItem.FileCRC ||
|
|
341
|
+
item.PackSize != localItem.PackSize ||
|
|
342
|
+
item.UnPackSize != localItem.UnPackSize
|
|
343
|
+
)
|
|
344
|
+
) ||
|
|
345
|
+
item.Name.Length() != localItem.Name.Length()
|
|
346
|
+
)
|
|
347
|
+
return S_FALSE;
|
|
348
|
+
item.FileHeaderWithNameSize = localItem.FileHeaderWithNameSize;
|
|
349
|
+
item.LocalExtraSize = localItem.LocalExtraSize;
|
|
350
|
+
item.LocalExtra = localItem.LocalExtra;
|
|
351
|
+
item.FromLocal = true;
|
|
352
|
+
}
|
|
353
|
+
catch(...) { return S_FALSE; }
|
|
354
|
+
return S_OK;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
HRESULT CInArchive::ReadLocalItemDescriptor(CItemEx &item)
|
|
358
|
+
{
|
|
359
|
+
if (item.HasDescriptor())
|
|
360
|
+
{
|
|
361
|
+
const int kBufferSize = (1 << 12);
|
|
362
|
+
Byte buffer[kBufferSize];
|
|
363
|
+
|
|
364
|
+
UInt32 numBytesInBuffer = 0;
|
|
365
|
+
UInt32 packedSize = 0;
|
|
366
|
+
|
|
367
|
+
bool descriptorWasFound = false;
|
|
368
|
+
for (;;)
|
|
369
|
+
{
|
|
370
|
+
UInt32 processedSize;
|
|
371
|
+
RINOK(ReadBytes(buffer + numBytesInBuffer, kBufferSize - numBytesInBuffer, &processedSize));
|
|
372
|
+
numBytesInBuffer += processedSize;
|
|
373
|
+
if (numBytesInBuffer < NFileHeader::kDataDescriptorSize)
|
|
374
|
+
return S_FALSE;
|
|
375
|
+
UInt32 i;
|
|
376
|
+
for (i = 0; i <= numBytesInBuffer - NFileHeader::kDataDescriptorSize; i++)
|
|
377
|
+
{
|
|
378
|
+
// descriptorSignature field is Info-ZIP's extension
|
|
379
|
+
// to Zip specification.
|
|
380
|
+
UInt32 descriptorSignature = Get32(buffer + i);
|
|
381
|
+
|
|
382
|
+
// !!!! It must be fixed for Zip64 archives
|
|
383
|
+
UInt32 descriptorPackSize = Get32(buffer + i + 8);
|
|
384
|
+
if (descriptorSignature== NSignature::kDataDescriptor && descriptorPackSize == packedSize + i)
|
|
385
|
+
{
|
|
386
|
+
descriptorWasFound = true;
|
|
387
|
+
item.FileCRC = Get32(buffer + i + 4);
|
|
388
|
+
item.PackSize = descriptorPackSize;
|
|
389
|
+
item.UnPackSize = Get32(buffer + i + 12);
|
|
390
|
+
IncreaseRealPosition(Int64(Int32(0 - (numBytesInBuffer - i - NFileHeader::kDataDescriptorSize))));
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
if (descriptorWasFound)
|
|
395
|
+
break;
|
|
396
|
+
packedSize += i;
|
|
397
|
+
int j;
|
|
398
|
+
for (j = 0; i < numBytesInBuffer; i++, j++)
|
|
399
|
+
buffer[j] = buffer[i];
|
|
400
|
+
numBytesInBuffer = j;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
else
|
|
404
|
+
IncreaseRealPosition(item.PackSize);
|
|
405
|
+
return S_OK;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
HRESULT CInArchive::ReadLocalItemAfterCdItemFull(CItemEx &item)
|
|
409
|
+
{
|
|
410
|
+
if (item.FromLocal)
|
|
411
|
+
return S_OK;
|
|
412
|
+
try
|
|
413
|
+
{
|
|
414
|
+
RINOK(ReadLocalItemAfterCdItem(item));
|
|
415
|
+
if (item.HasDescriptor())
|
|
416
|
+
{
|
|
417
|
+
RINOK(Seek(ArcInfo.Base + item.GetDataPosition() + item.PackSize));
|
|
418
|
+
if (ReadUInt32() != NSignature::kDataDescriptor)
|
|
419
|
+
return S_FALSE;
|
|
420
|
+
UInt32 crc = ReadUInt32();
|
|
421
|
+
UInt64 packSize, unpackSize;
|
|
422
|
+
|
|
423
|
+
/*
|
|
424
|
+
if (IsZip64)
|
|
425
|
+
{
|
|
426
|
+
packSize = ReadUInt64();
|
|
427
|
+
unpackSize = ReadUInt64();
|
|
428
|
+
}
|
|
429
|
+
else
|
|
430
|
+
*/
|
|
431
|
+
{
|
|
432
|
+
packSize = ReadUInt32();
|
|
433
|
+
unpackSize = ReadUInt32();
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
if (crc != item.FileCRC || item.PackSize != packSize || item.UnPackSize != unpackSize)
|
|
437
|
+
return S_FALSE;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
catch(...) { return S_FALSE; }
|
|
441
|
+
return S_OK;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
HRESULT CInArchive::ReadCdItem(CItemEx &item)
|
|
445
|
+
{
|
|
446
|
+
item.FromCentral = true;
|
|
447
|
+
const int kBufSize = 42;
|
|
448
|
+
Byte p[kBufSize];
|
|
449
|
+
SafeReadBytes(p, kBufSize);
|
|
450
|
+
item.MadeByVersion.Version = p[0];
|
|
451
|
+
item.MadeByVersion.HostOS = p[1];
|
|
452
|
+
item.ExtractVersion.Version = p[2];
|
|
453
|
+
item.ExtractVersion.HostOS = p[3];
|
|
454
|
+
item.Flags = Get16(p + 4);
|
|
455
|
+
item.CompressionMethod = Get16(p + 6);
|
|
456
|
+
item.Time = Get32(p + 8);
|
|
457
|
+
item.FileCRC = Get32(p + 12);
|
|
458
|
+
item.PackSize = Get32(p + 16);
|
|
459
|
+
item.UnPackSize = Get32(p + 20);
|
|
460
|
+
UInt16 headerNameSize = Get16(p + 24);
|
|
461
|
+
UInt16 headerExtraSize = Get16(p + 26);
|
|
462
|
+
UInt16 headerCommentSize = Get16(p + 28);
|
|
463
|
+
UInt32 headerDiskNumberStart = Get16(p + 30);
|
|
464
|
+
item.InternalAttributes = Get16(p + 32);
|
|
465
|
+
item.ExternalAttributes = Get32(p + 34);
|
|
466
|
+
item.LocalHeaderPosition = Get32(p + 38);
|
|
467
|
+
ReadFileName(headerNameSize, item.Name);
|
|
468
|
+
|
|
469
|
+
if (headerExtraSize > 0)
|
|
470
|
+
{
|
|
471
|
+
ReadExtra(headerExtraSize, item.CentralExtra, item.UnPackSize, item.PackSize,
|
|
472
|
+
item.LocalHeaderPosition, headerDiskNumberStart);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (headerDiskNumberStart != 0)
|
|
476
|
+
throw CInArchiveException(CInArchiveException::kMultiVolumeArchiveAreNotSupported);
|
|
477
|
+
|
|
478
|
+
// May be these strings must be deleted
|
|
479
|
+
/*
|
|
480
|
+
if (item.IsDir())
|
|
481
|
+
item.UnPackSize = 0;
|
|
482
|
+
*/
|
|
483
|
+
|
|
484
|
+
ReadBuffer(item.Comment, headerCommentSize);
|
|
485
|
+
return S_OK;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
HRESULT CInArchive::TryEcd64(UInt64 offset, CCdInfo &cdInfo)
|
|
489
|
+
{
|
|
490
|
+
RINOK(Seek(offset));
|
|
491
|
+
const UInt32 kEcd64Size = 56;
|
|
492
|
+
Byte buf[kEcd64Size];
|
|
493
|
+
if (!ReadBytesAndTestSize(buf, kEcd64Size))
|
|
494
|
+
return S_FALSE;
|
|
495
|
+
if (Get32(buf) != NSignature::kZip64EndOfCentralDir)
|
|
496
|
+
return S_FALSE;
|
|
497
|
+
// cdInfo.NumEntries = Get64(buf + 24);
|
|
498
|
+
cdInfo.Size = Get64(buf + 40);
|
|
499
|
+
cdInfo.Offset = Get64(buf + 48);
|
|
500
|
+
return S_OK;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
HRESULT CInArchive::FindCd(CCdInfo &cdInfo)
|
|
504
|
+
{
|
|
505
|
+
UInt64 endPosition;
|
|
506
|
+
RINOK(m_Stream->Seek(0, STREAM_SEEK_END, &endPosition));
|
|
507
|
+
const UInt32 kBufSizeMax = (1 << 16) + kEcdSize + kZip64EcdLocatorSize;
|
|
508
|
+
CByteBuffer byteBuffer;
|
|
509
|
+
byteBuffer.SetCapacity(kBufSizeMax);
|
|
510
|
+
Byte *buf = byteBuffer;
|
|
511
|
+
UInt32 bufSize = (endPosition < kBufSizeMax) ? (UInt32)endPosition : kBufSizeMax;
|
|
512
|
+
if (bufSize < kEcdSize)
|
|
513
|
+
return S_FALSE;
|
|
514
|
+
UInt64 startPosition = endPosition - bufSize;
|
|
515
|
+
RINOK(m_Stream->Seek(startPosition, STREAM_SEEK_SET, &m_Position));
|
|
516
|
+
if (m_Position != startPosition)
|
|
517
|
+
return S_FALSE;
|
|
518
|
+
if (!ReadBytesAndTestSize(buf, bufSize))
|
|
519
|
+
return S_FALSE;
|
|
520
|
+
for (int i = (int)(bufSize - kEcdSize); i >= 0; i--)
|
|
521
|
+
{
|
|
522
|
+
if (Get32(buf + i) == NSignature::kEndOfCentralDir)
|
|
523
|
+
{
|
|
524
|
+
if (i >= kZip64EcdLocatorSize)
|
|
525
|
+
{
|
|
526
|
+
const Byte *locator = buf + i - kZip64EcdLocatorSize;
|
|
527
|
+
if (Get32(locator) == NSignature::kZip64EndOfCentralDirLocator)
|
|
528
|
+
{
|
|
529
|
+
UInt64 ecd64Offset = Get64(locator + 8);
|
|
530
|
+
if (TryEcd64(ecd64Offset, cdInfo) == S_OK)
|
|
531
|
+
return S_OK;
|
|
532
|
+
if (TryEcd64(ArcInfo.StartPosition + ecd64Offset, cdInfo) == S_OK)
|
|
533
|
+
{
|
|
534
|
+
ArcInfo.Base = ArcInfo.StartPosition;
|
|
535
|
+
return S_OK;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (Get32(buf + i + 4) == 0)
|
|
540
|
+
{
|
|
541
|
+
// cdInfo.NumEntries = GetUInt16(buf + i + 10);
|
|
542
|
+
cdInfo.Size = Get32(buf + i + 12);
|
|
543
|
+
cdInfo.Offset = Get32(buf + i + 16);
|
|
544
|
+
UInt64 curPos = endPosition - bufSize + i;
|
|
545
|
+
UInt64 cdEnd = cdInfo.Size + cdInfo.Offset;
|
|
546
|
+
if (curPos != cdEnd)
|
|
547
|
+
{
|
|
548
|
+
/*
|
|
549
|
+
if (cdInfo.Offset <= 16 && cdInfo.Size != 0)
|
|
550
|
+
{
|
|
551
|
+
// here we support some rare ZIP files with Central directory at the start
|
|
552
|
+
ArcInfo.Base = 0;
|
|
553
|
+
}
|
|
554
|
+
else
|
|
555
|
+
*/
|
|
556
|
+
ArcInfo.Base = curPos - cdEnd;
|
|
557
|
+
}
|
|
558
|
+
return S_OK;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return S_FALSE;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
HRESULT CInArchive::TryReadCd(CObjectVector<CItemEx> &items, UInt64 cdOffset, UInt64 cdSize, CProgressVirt *progress)
|
|
566
|
+
{
|
|
567
|
+
items.Clear();
|
|
568
|
+
RINOK(m_Stream->Seek(cdOffset, STREAM_SEEK_SET, &m_Position));
|
|
569
|
+
if (m_Position != cdOffset)
|
|
570
|
+
return S_FALSE;
|
|
571
|
+
|
|
572
|
+
if (!_inBuffer.Create(1 << 15))
|
|
573
|
+
return E_OUTOFMEMORY;
|
|
574
|
+
_inBuffer.SetStream(m_Stream);
|
|
575
|
+
_inBuffer.Init();
|
|
576
|
+
_inBufMode = true;
|
|
577
|
+
|
|
578
|
+
while(m_Position - cdOffset < cdSize)
|
|
579
|
+
{
|
|
580
|
+
if (ReadUInt32() != NSignature::kCentralFileHeader)
|
|
581
|
+
return S_FALSE;
|
|
582
|
+
CItemEx cdItem;
|
|
583
|
+
RINOK(ReadCdItem(cdItem));
|
|
584
|
+
items.Add(cdItem);
|
|
585
|
+
if (progress && items.Size() % 1000 == 0)
|
|
586
|
+
RINOK(progress->SetCompleted(items.Size()));
|
|
587
|
+
}
|
|
588
|
+
return (m_Position - cdOffset == cdSize) ? S_OK : S_FALSE;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
HRESULT CInArchive::ReadCd(CObjectVector<CItemEx> &items, UInt64 &cdOffset, UInt64 &cdSize, CProgressVirt *progress)
|
|
592
|
+
{
|
|
593
|
+
ArcInfo.Base = 0;
|
|
594
|
+
CCdInfo cdInfo;
|
|
595
|
+
RINOK(FindCd(cdInfo));
|
|
596
|
+
HRESULT res = S_FALSE;
|
|
597
|
+
cdSize = cdInfo.Size;
|
|
598
|
+
cdOffset = cdInfo.Offset;
|
|
599
|
+
res = TryReadCd(items, ArcInfo.Base + cdOffset, cdSize, progress);
|
|
600
|
+
if (res == S_FALSE && ArcInfo.Base == 0)
|
|
601
|
+
{
|
|
602
|
+
res = TryReadCd(items, cdInfo.Offset + ArcInfo.StartPosition, cdSize, progress);
|
|
603
|
+
if (res == S_OK)
|
|
604
|
+
ArcInfo.Base = ArcInfo.StartPosition;
|
|
605
|
+
}
|
|
606
|
+
if (!ReadUInt32(m_Signature))
|
|
607
|
+
return S_FALSE;
|
|
608
|
+
return res;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
HRESULT CInArchive::ReadLocalsAndCd(CObjectVector<CItemEx> &items, CProgressVirt *progress, UInt64 &cdOffset, int &numCdItems)
|
|
612
|
+
{
|
|
613
|
+
items.Clear();
|
|
614
|
+
numCdItems = 0;
|
|
615
|
+
while (m_Signature == NSignature::kLocalFileHeader)
|
|
616
|
+
{
|
|
617
|
+
// FSeek points to next byte after signature
|
|
618
|
+
// NFileHeader::CLocalBlock localHeader;
|
|
619
|
+
CItemEx item;
|
|
620
|
+
item.LocalHeaderPosition = m_Position - m_StreamStartPosition - 4; // points to signature;
|
|
621
|
+
RINOK(ReadLocalItem(item));
|
|
622
|
+
item.FromLocal = true;
|
|
623
|
+
ReadLocalItemDescriptor(item);
|
|
624
|
+
items.Add(item);
|
|
625
|
+
if (progress && items.Size() % 100 == 0)
|
|
626
|
+
RINOK(progress->SetCompleted(items.Size()));
|
|
627
|
+
if (!ReadUInt32(m_Signature))
|
|
628
|
+
break;
|
|
629
|
+
}
|
|
630
|
+
cdOffset = m_Position - 4;
|
|
631
|
+
int i;
|
|
632
|
+
for (i = 0; i < items.Size(); i++, numCdItems++)
|
|
633
|
+
{
|
|
634
|
+
if (progress && i % 1000 == 0)
|
|
635
|
+
RINOK(progress->SetCompleted(items.Size()));
|
|
636
|
+
if (m_Signature == NSignature::kEndOfCentralDir)
|
|
637
|
+
break;
|
|
638
|
+
|
|
639
|
+
if (m_Signature != NSignature::kCentralFileHeader)
|
|
640
|
+
return S_FALSE;
|
|
641
|
+
|
|
642
|
+
CItemEx cdItem;
|
|
643
|
+
RINOK(ReadCdItem(cdItem));
|
|
644
|
+
|
|
645
|
+
if (i == 0)
|
|
646
|
+
{
|
|
647
|
+
int j;
|
|
648
|
+
for (j = 0; j < items.Size(); j++)
|
|
649
|
+
{
|
|
650
|
+
CItemEx &item = items[j];
|
|
651
|
+
if (item.Name == cdItem.Name)
|
|
652
|
+
{
|
|
653
|
+
ArcInfo.Base = item.LocalHeaderPosition - cdItem.LocalHeaderPosition;
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
if (j == items.Size())
|
|
658
|
+
return S_FALSE;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
int index;
|
|
662
|
+
int left = 0, right = items.Size();
|
|
663
|
+
for (;;)
|
|
664
|
+
{
|
|
665
|
+
if (left >= right)
|
|
666
|
+
return S_FALSE;
|
|
667
|
+
index = (left + right) / 2;
|
|
668
|
+
UInt64 position = items[index].LocalHeaderPosition - ArcInfo.Base;
|
|
669
|
+
if (cdItem.LocalHeaderPosition == position)
|
|
670
|
+
break;
|
|
671
|
+
if (cdItem.LocalHeaderPosition < position)
|
|
672
|
+
right = index;
|
|
673
|
+
else
|
|
674
|
+
left = index + 1;
|
|
675
|
+
}
|
|
676
|
+
CItemEx &item = items[index];
|
|
677
|
+
// item.LocalHeaderPosition = cdItem.LocalHeaderPosition;
|
|
678
|
+
item.MadeByVersion = cdItem.MadeByVersion;
|
|
679
|
+
item.CentralExtra = cdItem.CentralExtra;
|
|
680
|
+
|
|
681
|
+
if (
|
|
682
|
+
// item.ExtractVersion != cdItem.ExtractVersion ||
|
|
683
|
+
!FlagsAreSame(item, cdItem) ||
|
|
684
|
+
item.FileCRC != cdItem.FileCRC)
|
|
685
|
+
return S_FALSE;
|
|
686
|
+
|
|
687
|
+
if (item.Name.Length() != cdItem.Name.Length() ||
|
|
688
|
+
item.PackSize != cdItem.PackSize ||
|
|
689
|
+
item.UnPackSize != cdItem.UnPackSize
|
|
690
|
+
)
|
|
691
|
+
return S_FALSE;
|
|
692
|
+
item.Name = cdItem.Name;
|
|
693
|
+
item.InternalAttributes = cdItem.InternalAttributes;
|
|
694
|
+
item.ExternalAttributes = cdItem.ExternalAttributes;
|
|
695
|
+
item.Comment = cdItem.Comment;
|
|
696
|
+
item.FromCentral = cdItem.FromCentral;
|
|
697
|
+
if (!ReadUInt32(m_Signature))
|
|
698
|
+
return S_FALSE;
|
|
699
|
+
}
|
|
700
|
+
for (i = 0; i < items.Size(); i++)
|
|
701
|
+
items[i].LocalHeaderPosition -= ArcInfo.Base;
|
|
702
|
+
return S_OK;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
struct CEcd
|
|
706
|
+
{
|
|
707
|
+
UInt16 thisDiskNumber;
|
|
708
|
+
UInt16 startCDDiskNumber;
|
|
709
|
+
UInt16 numEntriesInCDOnThisDisk;
|
|
710
|
+
UInt16 numEntriesInCD;
|
|
711
|
+
UInt32 cdSize;
|
|
712
|
+
UInt32 cdStartOffset;
|
|
713
|
+
UInt16 commentSize;
|
|
714
|
+
void Parse(const Byte *p);
|
|
715
|
+
};
|
|
716
|
+
|
|
717
|
+
void CEcd::Parse(const Byte *p)
|
|
718
|
+
{
|
|
719
|
+
thisDiskNumber = Get16(p);
|
|
720
|
+
startCDDiskNumber = Get16(p + 2);
|
|
721
|
+
numEntriesInCDOnThisDisk = Get16(p + 4);
|
|
722
|
+
numEntriesInCD = Get16(p + 6);
|
|
723
|
+
cdSize = Get32(p + 8);
|
|
724
|
+
cdStartOffset = Get32(p + 12);
|
|
725
|
+
commentSize = Get16(p + 16);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
struct CEcd64
|
|
729
|
+
{
|
|
730
|
+
UInt16 versionMade;
|
|
731
|
+
UInt16 versionNeedExtract;
|
|
732
|
+
UInt32 thisDiskNumber;
|
|
733
|
+
UInt32 startCDDiskNumber;
|
|
734
|
+
UInt64 numEntriesInCDOnThisDisk;
|
|
735
|
+
UInt64 numEntriesInCD;
|
|
736
|
+
UInt64 cdSize;
|
|
737
|
+
UInt64 cdStartOffset;
|
|
738
|
+
void Parse(const Byte *p);
|
|
739
|
+
CEcd64() { memset(this, 0, sizeof(*this)); }
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
void CEcd64::Parse(const Byte *p)
|
|
743
|
+
{
|
|
744
|
+
versionMade = Get16(p);
|
|
745
|
+
versionNeedExtract = Get16(p + 2);
|
|
746
|
+
thisDiskNumber = Get32(p + 4);
|
|
747
|
+
startCDDiskNumber = Get32(p + 8);
|
|
748
|
+
numEntriesInCDOnThisDisk = Get64(p + 12);
|
|
749
|
+
numEntriesInCD = Get64(p + 20);
|
|
750
|
+
cdSize = Get64(p + 28);
|
|
751
|
+
cdStartOffset = Get64(p + 36);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
#define COPY_ECD_ITEM_16(n) if (!isZip64 || ecd. n != 0xFFFF) ecd64. n = ecd. n;
|
|
755
|
+
#define COPY_ECD_ITEM_32(n) if (!isZip64 || ecd. n != 0xFFFFFFFF) ecd64. n = ecd. n;
|
|
756
|
+
|
|
757
|
+
HRESULT CInArchive::ReadHeaders(CObjectVector<CItemEx> &items, CProgressVirt *progress)
|
|
758
|
+
{
|
|
759
|
+
// m_Signature must be kLocalFileHeaderSignature or
|
|
760
|
+
// kEndOfCentralDirSignature
|
|
761
|
+
// m_Position points to next byte after signature
|
|
762
|
+
|
|
763
|
+
IsZip64 = false;
|
|
764
|
+
items.Clear();
|
|
765
|
+
|
|
766
|
+
UInt64 cdSize, cdStartOffset;
|
|
767
|
+
HRESULT res;
|
|
768
|
+
try
|
|
769
|
+
{
|
|
770
|
+
res = ReadCd(items, cdStartOffset, cdSize, progress);
|
|
771
|
+
}
|
|
772
|
+
catch(CInArchiveException &)
|
|
773
|
+
{
|
|
774
|
+
res = S_FALSE;
|
|
775
|
+
}
|
|
776
|
+
if (res != S_FALSE && res != S_OK)
|
|
777
|
+
return res;
|
|
778
|
+
|
|
779
|
+
/*
|
|
780
|
+
if (res != S_OK)
|
|
781
|
+
return res;
|
|
782
|
+
res = S_FALSE;
|
|
783
|
+
*/
|
|
784
|
+
|
|
785
|
+
int numCdItems = items.Size();
|
|
786
|
+
if (res == S_FALSE)
|
|
787
|
+
{
|
|
788
|
+
_inBufMode = false;
|
|
789
|
+
ArcInfo.Base = 0;
|
|
790
|
+
RINOK(m_Stream->Seek(ArcInfo.StartPosition, STREAM_SEEK_SET, &m_Position));
|
|
791
|
+
if (m_Position != ArcInfo.StartPosition)
|
|
792
|
+
return S_FALSE;
|
|
793
|
+
if (!ReadUInt32(m_Signature))
|
|
794
|
+
return S_FALSE;
|
|
795
|
+
RINOK(ReadLocalsAndCd(items, progress, cdStartOffset, numCdItems));
|
|
796
|
+
cdSize = (m_Position - 4) - cdStartOffset;
|
|
797
|
+
cdStartOffset -= ArcInfo.Base;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
CEcd64 ecd64;
|
|
801
|
+
bool isZip64 = false;
|
|
802
|
+
UInt64 zip64EcdStartOffset = m_Position - 4 - ArcInfo.Base;
|
|
803
|
+
if (m_Signature == NSignature::kZip64EndOfCentralDir)
|
|
804
|
+
{
|
|
805
|
+
IsZip64 = isZip64 = true;
|
|
806
|
+
UInt64 recordSize = ReadUInt64();
|
|
807
|
+
|
|
808
|
+
const int kBufSize = kZip64EcdSize;
|
|
809
|
+
Byte buf[kBufSize];
|
|
810
|
+
SafeReadBytes(buf, kBufSize);
|
|
811
|
+
ecd64.Parse(buf);
|
|
812
|
+
|
|
813
|
+
Skip(recordSize - kZip64EcdSize);
|
|
814
|
+
if (!ReadUInt32(m_Signature))
|
|
815
|
+
return S_FALSE;
|
|
816
|
+
if (ecd64.thisDiskNumber != 0 || ecd64.startCDDiskNumber != 0)
|
|
817
|
+
throw CInArchiveException(CInArchiveException::kMultiVolumeArchiveAreNotSupported);
|
|
818
|
+
if (ecd64.numEntriesInCDOnThisDisk != numCdItems ||
|
|
819
|
+
ecd64.numEntriesInCD != numCdItems ||
|
|
820
|
+
ecd64.cdSize != cdSize ||
|
|
821
|
+
(ecd64.cdStartOffset != cdStartOffset &&
|
|
822
|
+
(!items.IsEmpty())))
|
|
823
|
+
return S_FALSE;
|
|
824
|
+
}
|
|
825
|
+
if (m_Signature == NSignature::kZip64EndOfCentralDirLocator)
|
|
826
|
+
{
|
|
827
|
+
/* UInt32 startEndCDDiskNumber = */ ReadUInt32();
|
|
828
|
+
UInt64 endCDStartOffset = ReadUInt64();
|
|
829
|
+
/* UInt32 numberOfDisks = */ ReadUInt32();
|
|
830
|
+
if (zip64EcdStartOffset != endCDStartOffset)
|
|
831
|
+
return S_FALSE;
|
|
832
|
+
if (!ReadUInt32(m_Signature))
|
|
833
|
+
return S_FALSE;
|
|
834
|
+
}
|
|
835
|
+
if (m_Signature != NSignature::kEndOfCentralDir)
|
|
836
|
+
return S_FALSE;
|
|
837
|
+
|
|
838
|
+
const int kBufSize = kEcdSize - 4;
|
|
839
|
+
Byte buf[kBufSize];
|
|
840
|
+
SafeReadBytes(buf, kBufSize);
|
|
841
|
+
CEcd ecd;
|
|
842
|
+
ecd.Parse(buf);
|
|
843
|
+
|
|
844
|
+
COPY_ECD_ITEM_16(thisDiskNumber);
|
|
845
|
+
COPY_ECD_ITEM_16(startCDDiskNumber);
|
|
846
|
+
COPY_ECD_ITEM_16(numEntriesInCDOnThisDisk);
|
|
847
|
+
COPY_ECD_ITEM_16(numEntriesInCD);
|
|
848
|
+
COPY_ECD_ITEM_32(cdSize);
|
|
849
|
+
COPY_ECD_ITEM_32(cdStartOffset);
|
|
850
|
+
|
|
851
|
+
ReadBuffer(ArcInfo.Comment, ecd.commentSize);
|
|
852
|
+
|
|
853
|
+
if (ecd64.thisDiskNumber != 0 || ecd64.startCDDiskNumber != 0)
|
|
854
|
+
throw CInArchiveException(CInArchiveException::kMultiVolumeArchiveAreNotSupported);
|
|
855
|
+
if ((UInt16)ecd64.numEntriesInCDOnThisDisk != ((UInt16)numCdItems) ||
|
|
856
|
+
(UInt16)ecd64.numEntriesInCD != ((UInt16)numCdItems) ||
|
|
857
|
+
(UInt32)ecd64.cdSize != (UInt32)cdSize ||
|
|
858
|
+
((UInt32)(ecd64.cdStartOffset) != (UInt32)cdStartOffset &&
|
|
859
|
+
(!items.IsEmpty())))
|
|
860
|
+
return S_FALSE;
|
|
861
|
+
|
|
862
|
+
_inBufMode = false;
|
|
863
|
+
_inBuffer.Free();
|
|
864
|
+
IsOkHeaders = (numCdItems == items.Size());
|
|
865
|
+
ArcInfo.FinishPosition = m_Position;
|
|
866
|
+
return S_OK;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
ISequentialInStream* CInArchive::CreateLimitedStream(UInt64 position, UInt64 size)
|
|
870
|
+
{
|
|
871
|
+
CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
|
|
872
|
+
CMyComPtr<ISequentialInStream> stream(streamSpec);
|
|
873
|
+
SeekInArchive(ArcInfo.Base + position);
|
|
874
|
+
streamSpec->SetStream(m_Stream);
|
|
875
|
+
streamSpec->Init(size);
|
|
876
|
+
return stream.Detach();
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
IInStream* CInArchive::CreateStream()
|
|
880
|
+
{
|
|
881
|
+
CMyComPtr<IInStream> stream = m_Stream;
|
|
882
|
+
return stream.Detach();
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
bool CInArchive::SeekInArchive(UInt64 position)
|
|
886
|
+
{
|
|
887
|
+
UInt64 newPosition;
|
|
888
|
+
if (m_Stream->Seek(position, STREAM_SEEK_SET, &newPosition) != S_OK)
|
|
889
|
+
return false;
|
|
890
|
+
return (newPosition == position);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
}}
|