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,152 @@
|
|
1
|
+
// 7zOut.h
|
2
|
+
|
3
|
+
#ifndef __7Z_OUT_H
|
4
|
+
#define __7Z_OUT_H
|
5
|
+
|
6
|
+
#include "7zCompressionMode.h"
|
7
|
+
#include "7zEncode.h"
|
8
|
+
#include "7zHeader.h"
|
9
|
+
#include "7zItem.h"
|
10
|
+
|
11
|
+
#include "../../Common/OutBuffer.h"
|
12
|
+
|
13
|
+
namespace NArchive {
|
14
|
+
namespace N7z {
|
15
|
+
|
16
|
+
class CWriteBufferLoc
|
17
|
+
{
|
18
|
+
Byte *_data;
|
19
|
+
size_t _size;
|
20
|
+
size_t _pos;
|
21
|
+
public:
|
22
|
+
CWriteBufferLoc(): _size(0), _pos(0) {}
|
23
|
+
void Init(Byte *data, size_t size)
|
24
|
+
{
|
25
|
+
_data = data;
|
26
|
+
_size = size;
|
27
|
+
_pos = 0;
|
28
|
+
}
|
29
|
+
void WriteBytes(const void *data, size_t size)
|
30
|
+
{
|
31
|
+
if (size > _size - _pos)
|
32
|
+
throw 1;
|
33
|
+
memcpy(_data + _pos, data, size);
|
34
|
+
_pos += size;
|
35
|
+
}
|
36
|
+
void WriteByte(Byte b)
|
37
|
+
{
|
38
|
+
if (_size == _pos)
|
39
|
+
throw 1;
|
40
|
+
_data[_pos++] = b;
|
41
|
+
}
|
42
|
+
size_t GetPos() const { return _pos; }
|
43
|
+
};
|
44
|
+
|
45
|
+
struct CHeaderOptions
|
46
|
+
{
|
47
|
+
bool CompressMainHeader;
|
48
|
+
bool WriteCTime;
|
49
|
+
bool WriteATime;
|
50
|
+
bool WriteMTime;
|
51
|
+
|
52
|
+
CHeaderOptions():
|
53
|
+
CompressMainHeader(true),
|
54
|
+
WriteCTime(false),
|
55
|
+
WriteATime(false),
|
56
|
+
WriteMTime(true)
|
57
|
+
{}
|
58
|
+
};
|
59
|
+
|
60
|
+
class COutArchive
|
61
|
+
{
|
62
|
+
UInt64 _prefixHeaderPos;
|
63
|
+
|
64
|
+
HRESULT WriteDirect(const void *data, UInt32 size);
|
65
|
+
|
66
|
+
UInt64 GetPos() const;
|
67
|
+
void WriteBytes(const void *data, size_t size);
|
68
|
+
void WriteBytes(const CByteBuffer &data) { WriteBytes(data, data.GetCapacity()); }
|
69
|
+
void WriteByte(Byte b);
|
70
|
+
void WriteUInt32(UInt32 value);
|
71
|
+
void WriteUInt64(UInt64 value);
|
72
|
+
void WriteNumber(UInt64 value);
|
73
|
+
void WriteID(UInt64 value) { WriteNumber(value); }
|
74
|
+
|
75
|
+
void WriteFolder(const CFolder &folder);
|
76
|
+
HRESULT WriteFileHeader(const CFileItem &itemInfo);
|
77
|
+
void WriteBoolVector(const CBoolVector &boolVector);
|
78
|
+
void WriteHashDigests(
|
79
|
+
const CRecordVector<bool> &digestsDefined,
|
80
|
+
const CRecordVector<UInt32> &hashDigests);
|
81
|
+
|
82
|
+
void WritePackInfo(
|
83
|
+
UInt64 dataOffset,
|
84
|
+
const CRecordVector<UInt64> &packSizes,
|
85
|
+
const CRecordVector<bool> &packCRCsDefined,
|
86
|
+
const CRecordVector<UInt32> &packCRCs);
|
87
|
+
|
88
|
+
void WriteUnpackInfo(const CObjectVector<CFolder> &folders);
|
89
|
+
|
90
|
+
void WriteSubStreamsInfo(
|
91
|
+
const CObjectVector<CFolder> &folders,
|
92
|
+
const CRecordVector<CNum> &numUnpackStreamsInFolders,
|
93
|
+
const CRecordVector<UInt64> &unpackSizes,
|
94
|
+
const CRecordVector<bool> &digestsDefined,
|
95
|
+
const CRecordVector<UInt32> &hashDigests);
|
96
|
+
|
97
|
+
void SkipAlign(unsigned pos, unsigned alignSize);
|
98
|
+
void WriteAlignedBoolHeader(const CBoolVector &v, int numDefined, Byte type, unsigned itemSize);
|
99
|
+
void WriteUInt64DefVector(const CUInt64DefVector &v, Byte type);
|
100
|
+
|
101
|
+
HRESULT EncodeStream(
|
102
|
+
DECL_EXTERNAL_CODECS_LOC_VARS
|
103
|
+
CEncoder &encoder, const CByteBuffer &data,
|
104
|
+
CRecordVector<UInt64> &packSizes, CObjectVector<CFolder> &folders);
|
105
|
+
void WriteHeader(
|
106
|
+
const CArchiveDatabase &db,
|
107
|
+
const CHeaderOptions &headerOptions,
|
108
|
+
UInt64 &headerOffset);
|
109
|
+
|
110
|
+
bool _countMode;
|
111
|
+
bool _writeToStream;
|
112
|
+
size_t _countSize;
|
113
|
+
UInt32 _crc;
|
114
|
+
COutBuffer _outByte;
|
115
|
+
CWriteBufferLoc _outByte2;
|
116
|
+
|
117
|
+
#ifdef _7Z_VOL
|
118
|
+
bool _endMarker;
|
119
|
+
#endif
|
120
|
+
|
121
|
+
HRESULT WriteSignature();
|
122
|
+
#ifdef _7Z_VOL
|
123
|
+
HRESULT WriteFinishSignature();
|
124
|
+
#endif
|
125
|
+
HRESULT WriteStartHeader(const CStartHeader &h);
|
126
|
+
#ifdef _7Z_VOL
|
127
|
+
HRESULT WriteFinishHeader(const CFinishHeader &h);
|
128
|
+
#endif
|
129
|
+
CMyComPtr<IOutStream> Stream;
|
130
|
+
public:
|
131
|
+
|
132
|
+
COutArchive() { _outByte.Create(1 << 16); }
|
133
|
+
CMyComPtr<ISequentialOutStream> SeqStream;
|
134
|
+
HRESULT Create(ISequentialOutStream *stream, bool endMarker);
|
135
|
+
void Close();
|
136
|
+
HRESULT SkipPrefixArchiveHeader();
|
137
|
+
HRESULT WriteDatabase(
|
138
|
+
DECL_EXTERNAL_CODECS_LOC_VARS
|
139
|
+
const CArchiveDatabase &db,
|
140
|
+
const CCompressionMethodMode *options,
|
141
|
+
const CHeaderOptions &headerOptions);
|
142
|
+
|
143
|
+
#ifdef _7Z_VOL
|
144
|
+
static UInt32 GetVolHeadersSize(UInt64 dataSize, int nameLength = 0, bool props = false);
|
145
|
+
static UInt64 GetVolPureSize(UInt64 volSize, int nameLength = 0, bool props = false);
|
146
|
+
#endif
|
147
|
+
|
148
|
+
};
|
149
|
+
|
150
|
+
}}
|
151
|
+
|
152
|
+
#endif
|
@@ -0,0 +1,164 @@
|
|
1
|
+
// 7zProperties.cpp
|
2
|
+
|
3
|
+
#include "StdAfx.h"
|
4
|
+
|
5
|
+
#include "7zProperties.h"
|
6
|
+
#include "7zHeader.h"
|
7
|
+
#include "7zHandler.h"
|
8
|
+
|
9
|
+
// #define _MULTI_PACK
|
10
|
+
|
11
|
+
namespace NArchive {
|
12
|
+
namespace N7z {
|
13
|
+
|
14
|
+
struct CPropMap
|
15
|
+
{
|
16
|
+
UInt64 FilePropID;
|
17
|
+
STATPROPSTG StatPROPSTG;
|
18
|
+
};
|
19
|
+
|
20
|
+
CPropMap kPropMap[] =
|
21
|
+
{
|
22
|
+
{ NID::kName, { NULL, kpidPath, VT_BSTR } },
|
23
|
+
{ NID::kSize, { NULL, kpidSize, VT_UI8 } },
|
24
|
+
{ NID::kPackInfo, { NULL, kpidPackSize, VT_UI8 } },
|
25
|
+
|
26
|
+
#ifdef _MULTI_PACK
|
27
|
+
{ 100, { L"Pack0", kpidPackedSize0, VT_UI8 } },
|
28
|
+
{ 101, { L"Pack1", kpidPackedSize1, VT_UI8 } },
|
29
|
+
{ 102, { L"Pack2", kpidPackedSize2, VT_UI8 } },
|
30
|
+
{ 103, { L"Pack3", kpidPackedSize3, VT_UI8 } },
|
31
|
+
{ 104, { L"Pack4", kpidPackedSize4, VT_UI8 } },
|
32
|
+
#endif
|
33
|
+
|
34
|
+
{ NID::kCTime, { NULL, kpidCTime, VT_FILETIME } },
|
35
|
+
{ NID::kMTime, { NULL, kpidMTime, VT_FILETIME } },
|
36
|
+
{ NID::kATime, { NULL, kpidATime, VT_FILETIME } },
|
37
|
+
{ NID::kWinAttributes, { NULL, kpidAttrib, VT_UI4 } },
|
38
|
+
{ NID::kStartPos, { NULL, kpidPosition, VT_UI4 } },
|
39
|
+
|
40
|
+
{ NID::kCRC, { NULL, kpidCRC, VT_UI4 } },
|
41
|
+
|
42
|
+
{ NID::kAnti, { NULL, kpidIsAnti, VT_BOOL } }
|
43
|
+
|
44
|
+
#ifndef _SFX
|
45
|
+
,
|
46
|
+
{ 97, { NULL,kpidEncrypted, VT_BOOL } },
|
47
|
+
{ 98, { NULL,kpidMethod, VT_BSTR } },
|
48
|
+
{ 99, { NULL,kpidBlock, VT_UI4 } }
|
49
|
+
#endif
|
50
|
+
};
|
51
|
+
|
52
|
+
static const int kPropMapSize = sizeof(kPropMap) / sizeof(kPropMap[0]);
|
53
|
+
|
54
|
+
static int FindPropInMap(UInt64 filePropID)
|
55
|
+
{
|
56
|
+
for (int i = 0; i < kPropMapSize; i++)
|
57
|
+
if (kPropMap[i].FilePropID == filePropID)
|
58
|
+
return i;
|
59
|
+
return -1;
|
60
|
+
}
|
61
|
+
|
62
|
+
static void CopyOneItem(CRecordVector<UInt64> &src,
|
63
|
+
CRecordVector<UInt64> &dest, UInt32 item)
|
64
|
+
{
|
65
|
+
for (int i = 0; i < src.Size(); i++)
|
66
|
+
if (src[i] == item)
|
67
|
+
{
|
68
|
+
dest.Add(item);
|
69
|
+
src.Delete(i);
|
70
|
+
return;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
static void RemoveOneItem(CRecordVector<UInt64> &src, UInt32 item)
|
75
|
+
{
|
76
|
+
for (int i = 0; i < src.Size(); i++)
|
77
|
+
if (src[i] == item)
|
78
|
+
{
|
79
|
+
src.Delete(i);
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
static void InsertToHead(CRecordVector<UInt64> &dest, UInt32 item)
|
85
|
+
{
|
86
|
+
for (int i = 0; i < dest.Size(); i++)
|
87
|
+
if (dest[i] == item)
|
88
|
+
{
|
89
|
+
dest.Delete(i);
|
90
|
+
break;
|
91
|
+
}
|
92
|
+
dest.Insert(0, item);
|
93
|
+
}
|
94
|
+
|
95
|
+
void CHandler::FillPopIDs()
|
96
|
+
{
|
97
|
+
_fileInfoPopIDs.Clear();
|
98
|
+
|
99
|
+
#ifdef _7Z_VOL
|
100
|
+
if(_volumes.Size() < 1)
|
101
|
+
return;
|
102
|
+
const CVolume &volume = _volumes.Front();
|
103
|
+
const CArchiveDatabaseEx &_db = volume.Database;
|
104
|
+
#endif
|
105
|
+
|
106
|
+
CRecordVector<UInt64> fileInfoPopIDs = _db.ArchiveInfo.FileInfoPopIDs;
|
107
|
+
|
108
|
+
RemoveOneItem(fileInfoPopIDs, NID::kEmptyStream);
|
109
|
+
RemoveOneItem(fileInfoPopIDs, NID::kEmptyFile);
|
110
|
+
|
111
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kName);
|
112
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kAnti);
|
113
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kSize);
|
114
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kPackInfo);
|
115
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kCTime);
|
116
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kMTime);
|
117
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kATime);
|
118
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kWinAttributes);
|
119
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kCRC);
|
120
|
+
CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kComment);
|
121
|
+
_fileInfoPopIDs += fileInfoPopIDs;
|
122
|
+
|
123
|
+
#ifndef _SFX
|
124
|
+
_fileInfoPopIDs.Add(97);
|
125
|
+
_fileInfoPopIDs.Add(98);
|
126
|
+
_fileInfoPopIDs.Add(99);
|
127
|
+
#endif
|
128
|
+
#ifdef _MULTI_PACK
|
129
|
+
_fileInfoPopIDs.Add(100);
|
130
|
+
_fileInfoPopIDs.Add(101);
|
131
|
+
_fileInfoPopIDs.Add(102);
|
132
|
+
_fileInfoPopIDs.Add(103);
|
133
|
+
_fileInfoPopIDs.Add(104);
|
134
|
+
#endif
|
135
|
+
|
136
|
+
#ifndef _SFX
|
137
|
+
InsertToHead(_fileInfoPopIDs, NID::kMTime);
|
138
|
+
InsertToHead(_fileInfoPopIDs, NID::kPackInfo);
|
139
|
+
InsertToHead(_fileInfoPopIDs, NID::kSize);
|
140
|
+
InsertToHead(_fileInfoPopIDs, NID::kName);
|
141
|
+
#endif
|
142
|
+
}
|
143
|
+
|
144
|
+
STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties)
|
145
|
+
{
|
146
|
+
*numProperties = _fileInfoPopIDs.Size();
|
147
|
+
return S_OK;
|
148
|
+
}
|
149
|
+
|
150
|
+
STDMETHODIMP CHandler::GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)
|
151
|
+
{
|
152
|
+
if ((int)index >= _fileInfoPopIDs.Size())
|
153
|
+
return E_INVALIDARG;
|
154
|
+
int indexInMap = FindPropInMap(_fileInfoPopIDs[index]);
|
155
|
+
if (indexInMap == -1)
|
156
|
+
return E_INVALIDARG;
|
157
|
+
const STATPROPSTG &srcItem = kPropMap[indexInMap].StatPROPSTG;
|
158
|
+
*propID = srcItem.propid;
|
159
|
+
*varType = srcItem.vt;
|
160
|
+
*name = 0;
|
161
|
+
return S_OK;
|
162
|
+
}
|
163
|
+
|
164
|
+
}}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// 7zProperties.h
|
2
|
+
|
3
|
+
#ifndef __7Z_PROPERTIES_H
|
4
|
+
#define __7Z_PROPERTIES_H
|
5
|
+
|
6
|
+
#include "../../PropID.h"
|
7
|
+
|
8
|
+
namespace NArchive {
|
9
|
+
namespace N7z {
|
10
|
+
|
11
|
+
enum
|
12
|
+
{
|
13
|
+
kpidPackedSize0 = kpidUserDefined,
|
14
|
+
kpidPackedSize1,
|
15
|
+
kpidPackedSize2,
|
16
|
+
kpidPackedSize3,
|
17
|
+
kpidPackedSize4
|
18
|
+
};
|
19
|
+
|
20
|
+
}}
|
21
|
+
|
22
|
+
#endif
|
@@ -0,0 +1,18 @@
|
|
1
|
+
// 7zRegister.cpp
|
2
|
+
|
3
|
+
#include "StdAfx.h"
|
4
|
+
|
5
|
+
#include "../../Common/RegisterArc.h"
|
6
|
+
|
7
|
+
#include "7zHandler.h"
|
8
|
+
static IInArchive *CreateArc() { return new NArchive::N7z::CHandler; }
|
9
|
+
#ifndef EXTRACT_ONLY
|
10
|
+
static IOutArchive *CreateArcOut() { return new NArchive::N7z::CHandler; }
|
11
|
+
#else
|
12
|
+
#define CreateArcOut 0
|
13
|
+
#endif
|
14
|
+
|
15
|
+
static CArcInfo g_ArcInfo =
|
16
|
+
{ L"7z", L"7z", 0, 7, {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}, 6, false, CreateArc, CreateArcOut };
|
17
|
+
|
18
|
+
REGISTER_ARC(7z)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// 7zSpecStream.cpp
|
2
|
+
|
3
|
+
#include "StdAfx.h"
|
4
|
+
|
5
|
+
#include "7zSpecStream.h"
|
6
|
+
|
7
|
+
STDMETHODIMP CSequentialInStreamSizeCount2::Read(void *data, UInt32 size, UInt32 *processedSize)
|
8
|
+
{
|
9
|
+
UInt32 realProcessedSize;
|
10
|
+
HRESULT result = _stream->Read(data, size, &realProcessedSize);
|
11
|
+
_size += realProcessedSize;
|
12
|
+
if (processedSize != 0)
|
13
|
+
*processedSize = realProcessedSize;
|
14
|
+
return result;
|
15
|
+
}
|
16
|
+
|
17
|
+
STDMETHODIMP CSequentialInStreamSizeCount2::GetSubStreamSize(
|
18
|
+
UInt64 subStream, UInt64 *value)
|
19
|
+
{
|
20
|
+
if (_getSubStreamSize == NULL)
|
21
|
+
return E_NOTIMPL;
|
22
|
+
return _getSubStreamSize->GetSubStreamSize(subStream, value);
|
23
|
+
}
|
24
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// 7zSpecStream.h
|
2
|
+
|
3
|
+
#ifndef __7Z_SPEC_STREAM_H
|
4
|
+
#define __7Z_SPEC_STREAM_H
|
5
|
+
|
6
|
+
#include "../../IStream.h"
|
7
|
+
#include "../../ICoder.h"
|
8
|
+
#include "../../../Common/MyCom.h"
|
9
|
+
|
10
|
+
class CSequentialInStreamSizeCount2:
|
11
|
+
public ISequentialInStream,
|
12
|
+
public ICompressGetSubStreamSize,
|
13
|
+
public CMyUnknownImp
|
14
|
+
{
|
15
|
+
CMyComPtr<ISequentialInStream> _stream;
|
16
|
+
CMyComPtr<ICompressGetSubStreamSize> _getSubStreamSize;
|
17
|
+
UInt64 _size;
|
18
|
+
public:
|
19
|
+
void Init(ISequentialInStream *stream)
|
20
|
+
{
|
21
|
+
_stream = stream;
|
22
|
+
_getSubStreamSize = 0;
|
23
|
+
_stream.QueryInterface(IID_ICompressGetSubStreamSize, &_getSubStreamSize);
|
24
|
+
_size = 0;
|
25
|
+
}
|
26
|
+
UInt64 GetSize() const { return _size; }
|
27
|
+
|
28
|
+
MY_UNKNOWN_IMP1(ICompressGetSubStreamSize)
|
29
|
+
|
30
|
+
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
31
|
+
|
32
|
+
STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value);
|
33
|
+
};
|
34
|
+
|
35
|
+
#endif
|
@@ -0,0 +1,1216 @@
|
|
1
|
+
// 7zUpdate.cpp
|
2
|
+
|
3
|
+
#include "StdAfx.h"
|
4
|
+
|
5
|
+
#include "../../../../C/CpuArch.h"
|
6
|
+
|
7
|
+
#include "../../Common/LimitedStreams.h"
|
8
|
+
#include "../../Common/ProgressUtils.h"
|
9
|
+
|
10
|
+
#include "../../Common/CreateCoder.h"
|
11
|
+
|
12
|
+
#include "../../Compress/CopyCoder.h"
|
13
|
+
|
14
|
+
#include "../Common/ItemNameUtils.h"
|
15
|
+
#include "../Common/OutStreamWithCRC.h"
|
16
|
+
|
17
|
+
#include "7zDecode.h"
|
18
|
+
#include "7zEncode.h"
|
19
|
+
#include "7zFolderInStream.h"
|
20
|
+
#include "7zHandler.h"
|
21
|
+
#include "7zOut.h"
|
22
|
+
#include "7zUpdate.h"
|
23
|
+
|
24
|
+
#ifndef WIN32
|
25
|
+
#include "Windows/FileIO.h"
|
26
|
+
#endif
|
27
|
+
|
28
|
+
namespace NArchive {
|
29
|
+
namespace N7z {
|
30
|
+
|
31
|
+
static const UInt64 k_LZMA = 0x030101;
|
32
|
+
static const UInt64 k_BCJ = 0x03030103;
|
33
|
+
static const UInt64 k_BCJ2 = 0x0303011B;
|
34
|
+
|
35
|
+
static const wchar_t *kMatchFinderForBCJ2_LZMA = L"BT2";
|
36
|
+
static const UInt32 kDictionaryForBCJ2_LZMA = 1 << 20;
|
37
|
+
static const UInt32 kAlgorithmForBCJ2_LZMA = 1;
|
38
|
+
static const UInt32 kNumFastBytesForBCJ2_LZMA = 64;
|
39
|
+
|
40
|
+
#ifdef MY_CPU_X86_OR_AMD64
|
41
|
+
#define USE_86_FILTER
|
42
|
+
#endif
|
43
|
+
|
44
|
+
static HRESULT WriteRange(IInStream *inStream, ISequentialOutStream *outStream,
|
45
|
+
UInt64 position, UInt64 size, ICompressProgressInfo *progress)
|
46
|
+
{
|
47
|
+
RINOK(inStream->Seek(position, STREAM_SEEK_SET, 0));
|
48
|
+
CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
|
49
|
+
CMyComPtr<CLimitedSequentialInStream> inStreamLimited(streamSpec);
|
50
|
+
streamSpec->SetStream(inStream);
|
51
|
+
streamSpec->Init(size);
|
52
|
+
|
53
|
+
NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder;
|
54
|
+
CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
|
55
|
+
RINOK(copyCoder->Code(inStreamLimited, outStream, NULL, NULL, progress));
|
56
|
+
return (copyCoderSpec->TotalSize == size ? S_OK : E_FAIL);
|
57
|
+
}
|
58
|
+
|
59
|
+
static int GetReverseSlashPos(const UString &name)
|
60
|
+
{
|
61
|
+
int slashPos = name.ReverseFind(L'/');
|
62
|
+
#ifdef _WIN32
|
63
|
+
int slash1Pos = name.ReverseFind(L'\\');
|
64
|
+
slashPos = MyMax(slashPos, slash1Pos);
|
65
|
+
#endif
|
66
|
+
return slashPos;
|
67
|
+
}
|
68
|
+
|
69
|
+
int CUpdateItem::GetExtensionPos() const
|
70
|
+
{
|
71
|
+
int slashPos = GetReverseSlashPos(Name);
|
72
|
+
int dotPos = Name.ReverseFind(L'.');
|
73
|
+
if (dotPos < 0 || (dotPos < slashPos && slashPos >= 0))
|
74
|
+
return Name.Length();
|
75
|
+
return dotPos + 1;
|
76
|
+
}
|
77
|
+
|
78
|
+
UString CUpdateItem::GetExtension() const
|
79
|
+
{
|
80
|
+
return Name.Mid(GetExtensionPos());
|
81
|
+
}
|
82
|
+
|
83
|
+
#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
|
84
|
+
|
85
|
+
#define RINOZ_COMP(a, b) RINOZ(MyCompare(a, b))
|
86
|
+
|
87
|
+
static int CompareBuffers(const CByteBuffer &a1, const CByteBuffer &a2)
|
88
|
+
{
|
89
|
+
size_t c1 = a1.GetCapacity();
|
90
|
+
size_t c2 = a2.GetCapacity();
|
91
|
+
RINOZ_COMP(c1, c2);
|
92
|
+
for (size_t i = 0; i < c1; i++)
|
93
|
+
RINOZ_COMP(a1[i], a2[i]);
|
94
|
+
return 0;
|
95
|
+
}
|
96
|
+
|
97
|
+
static int CompareCoders(const CCoderInfo &c1, const CCoderInfo &c2)
|
98
|
+
{
|
99
|
+
RINOZ_COMP(c1.NumInStreams, c2.NumInStreams);
|
100
|
+
RINOZ_COMP(c1.NumOutStreams, c2.NumOutStreams);
|
101
|
+
RINOZ_COMP(c1.MethodID, c2.MethodID);
|
102
|
+
return CompareBuffers(c1.Props, c2.Props);
|
103
|
+
}
|
104
|
+
|
105
|
+
static int CompareBindPairs(const CBindPair &b1, const CBindPair &b2)
|
106
|
+
{
|
107
|
+
RINOZ_COMP(b1.InIndex, b2.InIndex);
|
108
|
+
return MyCompare(b1.OutIndex, b2.OutIndex);
|
109
|
+
}
|
110
|
+
|
111
|
+
static int CompareFolders(const CFolder &f1, const CFolder &f2)
|
112
|
+
{
|
113
|
+
int s1 = f1.Coders.Size();
|
114
|
+
int s2 = f2.Coders.Size();
|
115
|
+
RINOZ_COMP(s1, s2);
|
116
|
+
int i;
|
117
|
+
for (i = 0; i < s1; i++)
|
118
|
+
RINOZ(CompareCoders(f1.Coders[i], f2.Coders[i]));
|
119
|
+
s1 = f1.BindPairs.Size();
|
120
|
+
s2 = f2.BindPairs.Size();
|
121
|
+
RINOZ_COMP(s1, s2);
|
122
|
+
for (i = 0; i < s1; i++)
|
123
|
+
RINOZ(CompareBindPairs(f1.BindPairs[i], f2.BindPairs[i]));
|
124
|
+
return 0;
|
125
|
+
}
|
126
|
+
|
127
|
+
/*
|
128
|
+
static int CompareFiles(const CFileItem &f1, const CFileItem &f2)
|
129
|
+
{
|
130
|
+
return MyStringCompareNoCase(f1.Name, f2.Name);
|
131
|
+
}
|
132
|
+
*/
|
133
|
+
|
134
|
+
struct CFolderRepack
|
135
|
+
{
|
136
|
+
int FolderIndex;
|
137
|
+
int Group;
|
138
|
+
CNum NumCopyFiles;
|
139
|
+
};
|
140
|
+
|
141
|
+
static int CompareFolderRepacks(const CFolderRepack *p1, const CFolderRepack *p2, void *param)
|
142
|
+
{
|
143
|
+
RINOZ_COMP(p1->Group, p2->Group);
|
144
|
+
int i1 = p1->FolderIndex;
|
145
|
+
int i2 = p2->FolderIndex;
|
146
|
+
const CArchiveDatabaseEx &db = *(const CArchiveDatabaseEx *)param;
|
147
|
+
RINOZ(CompareFolders(
|
148
|
+
db.Folders[i1],
|
149
|
+
db.Folders[i2]));
|
150
|
+
return MyCompare(i1, i2);
|
151
|
+
/*
|
152
|
+
RINOZ_COMP(
|
153
|
+
db.NumUnpackStreamsVector[i1],
|
154
|
+
db.NumUnpackStreamsVector[i2]);
|
155
|
+
if (db.NumUnpackStreamsVector[i1] == 0)
|
156
|
+
return 0;
|
157
|
+
return CompareFiles(
|
158
|
+
db.Files[db.FolderStartFileIndex[i1]],
|
159
|
+
db.Files[db.FolderStartFileIndex[i2]]);
|
160
|
+
*/
|
161
|
+
}
|
162
|
+
|
163
|
+
////////////////////////////////////////////////////////////
|
164
|
+
|
165
|
+
static int CompareEmptyItems(const int *p1, const int *p2, void *param)
|
166
|
+
{
|
167
|
+
const CObjectVector<CUpdateItem> &updateItems = *(const CObjectVector<CUpdateItem> *)param;
|
168
|
+
const CUpdateItem &u1 = updateItems[*p1];
|
169
|
+
const CUpdateItem &u2 = updateItems[*p2];
|
170
|
+
if (u1.IsDir != u2.IsDir)
|
171
|
+
return (u1.IsDir) ? 1 : -1;
|
172
|
+
if (u1.IsDir)
|
173
|
+
{
|
174
|
+
if (u1.IsAnti != u2.IsAnti)
|
175
|
+
return (u1.IsAnti ? 1 : -1);
|
176
|
+
int n = MyStringCompareNoCase(u1.Name, u2.Name);
|
177
|
+
return -n;
|
178
|
+
}
|
179
|
+
if (u1.IsAnti != u2.IsAnti)
|
180
|
+
return (u1.IsAnti ? 1 : -1);
|
181
|
+
return MyStringCompareNoCase(u1.Name, u2.Name);
|
182
|
+
}
|
183
|
+
|
184
|
+
static const char *g_Exts =
|
185
|
+
" lzma 7z ace arc arj bz bz2 deb lzo lzx gz pak rpm sit tgz tbz tbz2 tgz cab ha lha lzh rar zoo"
|
186
|
+
" zip jar ear war msi"
|
187
|
+
" 3gp avi mov mpeg mpg mpe wmv"
|
188
|
+
" aac ape fla flac la mp3 m4a mp4 ofr ogg pac ra rm rka shn swa tta wv wma wav"
|
189
|
+
" swf "
|
190
|
+
" chm hxi hxs"
|
191
|
+
" gif jpeg jpg jp2 png tiff bmp ico psd psp"
|
192
|
+
" awg ps eps cgm dxf svg vrml wmf emf ai md"
|
193
|
+
" cad dwg pps key sxi"
|
194
|
+
" max 3ds"
|
195
|
+
" iso bin nrg mdf img pdi tar cpio xpi"
|
196
|
+
" vfd vhd vud vmc vsv"
|
197
|
+
" vmdk dsk nvram vmem vmsd vmsn vmss vmtm"
|
198
|
+
" inl inc idl acf asa h hpp hxx c cpp cxx rc java cs pas bas vb cls ctl frm dlg def"
|
199
|
+
" f77 f f90 f95"
|
200
|
+
" asm sql manifest dep "
|
201
|
+
" mak clw csproj vcproj sln dsp dsw "
|
202
|
+
" class "
|
203
|
+
" bat cmd"
|
204
|
+
" xml xsd xsl xslt hxk hxc htm html xhtml xht mht mhtml htw asp aspx css cgi jsp shtml"
|
205
|
+
" awk sed hta js php php3 php4 php5 phptml pl pm py pyo rb sh tcl vbs"
|
206
|
+
" text txt tex ans asc srt reg ini doc docx mcw dot rtf hlp xls xlr xlt xlw ppt pdf"
|
207
|
+
" sxc sxd sxi sxg sxw stc sti stw stm odt ott odg otg odp otp ods ots odf"
|
208
|
+
" abw afp cwk lwp wpd wps wpt wrf wri"
|
209
|
+
" abf afm bdf fon mgf otf pcf pfa snf ttf"
|
210
|
+
" dbf mdb nsf ntf wdb db fdb gdb"
|
211
|
+
" exe dll ocx vbx sfx sys tlb awx com obj lib out o so "
|
212
|
+
" pdb pch idb ncb opt";
|
213
|
+
|
214
|
+
int GetExtIndex(const char *ext)
|
215
|
+
{
|
216
|
+
int extIndex = 1;
|
217
|
+
const char *p = g_Exts;
|
218
|
+
for (;;)
|
219
|
+
{
|
220
|
+
char c = *p++;
|
221
|
+
if (c == 0)
|
222
|
+
return extIndex;
|
223
|
+
if (c == ' ')
|
224
|
+
continue;
|
225
|
+
int pos = 0;
|
226
|
+
for (;;)
|
227
|
+
{
|
228
|
+
char c2 = ext[pos++];
|
229
|
+
if (c2 == 0 && (c == 0 || c == ' '))
|
230
|
+
return extIndex;
|
231
|
+
if (c != c2)
|
232
|
+
break;
|
233
|
+
c = *p++;
|
234
|
+
}
|
235
|
+
extIndex++;
|
236
|
+
for (;;)
|
237
|
+
{
|
238
|
+
if (c == 0)
|
239
|
+
return extIndex;
|
240
|
+
if (c == ' ')
|
241
|
+
break;
|
242
|
+
c = *p++;
|
243
|
+
}
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
struct CRefItem
|
248
|
+
{
|
249
|
+
const CUpdateItem *UpdateItem;
|
250
|
+
UInt32 Index;
|
251
|
+
UInt32 ExtensionPos;
|
252
|
+
UInt32 NamePos;
|
253
|
+
int ExtensionIndex;
|
254
|
+
CRefItem(UInt32 index, const CUpdateItem &ui, bool sortByType):
|
255
|
+
UpdateItem(&ui),
|
256
|
+
Index(index),
|
257
|
+
ExtensionPos(0),
|
258
|
+
NamePos(0),
|
259
|
+
ExtensionIndex(0)
|
260
|
+
{
|
261
|
+
if (sortByType)
|
262
|
+
{
|
263
|
+
int slashPos = GetReverseSlashPos(ui.Name);
|
264
|
+
NamePos = ((slashPos >= 0) ? (slashPos + 1) : 0);
|
265
|
+
int dotPos = ui.Name.ReverseFind(L'.');
|
266
|
+
if (dotPos < 0 || (dotPos < slashPos && slashPos >= 0))
|
267
|
+
ExtensionPos = ui.Name.Length();
|
268
|
+
else
|
269
|
+
{
|
270
|
+
ExtensionPos = dotPos + 1;
|
271
|
+
UString us = ui.Name.Mid(ExtensionPos);
|
272
|
+
if (!us.IsEmpty())
|
273
|
+
{
|
274
|
+
us.MakeLower();
|
275
|
+
int i;
|
276
|
+
AString s;
|
277
|
+
for (i = 0; i < us.Length(); i++)
|
278
|
+
{
|
279
|
+
wchar_t c = us[i];
|
280
|
+
if (c >= 0x80)
|
281
|
+
break;
|
282
|
+
s += (char)c;
|
283
|
+
}
|
284
|
+
if (i == us.Length())
|
285
|
+
ExtensionIndex = GetExtIndex(s);
|
286
|
+
else
|
287
|
+
ExtensionIndex = 0;
|
288
|
+
}
|
289
|
+
}
|
290
|
+
}
|
291
|
+
}
|
292
|
+
};
|
293
|
+
|
294
|
+
static int CompareUpdateItems(const CRefItem *p1, const CRefItem *p2, void *param)
|
295
|
+
{
|
296
|
+
const CRefItem &a1 = *p1;
|
297
|
+
const CRefItem &a2 = *p2;
|
298
|
+
const CUpdateItem &u1 = *a1.UpdateItem;
|
299
|
+
const CUpdateItem &u2 = *a2.UpdateItem;
|
300
|
+
int n;
|
301
|
+
if (u1.IsDir != u2.IsDir)
|
302
|
+
return (u1.IsDir) ? 1 : -1;
|
303
|
+
if (u1.IsDir)
|
304
|
+
{
|
305
|
+
if (u1.IsAnti != u2.IsAnti)
|
306
|
+
return (u1.IsAnti ? 1 : -1);
|
307
|
+
n = MyStringCompareNoCase(u1.Name, u2.Name);
|
308
|
+
return -n;
|
309
|
+
}
|
310
|
+
bool sortByType = *(bool *)param;
|
311
|
+
if (sortByType)
|
312
|
+
{
|
313
|
+
RINOZ_COMP(a1.ExtensionIndex, a2.ExtensionIndex);
|
314
|
+
RINOZ(MyStringCompareNoCase(u1.Name + a1.ExtensionPos, u2.Name + a2.ExtensionPos));
|
315
|
+
RINOZ(MyStringCompareNoCase(u1.Name + a1.NamePos, u2.Name + a2.NamePos));
|
316
|
+
if (!u1.MTimeDefined && u2.MTimeDefined) return 1;
|
317
|
+
if (u1.MTimeDefined && !u2.MTimeDefined) return -1;
|
318
|
+
if (u1.MTimeDefined && u2.MTimeDefined) RINOZ_COMP(u1.MTime, u2.MTime);
|
319
|
+
RINOZ_COMP(u1.Size, u2.Size);
|
320
|
+
}
|
321
|
+
return MyStringCompareNoCase(u1.Name, u2.Name);
|
322
|
+
}
|
323
|
+
|
324
|
+
struct CSolidGroup
|
325
|
+
{
|
326
|
+
CRecordVector<UInt32> Indices;
|
327
|
+
};
|
328
|
+
|
329
|
+
#ifdef _WIN32
|
330
|
+
static wchar_t *g_ExeExts[] =
|
331
|
+
{
|
332
|
+
L"dll",
|
333
|
+
L"exe",
|
334
|
+
L"ocx",
|
335
|
+
L"sfx",
|
336
|
+
L"sys"
|
337
|
+
};
|
338
|
+
|
339
|
+
static bool IsExeExt(const UString &ext)
|
340
|
+
{
|
341
|
+
for (int i = 0; i < sizeof(g_ExeExts) / sizeof(g_ExeExts[0]); i++)
|
342
|
+
if (ext.CompareNoCase(g_ExeExts[i]) == 0)
|
343
|
+
return true;
|
344
|
+
return false;
|
345
|
+
}
|
346
|
+
#else
|
347
|
+
static bool IsExeFile(const CUpdateItem &ui)
|
348
|
+
{
|
349
|
+
if (ui.Attrib & FILE_ATTRIBUTE_UNIX_EXTENSION) {
|
350
|
+
unsigned short st_mode = ui.Attrib >> 16;
|
351
|
+
if ((st_mode & 00111) && (ui.Size >= 2048))
|
352
|
+
{
|
353
|
+
// file has the execution flag and it's big enought
|
354
|
+
// try to find if the file is a script
|
355
|
+
NWindows::NFile::NIO::CInFile file;
|
356
|
+
if (file.Open(ui.Name))
|
357
|
+
{
|
358
|
+
char buffer[512];
|
359
|
+
UINT32 processedSize;
|
360
|
+
if (file.Read(buffer,sizeof(buffer),processedSize))
|
361
|
+
{
|
362
|
+
for(UInt32 i = 0; i < processedSize ; i++)
|
363
|
+
{
|
364
|
+
if (buffer[i] == 0)
|
365
|
+
{
|
366
|
+
return true; // this file is not a text (ascii, utf8, ...) !
|
367
|
+
}
|
368
|
+
}
|
369
|
+
}
|
370
|
+
}
|
371
|
+
}
|
372
|
+
}
|
373
|
+
return false;
|
374
|
+
}
|
375
|
+
#endif
|
376
|
+
|
377
|
+
#ifdef USE_86_FILTER
|
378
|
+
|
379
|
+
static inline void GetMethodFull(UInt64 methodID, UInt32 numInStreams, CMethodFull &methodResult)
|
380
|
+
{
|
381
|
+
methodResult.Id = methodID;
|
382
|
+
methodResult.NumInStreams = numInStreams;
|
383
|
+
methodResult.NumOutStreams = 1;
|
384
|
+
}
|
385
|
+
|
386
|
+
static void MakeExeMethod(const CCompressionMethodMode &method,
|
387
|
+
bool bcj2Filter, CCompressionMethodMode &exeMethod)
|
388
|
+
{
|
389
|
+
exeMethod = method;
|
390
|
+
if (bcj2Filter)
|
391
|
+
{
|
392
|
+
CMethodFull methodFull;
|
393
|
+
GetMethodFull(k_BCJ2, 4, methodFull);
|
394
|
+
exeMethod.Methods.Insert(0, methodFull);
|
395
|
+
GetMethodFull(k_LZMA, 1, methodFull);
|
396
|
+
{
|
397
|
+
CProp prop;
|
398
|
+
prop.Id = NCoderPropID::kAlgorithm;
|
399
|
+
prop.Value = kAlgorithmForBCJ2_LZMA;
|
400
|
+
methodFull.Props.Add(prop);
|
401
|
+
}
|
402
|
+
{
|
403
|
+
CProp prop;
|
404
|
+
prop.Id = NCoderPropID::kMatchFinder;
|
405
|
+
prop.Value = kMatchFinderForBCJ2_LZMA;
|
406
|
+
methodFull.Props.Add(prop);
|
407
|
+
}
|
408
|
+
{
|
409
|
+
CProp prop;
|
410
|
+
prop.Id = NCoderPropID::kDictionarySize;
|
411
|
+
prop.Value = kDictionaryForBCJ2_LZMA;
|
412
|
+
methodFull.Props.Add(prop);
|
413
|
+
}
|
414
|
+
{
|
415
|
+
CProp prop;
|
416
|
+
prop.Id = NCoderPropID::kNumFastBytes;
|
417
|
+
prop.Value = kNumFastBytesForBCJ2_LZMA;
|
418
|
+
methodFull.Props.Add(prop);
|
419
|
+
}
|
420
|
+
{
|
421
|
+
CProp prop;
|
422
|
+
prop.Id = NCoderPropID::kNumThreads;
|
423
|
+
prop.Value = (UInt32)1;
|
424
|
+
methodFull.Props.Add(prop);
|
425
|
+
}
|
426
|
+
|
427
|
+
exeMethod.Methods.Add(methodFull);
|
428
|
+
exeMethod.Methods.Add(methodFull);
|
429
|
+
CBind bind;
|
430
|
+
|
431
|
+
bind.OutCoder = 0;
|
432
|
+
bind.InStream = 0;
|
433
|
+
|
434
|
+
bind.InCoder = 1;
|
435
|
+
bind.OutStream = 0;
|
436
|
+
exeMethod.Binds.Add(bind);
|
437
|
+
|
438
|
+
bind.InCoder = 2;
|
439
|
+
bind.OutStream = 1;
|
440
|
+
exeMethod.Binds.Add(bind);
|
441
|
+
|
442
|
+
bind.InCoder = 3;
|
443
|
+
bind.OutStream = 2;
|
444
|
+
exeMethod.Binds.Add(bind);
|
445
|
+
}
|
446
|
+
else
|
447
|
+
{
|
448
|
+
CMethodFull methodFull;
|
449
|
+
GetMethodFull(k_BCJ, 1, methodFull);
|
450
|
+
exeMethod.Methods.Insert(0, methodFull);
|
451
|
+
CBind bind;
|
452
|
+
bind.OutCoder = 0;
|
453
|
+
bind.InStream = 0;
|
454
|
+
bind.InCoder = 1;
|
455
|
+
bind.OutStream = 0;
|
456
|
+
exeMethod.Binds.Add(bind);
|
457
|
+
}
|
458
|
+
}
|
459
|
+
|
460
|
+
#endif
|
461
|
+
|
462
|
+
static void FromUpdateItemToFileItem(const CUpdateItem &ui,
|
463
|
+
CFileItem &file, CFileItem2 &file2)
|
464
|
+
{
|
465
|
+
file.Name = NItemName::MakeLegalName(ui.Name);
|
466
|
+
if (ui.AttribDefined)
|
467
|
+
file.SetAttrib(ui.Attrib);
|
468
|
+
|
469
|
+
file2.CTime = ui.CTime; file2.CTimeDefined = ui.CTimeDefined;
|
470
|
+
file2.ATime = ui.ATime; file2.ATimeDefined = ui.ATimeDefined;
|
471
|
+
file2.MTime = ui.MTime; file2.MTimeDefined = ui.MTimeDefined;
|
472
|
+
file2.IsAnti = ui.IsAnti;
|
473
|
+
file2.StartPosDefined = false;
|
474
|
+
|
475
|
+
file.Size = ui.Size;
|
476
|
+
file.IsDir = ui.IsDir;
|
477
|
+
file.HasStream = ui.HasStream();
|
478
|
+
}
|
479
|
+
|
480
|
+
class CFolderOutStream2:
|
481
|
+
public ISequentialOutStream,
|
482
|
+
public CMyUnknownImp
|
483
|
+
{
|
484
|
+
COutStreamWithCRC *_crcStreamSpec;
|
485
|
+
CMyComPtr<ISequentialOutStream> _crcStream;
|
486
|
+
const CArchiveDatabaseEx *_db;
|
487
|
+
const CBoolVector *_extractStatuses;
|
488
|
+
CMyComPtr<ISequentialOutStream> _outStream;
|
489
|
+
UInt32 _startIndex;
|
490
|
+
int _currentIndex;
|
491
|
+
bool _fileIsOpen;
|
492
|
+
UInt64 _rem;
|
493
|
+
|
494
|
+
void OpenFile();
|
495
|
+
void CloseFile();
|
496
|
+
HRESULT CloseFileAndSetResult();
|
497
|
+
HRESULT ProcessEmptyFiles();
|
498
|
+
public:
|
499
|
+
MY_UNKNOWN_IMP
|
500
|
+
|
501
|
+
CFolderOutStream2()
|
502
|
+
{
|
503
|
+
_crcStreamSpec = new COutStreamWithCRC;
|
504
|
+
_crcStream = _crcStreamSpec;
|
505
|
+
}
|
506
|
+
|
507
|
+
HRESULT Init(const CArchiveDatabaseEx *db, UInt32 startIndex,
|
508
|
+
const CBoolVector *extractStatuses, ISequentialOutStream *outStream);
|
509
|
+
void ReleaseOutStream();
|
510
|
+
HRESULT CheckFinishedState() const { return (_currentIndex == _extractStatuses->Size()) ? S_OK: E_FAIL; }
|
511
|
+
|
512
|
+
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
513
|
+
};
|
514
|
+
|
515
|
+
HRESULT CFolderOutStream2::Init(const CArchiveDatabaseEx *db, UInt32 startIndex,
|
516
|
+
const CBoolVector *extractStatuses, ISequentialOutStream *outStream)
|
517
|
+
{
|
518
|
+
_db = db;
|
519
|
+
_startIndex = startIndex;
|
520
|
+
_extractStatuses = extractStatuses;
|
521
|
+
_outStream = outStream;
|
522
|
+
|
523
|
+
_currentIndex = 0;
|
524
|
+
_fileIsOpen = false;
|
525
|
+
return ProcessEmptyFiles();
|
526
|
+
}
|
527
|
+
|
528
|
+
void CFolderOutStream2::ReleaseOutStream()
|
529
|
+
{
|
530
|
+
_outStream.Release();
|
531
|
+
_crcStreamSpec->ReleaseStream();
|
532
|
+
}
|
533
|
+
|
534
|
+
void CFolderOutStream2::OpenFile()
|
535
|
+
{
|
536
|
+
_crcStreamSpec->SetStream((*_extractStatuses)[_currentIndex] ? (ISequentialOutStream *)_outStream : NULL); // FIXED for gcc 2.95
|
537
|
+
_crcStreamSpec->Init(true);
|
538
|
+
_fileIsOpen = true;
|
539
|
+
_rem = _db->Files[_startIndex + _currentIndex].Size;
|
540
|
+
}
|
541
|
+
|
542
|
+
void CFolderOutStream2::CloseFile()
|
543
|
+
{
|
544
|
+
_crcStreamSpec->ReleaseStream();
|
545
|
+
_fileIsOpen = false;
|
546
|
+
_currentIndex++;
|
547
|
+
}
|
548
|
+
|
549
|
+
HRESULT CFolderOutStream2::CloseFileAndSetResult()
|
550
|
+
{
|
551
|
+
const CFileItem &file = _db->Files[_startIndex + _currentIndex];
|
552
|
+
CloseFile();
|
553
|
+
return (file.IsDir || !file.CrcDefined || file.Crc == _crcStreamSpec->GetCRC()) ? S_OK: S_FALSE;
|
554
|
+
}
|
555
|
+
|
556
|
+
HRESULT CFolderOutStream2::ProcessEmptyFiles()
|
557
|
+
{
|
558
|
+
while (_currentIndex < _extractStatuses->Size() && _db->Files[_startIndex + _currentIndex].Size == 0)
|
559
|
+
{
|
560
|
+
OpenFile();
|
561
|
+
RINOK(CloseFileAndSetResult());
|
562
|
+
}
|
563
|
+
return S_OK;
|
564
|
+
}
|
565
|
+
|
566
|
+
STDMETHODIMP CFolderOutStream2::Write(const void *data, UInt32 size, UInt32 *processedSize)
|
567
|
+
{
|
568
|
+
if (processedSize != NULL)
|
569
|
+
*processedSize = 0;
|
570
|
+
while (size != 0)
|
571
|
+
{
|
572
|
+
if (_fileIsOpen)
|
573
|
+
{
|
574
|
+
UInt32 cur = size < _rem ? size : (UInt32)_rem;
|
575
|
+
RINOK(_crcStream->Write(data, cur, &cur));
|
576
|
+
if (cur == 0)
|
577
|
+
break;
|
578
|
+
data = (const Byte *)data + cur;
|
579
|
+
size -= cur;
|
580
|
+
_rem -= cur;
|
581
|
+
if (processedSize != NULL)
|
582
|
+
*processedSize += cur;
|
583
|
+
if (_rem == 0)
|
584
|
+
{
|
585
|
+
RINOK(CloseFileAndSetResult());
|
586
|
+
RINOK(ProcessEmptyFiles());
|
587
|
+
continue;
|
588
|
+
}
|
589
|
+
}
|
590
|
+
else
|
591
|
+
{
|
592
|
+
RINOK(ProcessEmptyFiles());
|
593
|
+
if (_currentIndex == _extractStatuses->Size())
|
594
|
+
{
|
595
|
+
// we don't support partial extracting
|
596
|
+
return E_FAIL;
|
597
|
+
}
|
598
|
+
OpenFile();
|
599
|
+
}
|
600
|
+
}
|
601
|
+
return S_OK;
|
602
|
+
}
|
603
|
+
|
604
|
+
class CThreadDecoder: public CVirtThread
|
605
|
+
{
|
606
|
+
public:
|
607
|
+
HRESULT Result;
|
608
|
+
CMyComPtr<IInStream> InStream;
|
609
|
+
|
610
|
+
CFolderOutStream2 *FosSpec;
|
611
|
+
CMyComPtr<ISequentialOutStream> Fos;
|
612
|
+
|
613
|
+
UInt64 StartPos;
|
614
|
+
const UInt64 *PackSizes;
|
615
|
+
const CFolder *Folder;
|
616
|
+
#ifndef _NO_CRYPTO
|
617
|
+
CMyComPtr<ICryptoGetTextPassword> GetTextPassword;
|
618
|
+
#endif
|
619
|
+
|
620
|
+
DECL_EXTERNAL_CODECS_VARS
|
621
|
+
CDecoder Decoder;
|
622
|
+
|
623
|
+
#ifndef _7ZIP_ST
|
624
|
+
bool MtMode;
|
625
|
+
UInt32 NumThreads;
|
626
|
+
#endif
|
627
|
+
|
628
|
+
CThreadDecoder():
|
629
|
+
Decoder(true)
|
630
|
+
{
|
631
|
+
#ifndef _7ZIP_ST
|
632
|
+
MtMode = false;
|
633
|
+
NumThreads = 1;
|
634
|
+
#endif
|
635
|
+
FosSpec = new CFolderOutStream2;
|
636
|
+
Fos = FosSpec;
|
637
|
+
Result = E_FAIL;
|
638
|
+
}
|
639
|
+
virtual void Execute();
|
640
|
+
};
|
641
|
+
|
642
|
+
void CThreadDecoder::Execute()
|
643
|
+
{
|
644
|
+
try
|
645
|
+
{
|
646
|
+
#ifndef _NO_CRYPTO
|
647
|
+
bool passwordIsDefined;
|
648
|
+
#endif
|
649
|
+
Result = Decoder.Decode(
|
650
|
+
EXTERNAL_CODECS_VARS
|
651
|
+
InStream,
|
652
|
+
StartPos,
|
653
|
+
PackSizes,
|
654
|
+
*Folder,
|
655
|
+
Fos,
|
656
|
+
NULL
|
657
|
+
#ifndef _NO_CRYPTO
|
658
|
+
, GetTextPassword, passwordIsDefined
|
659
|
+
#endif
|
660
|
+
#ifndef _7ZIP_ST
|
661
|
+
, MtMode, NumThreads
|
662
|
+
#endif
|
663
|
+
);
|
664
|
+
}
|
665
|
+
catch(...)
|
666
|
+
{
|
667
|
+
Result = E_FAIL;
|
668
|
+
}
|
669
|
+
if (Result == S_OK)
|
670
|
+
Result = FosSpec->CheckFinishedState();
|
671
|
+
FosSpec->ReleaseOutStream();
|
672
|
+
}
|
673
|
+
|
674
|
+
bool static Is86FilteredFolder(const CFolder &f)
|
675
|
+
{
|
676
|
+
for (int i = 0; i < f.Coders.Size(); i++)
|
677
|
+
{
|
678
|
+
CMethodId m = f.Coders[i].MethodID;
|
679
|
+
if (m == k_BCJ || m == k_BCJ2)
|
680
|
+
return true;
|
681
|
+
}
|
682
|
+
return false;
|
683
|
+
}
|
684
|
+
|
685
|
+
#ifndef _NO_CRYPTO
|
686
|
+
|
687
|
+
class CCryptoGetTextPassword:
|
688
|
+
public ICryptoGetTextPassword,
|
689
|
+
public CMyUnknownImp
|
690
|
+
{
|
691
|
+
public:
|
692
|
+
UString Password;
|
693
|
+
|
694
|
+
MY_UNKNOWN_IMP
|
695
|
+
STDMETHOD(CryptoGetTextPassword)(BSTR *password);
|
696
|
+
};
|
697
|
+
|
698
|
+
STDMETHODIMP CCryptoGetTextPassword::CryptoGetTextPassword(BSTR *password)
|
699
|
+
{
|
700
|
+
return StringToBstr(Password, password);
|
701
|
+
}
|
702
|
+
|
703
|
+
#endif
|
704
|
+
|
705
|
+
static const int kNumGroupsMax = 4;
|
706
|
+
|
707
|
+
#ifdef USE_86_FILTER
|
708
|
+
static bool Is86Group(int group) { return (group & 1) != 0; }
|
709
|
+
#endif
|
710
|
+
static bool IsEncryptedGroup(int group) { return (group & 2) != 0; }
|
711
|
+
static int GetGroupIndex(bool encrypted, int bcjFiltered)
|
712
|
+
{ return (encrypted ? 2 : 0) + (bcjFiltered ? 1 : 0); }
|
713
|
+
|
714
|
+
HRESULT Update(
|
715
|
+
DECL_EXTERNAL_CODECS_LOC_VARS
|
716
|
+
IInStream *inStream,
|
717
|
+
const CArchiveDatabaseEx *db,
|
718
|
+
const CObjectVector<CUpdateItem> &updateItems,
|
719
|
+
COutArchive &archive,
|
720
|
+
CArchiveDatabase &newDatabase,
|
721
|
+
ISequentialOutStream *seqOutStream,
|
722
|
+
IArchiveUpdateCallback *updateCallback,
|
723
|
+
const CUpdateOptions &options
|
724
|
+
#ifndef _NO_CRYPTO
|
725
|
+
, ICryptoGetTextPassword *getDecoderPassword
|
726
|
+
#endif
|
727
|
+
)
|
728
|
+
{
|
729
|
+
UInt64 numSolidFiles = options.NumSolidFiles;
|
730
|
+
if (numSolidFiles == 0)
|
731
|
+
numSolidFiles = 1;
|
732
|
+
/*
|
733
|
+
CMyComPtr<IOutStream> outStream;
|
734
|
+
RINOK(seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStream));
|
735
|
+
if (!outStream)
|
736
|
+
return E_NOTIMPL;
|
737
|
+
*/
|
738
|
+
|
739
|
+
UInt64 startBlockSize = db != 0 ? db->ArchiveInfo.StartPosition: 0;
|
740
|
+
if (startBlockSize > 0 && !options.RemoveSfxBlock)
|
741
|
+
{
|
742
|
+
RINOK(WriteRange(inStream, seqOutStream, 0, startBlockSize, NULL));
|
743
|
+
}
|
744
|
+
|
745
|
+
CRecordVector<int> fileIndexToUpdateIndexMap;
|
746
|
+
CRecordVector<CFolderRepack> folderRefs;
|
747
|
+
UInt64 complexity = 0;
|
748
|
+
UInt64 inSizeForReduce2 = 0;
|
749
|
+
bool needEncryptedRepack = false;
|
750
|
+
if (db != 0)
|
751
|
+
{
|
752
|
+
fileIndexToUpdateIndexMap.Reserve(db->Files.Size());
|
753
|
+
int i;
|
754
|
+
for (i = 0; i < db->Files.Size(); i++)
|
755
|
+
fileIndexToUpdateIndexMap.Add(-1);
|
756
|
+
|
757
|
+
for (i = 0; i < updateItems.Size(); i++)
|
758
|
+
{
|
759
|
+
int index = updateItems[i].IndexInArchive;
|
760
|
+
if (index != -1)
|
761
|
+
fileIndexToUpdateIndexMap[index] = i;
|
762
|
+
}
|
763
|
+
|
764
|
+
for (i = 0; i < db->Folders.Size(); i++)
|
765
|
+
{
|
766
|
+
CNum indexInFolder = 0;
|
767
|
+
CNum numCopyItems = 0;
|
768
|
+
CNum numUnpackStreams = db->NumUnpackStreamsVector[i];
|
769
|
+
UInt64 repackSize = 0;
|
770
|
+
for (CNum fi = db->FolderStartFileIndex[i]; indexInFolder < numUnpackStreams; fi++)
|
771
|
+
{
|
772
|
+
const CFileItem &file = db->Files[fi];
|
773
|
+
if (file.HasStream)
|
774
|
+
{
|
775
|
+
indexInFolder++;
|
776
|
+
int updateIndex = fileIndexToUpdateIndexMap[fi];
|
777
|
+
if (updateIndex >= 0 && !updateItems[updateIndex].NewData)
|
778
|
+
{
|
779
|
+
numCopyItems++;
|
780
|
+
repackSize += file.Size;
|
781
|
+
}
|
782
|
+
}
|
783
|
+
}
|
784
|
+
|
785
|
+
if (numCopyItems == 0)
|
786
|
+
continue;
|
787
|
+
|
788
|
+
CFolderRepack rep;
|
789
|
+
rep.FolderIndex = i;
|
790
|
+
rep.NumCopyFiles = numCopyItems;
|
791
|
+
const CFolder &f = db->Folders[i];
|
792
|
+
bool isEncrypted = f.IsEncrypted();
|
793
|
+
rep.Group = GetGroupIndex(isEncrypted, Is86FilteredFolder(f));
|
794
|
+
folderRefs.Add(rep);
|
795
|
+
if (numCopyItems == numUnpackStreams)
|
796
|
+
complexity += db->GetFolderFullPackSize(i);
|
797
|
+
else
|
798
|
+
{
|
799
|
+
complexity += repackSize;
|
800
|
+
if (repackSize > inSizeForReduce2)
|
801
|
+
inSizeForReduce2 = repackSize;
|
802
|
+
if (isEncrypted)
|
803
|
+
needEncryptedRepack = true;
|
804
|
+
}
|
805
|
+
}
|
806
|
+
folderRefs.Sort(CompareFolderRepacks, (void *)db);
|
807
|
+
}
|
808
|
+
|
809
|
+
UInt64 inSizeForReduce = 0;
|
810
|
+
int i;
|
811
|
+
for (i = 0; i < updateItems.Size(); i++)
|
812
|
+
{
|
813
|
+
const CUpdateItem &ui = updateItems[i];
|
814
|
+
if (ui.NewData)
|
815
|
+
{
|
816
|
+
complexity += ui.Size;
|
817
|
+
if (numSolidFiles != 1)
|
818
|
+
inSizeForReduce += ui.Size;
|
819
|
+
else if (ui.Size > inSizeForReduce)
|
820
|
+
inSizeForReduce = ui.Size;
|
821
|
+
}
|
822
|
+
}
|
823
|
+
|
824
|
+
if (inSizeForReduce2 > inSizeForReduce)
|
825
|
+
inSizeForReduce = inSizeForReduce2;
|
826
|
+
|
827
|
+
const UInt32 kMinReduceSize = (1 << 16);
|
828
|
+
if (inSizeForReduce < kMinReduceSize)
|
829
|
+
inSizeForReduce = kMinReduceSize;
|
830
|
+
|
831
|
+
RINOK(updateCallback->SetTotal(complexity));
|
832
|
+
|
833
|
+
CLocalProgress *lps = new CLocalProgress;
|
834
|
+
CMyComPtr<ICompressProgressInfo> progress = lps;
|
835
|
+
lps->Init(updateCallback, true);
|
836
|
+
|
837
|
+
CThreadDecoder threadDecoder;
|
838
|
+
if (!folderRefs.IsEmpty())
|
839
|
+
{
|
840
|
+
#ifdef EXTERNAL_CODECS
|
841
|
+
threadDecoder._codecsInfo = codecsInfo;
|
842
|
+
threadDecoder._externalCodecs = *externalCodecs;
|
843
|
+
#endif
|
844
|
+
RINOK(threadDecoder.Create());
|
845
|
+
}
|
846
|
+
|
847
|
+
CObjectVector<CSolidGroup> groups;
|
848
|
+
for (i = 0; i < kNumGroupsMax; i++)
|
849
|
+
groups.Add(CSolidGroup());
|
850
|
+
|
851
|
+
{
|
852
|
+
// ---------- Split files to 2 groups ----------
|
853
|
+
|
854
|
+
bool useFilters = options.UseFilters;
|
855
|
+
const CCompressionMethodMode &method = *options.Method;
|
856
|
+
if (method.Methods.Size() != 1 || method.Binds.Size() != 0)
|
857
|
+
useFilters = false;
|
858
|
+
for (i = 0; i < updateItems.Size(); i++)
|
859
|
+
{
|
860
|
+
const CUpdateItem &ui = updateItems[i];
|
861
|
+
if (!ui.NewData || !ui.HasStream())
|
862
|
+
continue;
|
863
|
+
bool filteredGroup = false;
|
864
|
+
if (useFilters)
|
865
|
+
{
|
866
|
+
#ifdef _WIN32
|
867
|
+
int dotPos = ui.Name.ReverseFind(L'.');
|
868
|
+
if (dotPos >= 0)
|
869
|
+
filteredGroup = IsExeExt(ui.Name.Mid(dotPos + 1));
|
870
|
+
#else
|
871
|
+
filteredGroup = IsExeFile(ui);
|
872
|
+
#endif
|
873
|
+
}
|
874
|
+
groups[GetGroupIndex(method.PasswordIsDefined, filteredGroup)].Indices.Add(i);
|
875
|
+
}
|
876
|
+
}
|
877
|
+
|
878
|
+
#ifndef _NO_CRYPTO
|
879
|
+
|
880
|
+
CCryptoGetTextPassword *getPasswordSpec = NULL;
|
881
|
+
if (needEncryptedRepack)
|
882
|
+
{
|
883
|
+
getPasswordSpec = new CCryptoGetTextPassword;
|
884
|
+
threadDecoder.GetTextPassword = getPasswordSpec;
|
885
|
+
|
886
|
+
if (options.Method->PasswordIsDefined)
|
887
|
+
getPasswordSpec->Password = options.Method->Password;
|
888
|
+
else
|
889
|
+
{
|
890
|
+
if (!getDecoderPassword)
|
891
|
+
return E_NOTIMPL;
|
892
|
+
CMyComBSTR password;
|
893
|
+
RINOK(getDecoderPassword->CryptoGetTextPassword(&password));
|
894
|
+
getPasswordSpec->Password = password;
|
895
|
+
}
|
896
|
+
}
|
897
|
+
|
898
|
+
#endif
|
899
|
+
|
900
|
+
// ---------- Compress ----------
|
901
|
+
|
902
|
+
RINOK(archive.Create(seqOutStream, false));
|
903
|
+
RINOK(archive.SkipPrefixArchiveHeader());
|
904
|
+
|
905
|
+
int folderRefIndex = 0;
|
906
|
+
lps->ProgressOffset = 0;
|
907
|
+
|
908
|
+
for (int groupIndex = 0; groupIndex < kNumGroupsMax; groupIndex++)
|
909
|
+
{
|
910
|
+
const CSolidGroup &group = groups[groupIndex];
|
911
|
+
|
912
|
+
CCompressionMethodMode method;
|
913
|
+
#ifdef USE_86_FILTER
|
914
|
+
if (Is86Group(groupIndex))
|
915
|
+
MakeExeMethod(*options.Method, options.MaxFilter, method);
|
916
|
+
else
|
917
|
+
#endif
|
918
|
+
method = *options.Method;
|
919
|
+
|
920
|
+
if (IsEncryptedGroup(groupIndex))
|
921
|
+
{
|
922
|
+
if (!method.PasswordIsDefined)
|
923
|
+
{
|
924
|
+
#ifndef _NO_CRYPTO
|
925
|
+
if (getPasswordSpec)
|
926
|
+
method.Password = getPasswordSpec->Password;
|
927
|
+
#endif
|
928
|
+
method.PasswordIsDefined = true;
|
929
|
+
}
|
930
|
+
}
|
931
|
+
else
|
932
|
+
{
|
933
|
+
method.PasswordIsDefined = false;
|
934
|
+
method.Password.Empty();
|
935
|
+
}
|
936
|
+
|
937
|
+
CEncoder encoder(method);
|
938
|
+
|
939
|
+
for (; folderRefIndex < folderRefs.Size(); folderRefIndex++)
|
940
|
+
{
|
941
|
+
const CFolderRepack &rep = folderRefs[folderRefIndex];
|
942
|
+
if (rep.Group != groupIndex)
|
943
|
+
break;
|
944
|
+
int folderIndex = rep.FolderIndex;
|
945
|
+
|
946
|
+
if (rep.NumCopyFiles == db->NumUnpackStreamsVector[folderIndex])
|
947
|
+
{
|
948
|
+
UInt64 packSize = db->GetFolderFullPackSize(folderIndex);
|
949
|
+
RINOK(WriteRange(inStream, archive.SeqStream,
|
950
|
+
db->GetFolderStreamPos(folderIndex, 0), packSize, progress));
|
951
|
+
lps->ProgressOffset += packSize;
|
952
|
+
|
953
|
+
const CFolder &folder = db->Folders[folderIndex];
|
954
|
+
CNum startIndex = db->FolderStartPackStreamIndex[folderIndex];
|
955
|
+
for (int j = 0; j < folder.PackStreams.Size(); j++)
|
956
|
+
{
|
957
|
+
newDatabase.PackSizes.Add(db->PackSizes[startIndex + j]);
|
958
|
+
// newDatabase.PackCRCsDefined.Add(db.PackCRCsDefined[startIndex + j]);
|
959
|
+
// newDatabase.PackCRCs.Add(db.PackCRCs[startIndex + j]);
|
960
|
+
}
|
961
|
+
newDatabase.Folders.Add(folder);
|
962
|
+
}
|
963
|
+
else
|
964
|
+
{
|
965
|
+
CStreamBinder sb;
|
966
|
+
RINOK(sb.CreateEvents());
|
967
|
+
CMyComPtr<ISequentialOutStream> sbOutStream;
|
968
|
+
CMyComPtr<ISequentialInStream> sbInStream;
|
969
|
+
sb.CreateStreams(&sbInStream, &sbOutStream);
|
970
|
+
CBoolVector extractStatuses;
|
971
|
+
|
972
|
+
CNum numUnpackStreams = db->NumUnpackStreamsVector[folderIndex];
|
973
|
+
CNum indexInFolder = 0;
|
974
|
+
|
975
|
+
for (CNum fi = db->FolderStartFileIndex[folderIndex]; indexInFolder < numUnpackStreams; fi++)
|
976
|
+
{
|
977
|
+
bool needExtract = false;
|
978
|
+
if (db->Files[fi].HasStream)
|
979
|
+
{
|
980
|
+
indexInFolder++;
|
981
|
+
int updateIndex = fileIndexToUpdateIndexMap[fi];
|
982
|
+
if (updateIndex >= 0 && !updateItems[updateIndex].NewData)
|
983
|
+
needExtract = true;
|
984
|
+
}
|
985
|
+
extractStatuses.Add(needExtract);
|
986
|
+
}
|
987
|
+
|
988
|
+
RINOK(threadDecoder.FosSpec->Init(db, db->FolderStartFileIndex[folderIndex], &extractStatuses, sbOutStream));
|
989
|
+
sbOutStream.Release();
|
990
|
+
|
991
|
+
threadDecoder.InStream = inStream;
|
992
|
+
threadDecoder.Folder = &db->Folders[folderIndex];
|
993
|
+
threadDecoder.StartPos = db->GetFolderStreamPos(folderIndex, 0);
|
994
|
+
threadDecoder.PackSizes = &db->PackSizes[db->FolderStartPackStreamIndex[folderIndex]];
|
995
|
+
|
996
|
+
threadDecoder.Start();
|
997
|
+
|
998
|
+
int startPackIndex = newDatabase.PackSizes.Size();
|
999
|
+
CFolder newFolder;
|
1000
|
+
RINOK(encoder.Encode(
|
1001
|
+
EXTERNAL_CODECS_LOC_VARS
|
1002
|
+
sbInStream, NULL, &inSizeForReduce, newFolder,
|
1003
|
+
archive.SeqStream, newDatabase.PackSizes, progress));
|
1004
|
+
|
1005
|
+
threadDecoder.WaitFinish();
|
1006
|
+
|
1007
|
+
RINOK(threadDecoder.Result);
|
1008
|
+
|
1009
|
+
for (; startPackIndex < newDatabase.PackSizes.Size(); startPackIndex++)
|
1010
|
+
lps->OutSize += newDatabase.PackSizes[startPackIndex];
|
1011
|
+
lps->InSize += newFolder.GetUnpackSize();
|
1012
|
+
|
1013
|
+
newDatabase.Folders.Add(newFolder);
|
1014
|
+
}
|
1015
|
+
|
1016
|
+
newDatabase.NumUnpackStreamsVector.Add(rep.NumCopyFiles);
|
1017
|
+
|
1018
|
+
CNum numUnpackStreams = db->NumUnpackStreamsVector[folderIndex];
|
1019
|
+
|
1020
|
+
CNum indexInFolder = 0;
|
1021
|
+
for (CNum fi = db->FolderStartFileIndex[folderIndex]; indexInFolder < numUnpackStreams; fi++)
|
1022
|
+
{
|
1023
|
+
CFileItem file;
|
1024
|
+
CFileItem2 file2;
|
1025
|
+
db->GetFile(fi, file, file2);
|
1026
|
+
if (file.HasStream)
|
1027
|
+
{
|
1028
|
+
indexInFolder++;
|
1029
|
+
int updateIndex = fileIndexToUpdateIndexMap[fi];
|
1030
|
+
if (updateIndex >= 0)
|
1031
|
+
{
|
1032
|
+
const CUpdateItem &ui = updateItems[updateIndex];
|
1033
|
+
if (ui.NewData)
|
1034
|
+
continue;
|
1035
|
+
if (ui.NewProps)
|
1036
|
+
{
|
1037
|
+
CFileItem uf;
|
1038
|
+
FromUpdateItemToFileItem(ui, uf, file2);
|
1039
|
+
uf.Size = file.Size;
|
1040
|
+
uf.Crc = file.Crc;
|
1041
|
+
uf.CrcDefined = file.CrcDefined;
|
1042
|
+
uf.HasStream = file.HasStream;
|
1043
|
+
file = uf;
|
1044
|
+
}
|
1045
|
+
newDatabase.AddFile(file, file2);
|
1046
|
+
}
|
1047
|
+
}
|
1048
|
+
}
|
1049
|
+
}
|
1050
|
+
|
1051
|
+
int numFiles = group.Indices.Size();
|
1052
|
+
if (numFiles == 0)
|
1053
|
+
continue;
|
1054
|
+
CRecordVector<CRefItem> refItems;
|
1055
|
+
refItems.Reserve(numFiles);
|
1056
|
+
bool sortByType = (numSolidFiles > 1);
|
1057
|
+
for (i = 0; i < numFiles; i++)
|
1058
|
+
refItems.Add(CRefItem(group.Indices[i], updateItems[group.Indices[i]], sortByType));
|
1059
|
+
refItems.Sort(CompareUpdateItems, (void *)&sortByType);
|
1060
|
+
|
1061
|
+
CRecordVector<UInt32> indices;
|
1062
|
+
indices.Reserve(numFiles);
|
1063
|
+
|
1064
|
+
for (i = 0; i < numFiles; i++)
|
1065
|
+
{
|
1066
|
+
UInt32 index = refItems[i].Index;
|
1067
|
+
indices.Add(index);
|
1068
|
+
/*
|
1069
|
+
const CUpdateItem &ui = updateItems[index];
|
1070
|
+
CFileItem file;
|
1071
|
+
if (ui.NewProps)
|
1072
|
+
FromUpdateItemToFileItem(ui, file);
|
1073
|
+
else
|
1074
|
+
file = db.Files[ui.IndexInArchive];
|
1075
|
+
if (file.IsAnti || file.IsDir)
|
1076
|
+
return E_FAIL;
|
1077
|
+
newDatabase.Files.Add(file);
|
1078
|
+
*/
|
1079
|
+
}
|
1080
|
+
|
1081
|
+
for (i = 0; i < numFiles;)
|
1082
|
+
{
|
1083
|
+
UInt64 totalSize = 0;
|
1084
|
+
int numSubFiles;
|
1085
|
+
UString prevExtension;
|
1086
|
+
for (numSubFiles = 0; i + numSubFiles < numFiles &&
|
1087
|
+
numSubFiles < numSolidFiles; numSubFiles++)
|
1088
|
+
{
|
1089
|
+
const CUpdateItem &ui = updateItems[indices[i + numSubFiles]];
|
1090
|
+
totalSize += ui.Size;
|
1091
|
+
if (totalSize > options.NumSolidBytes)
|
1092
|
+
break;
|
1093
|
+
if (options.SolidExtension)
|
1094
|
+
{
|
1095
|
+
UString ext = ui.GetExtension();
|
1096
|
+
if (numSubFiles == 0)
|
1097
|
+
prevExtension = ext;
|
1098
|
+
else
|
1099
|
+
if (ext.CompareNoCase(prevExtension) != 0)
|
1100
|
+
break;
|
1101
|
+
}
|
1102
|
+
}
|
1103
|
+
if (numSubFiles < 1)
|
1104
|
+
numSubFiles = 1;
|
1105
|
+
|
1106
|
+
CFolderInStream *inStreamSpec = new CFolderInStream;
|
1107
|
+
CMyComPtr<ISequentialInStream> solidInStream(inStreamSpec);
|
1108
|
+
inStreamSpec->Init(updateCallback, &indices[i], numSubFiles);
|
1109
|
+
|
1110
|
+
CFolder folderItem;
|
1111
|
+
|
1112
|
+
int startPackIndex = newDatabase.PackSizes.Size();
|
1113
|
+
RINOK(encoder.Encode(
|
1114
|
+
EXTERNAL_CODECS_LOC_VARS
|
1115
|
+
solidInStream, NULL, &inSizeForReduce, folderItem,
|
1116
|
+
archive.SeqStream, newDatabase.PackSizes, progress));
|
1117
|
+
|
1118
|
+
for (; startPackIndex < newDatabase.PackSizes.Size(); startPackIndex++)
|
1119
|
+
lps->OutSize += newDatabase.PackSizes[startPackIndex];
|
1120
|
+
|
1121
|
+
lps->InSize += folderItem.GetUnpackSize();
|
1122
|
+
// for ()
|
1123
|
+
// newDatabase.PackCRCsDefined.Add(false);
|
1124
|
+
// newDatabase.PackCRCs.Add(0);
|
1125
|
+
|
1126
|
+
newDatabase.Folders.Add(folderItem);
|
1127
|
+
|
1128
|
+
CNum numUnpackStreams = 0;
|
1129
|
+
for (int subIndex = 0; subIndex < numSubFiles; subIndex++)
|
1130
|
+
{
|
1131
|
+
const CUpdateItem &ui = updateItems[indices[i + subIndex]];
|
1132
|
+
CFileItem file;
|
1133
|
+
CFileItem2 file2;
|
1134
|
+
if (ui.NewProps)
|
1135
|
+
FromUpdateItemToFileItem(ui, file, file2);
|
1136
|
+
else
|
1137
|
+
db->GetFile(ui.IndexInArchive, file, file2);
|
1138
|
+
if (file2.IsAnti || file.IsDir)
|
1139
|
+
return E_FAIL;
|
1140
|
+
|
1141
|
+
/*
|
1142
|
+
CFileItem &file = newDatabase.Files[
|
1143
|
+
startFileIndexInDatabase + i + subIndex];
|
1144
|
+
*/
|
1145
|
+
if (!inStreamSpec->Processed[subIndex])
|
1146
|
+
{
|
1147
|
+
continue;
|
1148
|
+
// file.Name += L".locked";
|
1149
|
+
}
|
1150
|
+
|
1151
|
+
file.Crc = inStreamSpec->CRCs[subIndex];
|
1152
|
+
file.Size = inStreamSpec->Sizes[subIndex];
|
1153
|
+
if (file.Size != 0)
|
1154
|
+
{
|
1155
|
+
file.CrcDefined = true;
|
1156
|
+
file.HasStream = true;
|
1157
|
+
numUnpackStreams++;
|
1158
|
+
}
|
1159
|
+
else
|
1160
|
+
{
|
1161
|
+
file.CrcDefined = false;
|
1162
|
+
file.HasStream = false;
|
1163
|
+
}
|
1164
|
+
newDatabase.AddFile(file, file2);
|
1165
|
+
}
|
1166
|
+
// numUnpackStreams = 0 is very bad case for locked files
|
1167
|
+
// v3.13 doesn't understand it.
|
1168
|
+
newDatabase.NumUnpackStreamsVector.Add(numUnpackStreams);
|
1169
|
+
i += numSubFiles;
|
1170
|
+
}
|
1171
|
+
}
|
1172
|
+
|
1173
|
+
if (folderRefIndex != folderRefs.Size())
|
1174
|
+
return E_FAIL;
|
1175
|
+
|
1176
|
+
/*
|
1177
|
+
folderRefs.ClearAndFree();
|
1178
|
+
fileIndexToUpdateIndexMap.ClearAndFree();
|
1179
|
+
groups.ClearAndFree();
|
1180
|
+
*/
|
1181
|
+
|
1182
|
+
{
|
1183
|
+
// ---------- Write Folders & Empty Files ----------
|
1184
|
+
|
1185
|
+
CRecordVector<int> emptyRefs;
|
1186
|
+
for (i = 0; i < updateItems.Size(); i++)
|
1187
|
+
{
|
1188
|
+
const CUpdateItem &ui = updateItems[i];
|
1189
|
+
if (ui.NewData)
|
1190
|
+
{
|
1191
|
+
if (ui.HasStream())
|
1192
|
+
continue;
|
1193
|
+
}
|
1194
|
+
else if (ui.IndexInArchive != -1 && db->Files[ui.IndexInArchive].HasStream)
|
1195
|
+
continue;
|
1196
|
+
emptyRefs.Add(i);
|
1197
|
+
}
|
1198
|
+
emptyRefs.Sort(CompareEmptyItems, (void *)&updateItems);
|
1199
|
+
for (i = 0; i < emptyRefs.Size(); i++)
|
1200
|
+
{
|
1201
|
+
const CUpdateItem &ui = updateItems[emptyRefs[i]];
|
1202
|
+
CFileItem file;
|
1203
|
+
CFileItem2 file2;
|
1204
|
+
if (ui.NewProps)
|
1205
|
+
FromUpdateItemToFileItem(ui, file, file2);
|
1206
|
+
else
|
1207
|
+
db->GetFile(ui.IndexInArchive, file, file2);
|
1208
|
+
newDatabase.AddFile(file, file2);
|
1209
|
+
}
|
1210
|
+
}
|
1211
|
+
|
1212
|
+
newDatabase.ReserveDown();
|
1213
|
+
return S_OK;
|
1214
|
+
}
|
1215
|
+
|
1216
|
+
}}
|