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,29 @@
|
|
|
1
|
+
// ChmHandler.h
|
|
2
|
+
|
|
3
|
+
#ifndef __ARCHIVE_CHM_HANDLER_H
|
|
4
|
+
#define __ARCHIVE_CHM_HANDLER_H
|
|
5
|
+
|
|
6
|
+
#include "Common/MyCom.h"
|
|
7
|
+
#include "../IArchive.h"
|
|
8
|
+
#include "ChmIn.h"
|
|
9
|
+
|
|
10
|
+
namespace NArchive {
|
|
11
|
+
namespace NChm {
|
|
12
|
+
|
|
13
|
+
class CHandler:
|
|
14
|
+
public IInArchive,
|
|
15
|
+
public CMyUnknownImp
|
|
16
|
+
{
|
|
17
|
+
public:
|
|
18
|
+
MY_UNKNOWN_IMP1(IInArchive)
|
|
19
|
+
|
|
20
|
+
INTERFACE_IInArchive(;)
|
|
21
|
+
|
|
22
|
+
private:
|
|
23
|
+
CFilesDatabase m_Database;
|
|
24
|
+
CMyComPtr<IInStream> m_Stream;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
}}
|
|
28
|
+
|
|
29
|
+
#endif
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Archive/Chm/Header.h
|
|
2
|
+
|
|
3
|
+
#include "StdAfx.h"
|
|
4
|
+
|
|
5
|
+
#include "ChmHeader.h"
|
|
6
|
+
|
|
7
|
+
namespace NArchive{
|
|
8
|
+
namespace NChm{
|
|
9
|
+
namespace NHeader{
|
|
10
|
+
|
|
11
|
+
UInt32 kItsfSignature = 0x46535449 + 1;
|
|
12
|
+
UInt32 kItolSignature = 0x4C4F5449 + 1;
|
|
13
|
+
static class CSignatureInitializer
|
|
14
|
+
{
|
|
15
|
+
public:
|
|
16
|
+
CSignatureInitializer()
|
|
17
|
+
{
|
|
18
|
+
kItsfSignature--;
|
|
19
|
+
kItolSignature--;
|
|
20
|
+
}
|
|
21
|
+
}g_SignatureInitializer;
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
}}}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Archive/Chm/Header.h
|
|
2
|
+
|
|
3
|
+
#ifndef __ARCHIVE_CHM_HEADER_H
|
|
4
|
+
#define __ARCHIVE_CHM_HEADER_H
|
|
5
|
+
|
|
6
|
+
#include "Common/Types.h"
|
|
7
|
+
|
|
8
|
+
namespace NArchive {
|
|
9
|
+
namespace NChm {
|
|
10
|
+
namespace NHeader{
|
|
11
|
+
|
|
12
|
+
const UInt32 kItspSignature = 0x50535449;
|
|
13
|
+
const UInt32 kPmglSignature = 0x4C474D50;
|
|
14
|
+
const UInt32 kLzxcSignature = 0x43585A4C;
|
|
15
|
+
|
|
16
|
+
const UInt32 kIfcmSignature = 0x4D434649;
|
|
17
|
+
const UInt32 kAollSignature = 0x4C4C4F41;
|
|
18
|
+
const UInt32 kCaolSignature = 0x4C4F4143;
|
|
19
|
+
|
|
20
|
+
extern UInt32 kItsfSignature;
|
|
21
|
+
|
|
22
|
+
extern UInt32 kItolSignature;
|
|
23
|
+
const UInt32 kItlsSignature = 0x534C5449;
|
|
24
|
+
UInt64 inline GetHxsSignature() { return ((UInt64)kItlsSignature << 32) | kItolSignature; }
|
|
25
|
+
|
|
26
|
+
}}}
|
|
27
|
+
|
|
28
|
+
#endif
|
|
@@ -0,0 +1,937 @@
|
|
|
1
|
+
// Archive/ChmIn.cpp
|
|
2
|
+
|
|
3
|
+
#include "StdAfx.h"
|
|
4
|
+
|
|
5
|
+
#include "Common/IntToString.h"
|
|
6
|
+
#include "Common/UTFConvert.h"
|
|
7
|
+
|
|
8
|
+
#include "../../Common/LimitedStreams.h"
|
|
9
|
+
|
|
10
|
+
#include "ChmIn.h"
|
|
11
|
+
|
|
12
|
+
namespace NArchive {
|
|
13
|
+
namespace NChm {
|
|
14
|
+
|
|
15
|
+
// define CHM_LOW, if you want to see low level items
|
|
16
|
+
// #define CHM_LOW
|
|
17
|
+
|
|
18
|
+
static const GUID kChmLzxGuid = { 0x7FC28940, 0x9D31, 0x11D0, { 0x9B, 0x27, 0x00, 0xA0, 0xC9, 0x1E, 0x9C, 0x7C } };
|
|
19
|
+
static const GUID kHelp2LzxGuid = { 0x0A9007C6, 0x4076, 0x11D3, { 0x87, 0x89, 0x00, 0x00, 0xF8, 0x10, 0x57, 0x54 } };
|
|
20
|
+
static const GUID kDesGuid = { 0x67F6E4A2, 0x60BF, 0x11D3, { 0x85, 0x40, 0x00, 0xC0, 0x4F, 0x58, 0xC3, 0xCF } };
|
|
21
|
+
|
|
22
|
+
static bool AreGuidsEqual(REFGUID g1, REFGUID g2)
|
|
23
|
+
{
|
|
24
|
+
if (g1.Data1 != g2.Data1 ||
|
|
25
|
+
g1.Data2 != g2.Data2 ||
|
|
26
|
+
g1.Data3 != g2.Data3)
|
|
27
|
+
return false;
|
|
28
|
+
for (int i = 0; i < 8; i++)
|
|
29
|
+
if (g1.Data4[i] != g2.Data4[i])
|
|
30
|
+
return false;
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static char GetHex(Byte value)
|
|
35
|
+
{
|
|
36
|
+
return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10)));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static void PrintByte(Byte b, AString &s)
|
|
40
|
+
{
|
|
41
|
+
s += GetHex(b >> 4);
|
|
42
|
+
s += GetHex(b & 0xF);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static void PrintUInt16(UInt16 v, AString &s)
|
|
46
|
+
{
|
|
47
|
+
PrintByte((Byte)(v >> 8), s);
|
|
48
|
+
PrintByte((Byte)v, s);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static void PrintUInt32(UInt32 v, AString &s)
|
|
52
|
+
{
|
|
53
|
+
PrintUInt16((UInt16)(v >> 16), s);
|
|
54
|
+
PrintUInt16((UInt16)v, s);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
AString CMethodInfo::GetGuidString() const
|
|
58
|
+
{
|
|
59
|
+
AString s;
|
|
60
|
+
s += '{';
|
|
61
|
+
PrintUInt32(Guid.Data1, s);
|
|
62
|
+
s += '-';
|
|
63
|
+
PrintUInt16(Guid.Data2, s);
|
|
64
|
+
s += '-';
|
|
65
|
+
PrintUInt16(Guid.Data3, s);
|
|
66
|
+
s += '-';
|
|
67
|
+
PrintByte(Guid.Data4[0], s);
|
|
68
|
+
PrintByte(Guid.Data4[1], s);
|
|
69
|
+
s += '-';
|
|
70
|
+
for (int i = 2; i < 8; i++)
|
|
71
|
+
PrintByte(Guid.Data4[i], s);
|
|
72
|
+
s += '}';
|
|
73
|
+
return s;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
bool CMethodInfo::IsLzx() const
|
|
77
|
+
{
|
|
78
|
+
if (AreGuidsEqual(Guid, kChmLzxGuid))
|
|
79
|
+
return true;
|
|
80
|
+
return AreGuidsEqual(Guid, kHelp2LzxGuid);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
bool CMethodInfo::IsDes() const
|
|
84
|
+
{
|
|
85
|
+
return AreGuidsEqual(Guid, kDesGuid);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
UString CMethodInfo::GetName() const
|
|
89
|
+
{
|
|
90
|
+
UString s;
|
|
91
|
+
if (IsLzx())
|
|
92
|
+
{
|
|
93
|
+
s = L"LZX:";
|
|
94
|
+
wchar_t temp[16];
|
|
95
|
+
ConvertUInt32ToString(LzxInfo.GetNumDictBits(), temp);
|
|
96
|
+
s += temp;
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
{
|
|
100
|
+
AString s2;
|
|
101
|
+
if (IsDes())
|
|
102
|
+
s2 = "DES";
|
|
103
|
+
else
|
|
104
|
+
{
|
|
105
|
+
s2 = GetGuidString();
|
|
106
|
+
if (ControlData.GetCapacity() > 0)
|
|
107
|
+
{
|
|
108
|
+
s2 += ':';
|
|
109
|
+
for (size_t i = 0; i < ControlData.GetCapacity(); i++)
|
|
110
|
+
PrintByte(ControlData[i], s2);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
ConvertUTF8ToUnicode(s2, s);
|
|
114
|
+
}
|
|
115
|
+
return s;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
bool CSectionInfo::IsLzx() const
|
|
119
|
+
{
|
|
120
|
+
if (Methods.Size() != 1)
|
|
121
|
+
return false;
|
|
122
|
+
return Methods[0].IsLzx();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
UString CSectionInfo::GetMethodName() const
|
|
126
|
+
{
|
|
127
|
+
UString s;
|
|
128
|
+
if (!IsLzx())
|
|
129
|
+
{
|
|
130
|
+
UString temp;
|
|
131
|
+
if (ConvertUTF8ToUnicode(Name, temp))
|
|
132
|
+
s += temp;
|
|
133
|
+
s += L": ";
|
|
134
|
+
}
|
|
135
|
+
for (int i = 0; i < Methods.Size(); i++)
|
|
136
|
+
{
|
|
137
|
+
if (i != 0)
|
|
138
|
+
s += L' ';
|
|
139
|
+
s += Methods[i].GetName();
|
|
140
|
+
}
|
|
141
|
+
return s;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
Byte CInArchive::ReadByte()
|
|
145
|
+
{
|
|
146
|
+
Byte b;
|
|
147
|
+
if (!_inBuffer.ReadByte(b))
|
|
148
|
+
throw 1;
|
|
149
|
+
return b;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
void CInArchive::Skip(size_t size)
|
|
153
|
+
{
|
|
154
|
+
while (size-- != 0)
|
|
155
|
+
ReadByte();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
void CInArchive::ReadBytes(Byte *data, UInt32 size)
|
|
159
|
+
{
|
|
160
|
+
for (UInt32 i = 0; i < size; i++)
|
|
161
|
+
data[i] = ReadByte();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
UInt16 CInArchive::ReadUInt16()
|
|
165
|
+
{
|
|
166
|
+
UInt16 value = 0;
|
|
167
|
+
for (int i = 0; i < 2; i++)
|
|
168
|
+
value |= ((UInt16)(ReadByte()) << (8 * i));
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
UInt32 CInArchive::ReadUInt32()
|
|
173
|
+
{
|
|
174
|
+
UInt32 value = 0;
|
|
175
|
+
for (int i = 0; i < 4; i++)
|
|
176
|
+
value |= ((UInt32)(ReadByte()) << (8 * i));
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
UInt64 CInArchive::ReadUInt64()
|
|
181
|
+
{
|
|
182
|
+
UInt64 value = 0;
|
|
183
|
+
for (int i = 0; i < 8; i++)
|
|
184
|
+
value |= ((UInt64)(ReadByte()) << (8 * i));
|
|
185
|
+
return value;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
UInt64 CInArchive::ReadEncInt()
|
|
189
|
+
{
|
|
190
|
+
UInt64 val = 0;;
|
|
191
|
+
for (int i = 0; i < 10; i++)
|
|
192
|
+
{
|
|
193
|
+
Byte b = ReadByte();
|
|
194
|
+
val |= (b & 0x7F);
|
|
195
|
+
if (b < 0x80)
|
|
196
|
+
return val;
|
|
197
|
+
val <<= 7;
|
|
198
|
+
}
|
|
199
|
+
throw 1;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
void CInArchive::ReadGUID(GUID &g)
|
|
203
|
+
{
|
|
204
|
+
g.Data1 = ReadUInt32();
|
|
205
|
+
g.Data2 = ReadUInt16();
|
|
206
|
+
g.Data3 = ReadUInt16();
|
|
207
|
+
ReadBytes(g.Data4, 8);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
void CInArchive::ReadString(int size, AString &s)
|
|
211
|
+
{
|
|
212
|
+
s.Empty();
|
|
213
|
+
while(size-- != 0)
|
|
214
|
+
{
|
|
215
|
+
char c = (char)ReadByte();
|
|
216
|
+
if (c == 0)
|
|
217
|
+
{
|
|
218
|
+
Skip(size);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
s += c;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
void CInArchive::ReadUString(int size, UString &s)
|
|
226
|
+
{
|
|
227
|
+
s.Empty();
|
|
228
|
+
while(size-- != 0)
|
|
229
|
+
{
|
|
230
|
+
wchar_t c = ReadUInt16();
|
|
231
|
+
if (c == 0)
|
|
232
|
+
{
|
|
233
|
+
Skip(2 * size);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
s += c;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
HRESULT CInArchive::ReadChunk(IInStream *inStream, UInt64 pos, UInt64 size)
|
|
241
|
+
{
|
|
242
|
+
RINOK(inStream->Seek(pos, STREAM_SEEK_SET, NULL));
|
|
243
|
+
CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
|
|
244
|
+
CMyComPtr<ISequentialInStream> limitedStream(streamSpec);
|
|
245
|
+
streamSpec->SetStream(inStream);
|
|
246
|
+
streamSpec->Init(size);
|
|
247
|
+
_inBuffer.SetStream(limitedStream);
|
|
248
|
+
_inBuffer.Init();
|
|
249
|
+
return S_OK;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
HRESULT CInArchive::ReadDirEntry(CDatabase &database)
|
|
253
|
+
{
|
|
254
|
+
CItem item;
|
|
255
|
+
UInt64 nameLength = ReadEncInt();
|
|
256
|
+
if (nameLength == 0 || nameLength >= 0x10000000)
|
|
257
|
+
return S_FALSE;
|
|
258
|
+
ReadString((int)nameLength, item.Name);
|
|
259
|
+
item.Section = ReadEncInt();
|
|
260
|
+
item.Offset = ReadEncInt();
|
|
261
|
+
item.Size = ReadEncInt();
|
|
262
|
+
database.Items.Add(item);
|
|
263
|
+
return S_OK;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
HRESULT CInArchive::OpenChm(IInStream *inStream, CDatabase &database)
|
|
267
|
+
{
|
|
268
|
+
UInt32 headerSize = ReadUInt32();
|
|
269
|
+
if (headerSize != 0x60)
|
|
270
|
+
return S_FALSE;
|
|
271
|
+
UInt32 unknown1 = ReadUInt32();
|
|
272
|
+
if (unknown1 != 0 && unknown1 != 1) // it's 0 in one .sll file
|
|
273
|
+
return S_FALSE;
|
|
274
|
+
/* UInt32 timeStamp = */ ReadUInt32();
|
|
275
|
+
// Considered as a big-endian DWORD, it appears to contain seconds (MSB) and
|
|
276
|
+
// fractional seconds (second byte).
|
|
277
|
+
// The third and fourth bytes may contain even more fractional bits.
|
|
278
|
+
// The 4 least significant bits in the last byte are constant.
|
|
279
|
+
/* UInt32 lang = */ ReadUInt32();
|
|
280
|
+
GUID g;
|
|
281
|
+
ReadGUID(g); // {7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC}
|
|
282
|
+
ReadGUID(g); // {7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC}
|
|
283
|
+
const int kNumSections = 2;
|
|
284
|
+
UInt64 sectionOffsets[kNumSections];
|
|
285
|
+
UInt64 sectionSizes[kNumSections];
|
|
286
|
+
int i;
|
|
287
|
+
for (i = 0; i < kNumSections; i++)
|
|
288
|
+
{
|
|
289
|
+
sectionOffsets[i] = ReadUInt64();
|
|
290
|
+
sectionSizes[i] = ReadUInt64();
|
|
291
|
+
}
|
|
292
|
+
// if (chmVersion == 3)
|
|
293
|
+
database.ContentOffset = ReadUInt64();
|
|
294
|
+
/*
|
|
295
|
+
else
|
|
296
|
+
database.ContentOffset = _startPosition + 0x58
|
|
297
|
+
*/
|
|
298
|
+
|
|
299
|
+
/*
|
|
300
|
+
// Section 0
|
|
301
|
+
ReadChunk(inStream, sectionOffsets[0], sectionSizes[0]);
|
|
302
|
+
if (sectionSizes[0] != 0x18)
|
|
303
|
+
return S_FALSE;
|
|
304
|
+
ReadUInt32(); // unknown: 01FE
|
|
305
|
+
ReadUInt32(); // unknown: 0
|
|
306
|
+
UInt64 fileSize = ReadUInt64();
|
|
307
|
+
ReadUInt32(); // unknown: 0
|
|
308
|
+
ReadUInt32(); // unknown: 0
|
|
309
|
+
*/
|
|
310
|
+
|
|
311
|
+
// Section 1: The Directory Listing
|
|
312
|
+
ReadChunk(inStream, sectionOffsets[1], sectionSizes[1]);
|
|
313
|
+
if (ReadUInt32() != NHeader::kItspSignature)
|
|
314
|
+
return S_FALSE;
|
|
315
|
+
if (ReadUInt32() != 1) // version
|
|
316
|
+
return S_FALSE;
|
|
317
|
+
/* UInt32 dirHeaderSize = */ ReadUInt32();
|
|
318
|
+
ReadUInt32(); // 0x0A (unknown)
|
|
319
|
+
UInt32 dirChunkSize = ReadUInt32(); // $1000
|
|
320
|
+
if (dirChunkSize < 32)
|
|
321
|
+
return S_FALSE;
|
|
322
|
+
/* UInt32 density = */ ReadUInt32(); // "Density" of quickref section, usually 2.
|
|
323
|
+
/* UInt32 depth = */ ReadUInt32(); // Depth of the index tree: 1 there is no index,
|
|
324
|
+
// 2 if there is one level of PMGI chunks.
|
|
325
|
+
|
|
326
|
+
/* UInt32 chunkNumber = */ ReadUInt32(); // Chunk number of root index chunk, -1 if there is none
|
|
327
|
+
// (though at least one file has 0 despite there being no
|
|
328
|
+
// index chunk, probably a bug.)
|
|
329
|
+
/* UInt32 firstPmglChunkNumber = */ ReadUInt32(); // Chunk number of first PMGL (listing) chunk
|
|
330
|
+
/* UInt32 lastPmglChunkNumber = */ ReadUInt32(); // Chunk number of last PMGL (listing) chunk
|
|
331
|
+
ReadUInt32(); // -1 (unknown)
|
|
332
|
+
UInt32 numDirChunks = ReadUInt32(); // Number of directory chunks (total)
|
|
333
|
+
/* UInt32 windowsLangId = */ ReadUInt32();
|
|
334
|
+
ReadGUID(g); // {5D02926A-212E-11D0-9DF9-00A0C922E6EC}
|
|
335
|
+
ReadUInt32(); // 0x54 (This is the length again)
|
|
336
|
+
ReadUInt32(); // -1 (unknown)
|
|
337
|
+
ReadUInt32(); // -1 (unknown)
|
|
338
|
+
ReadUInt32(); // -1 (unknown)
|
|
339
|
+
|
|
340
|
+
for (UInt32 ci = 0; ci < numDirChunks; ci++)
|
|
341
|
+
{
|
|
342
|
+
UInt64 chunkPos = _inBuffer.GetProcessedSize();
|
|
343
|
+
if (ReadUInt32() == NHeader::kPmglSignature)
|
|
344
|
+
{
|
|
345
|
+
// The quickref area is written backwards from the end of the chunk.
|
|
346
|
+
// One quickref entry exists for every n entries in the file, where n
|
|
347
|
+
// is calculated as 1 + (1 << quickref density). So for density = 2, n = 5.
|
|
348
|
+
|
|
349
|
+
UInt32 quickrefLength = ReadUInt32(); // Length of free space and/or quickref area at end of directory chunk
|
|
350
|
+
if (quickrefLength > dirChunkSize || quickrefLength < 2)
|
|
351
|
+
return S_FALSE;
|
|
352
|
+
ReadUInt32(); // Always 0
|
|
353
|
+
ReadUInt32(); // Chunk number of previous listing chunk when reading
|
|
354
|
+
// directory in sequence (-1 if this is the first listing chunk)
|
|
355
|
+
ReadUInt32(); // Chunk number of next listing chunk when reading
|
|
356
|
+
// directory in sequence (-1 if this is the last listing chunk)
|
|
357
|
+
int numItems = 0;
|
|
358
|
+
for (;;)
|
|
359
|
+
{
|
|
360
|
+
UInt64 offset = _inBuffer.GetProcessedSize() - chunkPos;
|
|
361
|
+
UInt32 offsetLimit = dirChunkSize - quickrefLength;
|
|
362
|
+
if (offset > offsetLimit)
|
|
363
|
+
return S_FALSE;
|
|
364
|
+
if (offset == offsetLimit)
|
|
365
|
+
break;
|
|
366
|
+
RINOK(ReadDirEntry(database));
|
|
367
|
+
numItems++;
|
|
368
|
+
}
|
|
369
|
+
Skip(quickrefLength - 2);
|
|
370
|
+
if (ReadUInt16() != numItems)
|
|
371
|
+
return S_FALSE;
|
|
372
|
+
}
|
|
373
|
+
else
|
|
374
|
+
Skip(dirChunkSize - 4);
|
|
375
|
+
}
|
|
376
|
+
return S_OK;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
HRESULT CInArchive::OpenHelp2(IInStream *inStream, CDatabase &database)
|
|
380
|
+
{
|
|
381
|
+
if (ReadUInt32() != 1) // version
|
|
382
|
+
return S_FALSE;
|
|
383
|
+
if (ReadUInt32() != 0x28) // Location of header section table
|
|
384
|
+
return S_FALSE;
|
|
385
|
+
UInt32 numHeaderSections = ReadUInt32();
|
|
386
|
+
const int kNumHeaderSectionsMax = 5;
|
|
387
|
+
if (numHeaderSections != kNumHeaderSectionsMax)
|
|
388
|
+
return S_FALSE;
|
|
389
|
+
ReadUInt32(); // Length of post-header table
|
|
390
|
+
GUID g;
|
|
391
|
+
ReadGUID(g); // {0A9007C1-4076-11D3-8789-0000F8105754}
|
|
392
|
+
|
|
393
|
+
// header section table
|
|
394
|
+
UInt64 sectionOffsets[kNumHeaderSectionsMax];
|
|
395
|
+
UInt64 sectionSizes[kNumHeaderSectionsMax];
|
|
396
|
+
UInt32 i;
|
|
397
|
+
for (i = 0; i < numHeaderSections; i++)
|
|
398
|
+
{
|
|
399
|
+
sectionOffsets[i] = ReadUInt64();
|
|
400
|
+
sectionSizes[i] = ReadUInt64();
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Post-Header
|
|
404
|
+
ReadUInt32(); // 2
|
|
405
|
+
ReadUInt32(); // 0x98: offset to CAOL from beginning of post-header)
|
|
406
|
+
// ----- Directory information
|
|
407
|
+
ReadUInt64(); // Chunk number of top-level AOLI chunk in directory, or -1
|
|
408
|
+
ReadUInt64(); // Chunk number of first AOLL chunk in directory
|
|
409
|
+
ReadUInt64(); // Chunk number of last AOLL chunk in directory
|
|
410
|
+
ReadUInt64(); // 0 (unknown)
|
|
411
|
+
ReadUInt32(); // $2000 (Directory chunk size of directory)
|
|
412
|
+
ReadUInt32(); // Quickref density for main directory, usually 2
|
|
413
|
+
ReadUInt32(); // 0 (unknown)
|
|
414
|
+
ReadUInt32(); // Depth of main directory index tree
|
|
415
|
+
// 1 there is no index, 2 if there is one level of AOLI chunks.
|
|
416
|
+
ReadUInt64(); // 0 (unknown)
|
|
417
|
+
UInt64 numDirEntries = ReadUInt64(); // Number of directory entries
|
|
418
|
+
// ----- Directory Index Information
|
|
419
|
+
ReadUInt64(); // -1 (unknown, probably chunk number of top-level AOLI in directory index)
|
|
420
|
+
ReadUInt64(); // Chunk number of first AOLL chunk in directory index
|
|
421
|
+
ReadUInt64(); // Chunk number of last AOLL chunk in directory index
|
|
422
|
+
ReadUInt64(); // 0 (unknown)
|
|
423
|
+
ReadUInt32(); // $200 (Directory chunk size of directory index)
|
|
424
|
+
ReadUInt32(); // Quickref density for directory index, usually 2
|
|
425
|
+
ReadUInt32(); // 0 (unknown)
|
|
426
|
+
ReadUInt32(); // Depth of directory index index tree.
|
|
427
|
+
ReadUInt64(); // Possibly flags -- sometimes 1, sometimes 0.
|
|
428
|
+
ReadUInt64(); // Number of directory index entries (same as number of AOLL
|
|
429
|
+
// chunks in main directory)
|
|
430
|
+
|
|
431
|
+
// (The obvious guess for the following two fields, which recur in a number
|
|
432
|
+
// of places, is they are maximum sizes for the directory and directory index.
|
|
433
|
+
// However, I have seen no direct evidence that this is the case.)
|
|
434
|
+
|
|
435
|
+
ReadUInt32(); // $100000 (Same as field following chunk size in directory)
|
|
436
|
+
ReadUInt32(); // $20000 (Same as field following chunk size in directory index)
|
|
437
|
+
|
|
438
|
+
ReadUInt64(); // 0 (unknown)
|
|
439
|
+
if (ReadUInt32() != NHeader::kCaolSignature)
|
|
440
|
+
return S_FALSE;
|
|
441
|
+
if (ReadUInt32() != 2) // (Most likely a version number)
|
|
442
|
+
return S_FALSE;
|
|
443
|
+
UInt32 caolLength = ReadUInt32(); // $50 (Length of the CAOL section, which includes the ITSF section)
|
|
444
|
+
if (caolLength >= 0x2C)
|
|
445
|
+
{
|
|
446
|
+
/* UInt32 c7 = */ ReadUInt16(); // Unknown. Remains the same when identical files are built.
|
|
447
|
+
// Does not appear to be a checksum. Many files have
|
|
448
|
+
// 'HH' (HTML Help?) here, indicating this may be a compiler ID
|
|
449
|
+
// field. But at least one ITOL/ITLS compiler does not set this
|
|
450
|
+
// field to a constant value.
|
|
451
|
+
ReadUInt16(); // 0 (Unknown. Possibly part of 00A4 field)
|
|
452
|
+
ReadUInt32(); // Unknown. Two values have been seen -- $43ED, and 0.
|
|
453
|
+
ReadUInt32(); // $2000 (Directory chunk size of directory)
|
|
454
|
+
ReadUInt32(); // $200 (Directory chunk size of directory index)
|
|
455
|
+
ReadUInt32(); // $100000 (Same as field following chunk size in directory)
|
|
456
|
+
ReadUInt32(); // $20000 (Same as field following chunk size in directory index)
|
|
457
|
+
ReadUInt32(); // 0 (unknown)
|
|
458
|
+
ReadUInt32(); // 0 (Unknown)
|
|
459
|
+
if (caolLength == 0x2C)
|
|
460
|
+
{
|
|
461
|
+
database.ContentOffset = 0;
|
|
462
|
+
database.NewFormat = true;
|
|
463
|
+
}
|
|
464
|
+
else if (caolLength == 0x50)
|
|
465
|
+
{
|
|
466
|
+
ReadUInt32(); // 0 (Unknown)
|
|
467
|
+
if (ReadUInt32() != NHeader::kItsfSignature)
|
|
468
|
+
return S_FALSE;
|
|
469
|
+
if (ReadUInt32() != 4) // $4 (Version number -- CHM uses 3)
|
|
470
|
+
return S_FALSE;
|
|
471
|
+
if (ReadUInt32() != 0x20) // $20 (length of ITSF)
|
|
472
|
+
return S_FALSE;
|
|
473
|
+
UInt32 unknown = ReadUInt32();
|
|
474
|
+
if (unknown != 0 && unknown != 1) // = 0 for some HxW files, 1 in other cases;
|
|
475
|
+
return S_FALSE;
|
|
476
|
+
database.ContentOffset = _startPosition + ReadUInt64();
|
|
477
|
+
/* UInt32 timeStamp = */ ReadUInt32();
|
|
478
|
+
// A timestamp of some sort.
|
|
479
|
+
// Considered as a big-endian DWORD, it appears to contain
|
|
480
|
+
// seconds (MSB) and fractional seconds (second byte).
|
|
481
|
+
// The third and fourth bytes may contain even more fractional
|
|
482
|
+
// bits. The 4 least significant bits in the last byte are constant.
|
|
483
|
+
/* UInt32 lang = */ ReadUInt32(); // BE?
|
|
484
|
+
}
|
|
485
|
+
else
|
|
486
|
+
return S_FALSE;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/*
|
|
490
|
+
// Section 0
|
|
491
|
+
ReadChunk(inStream, _startPosition + sectionOffsets[0], sectionSizes[0]);
|
|
492
|
+
if (sectionSizes[0] != 0x18)
|
|
493
|
+
return S_FALSE;
|
|
494
|
+
ReadUInt32(); // unknown: 01FE
|
|
495
|
+
ReadUInt32(); // unknown: 0
|
|
496
|
+
UInt64 fileSize = ReadUInt64();
|
|
497
|
+
ReadUInt32(); // unknown: 0
|
|
498
|
+
ReadUInt32(); // unknown: 0
|
|
499
|
+
*/
|
|
500
|
+
|
|
501
|
+
// Section 1: The Directory Listing
|
|
502
|
+
ReadChunk(inStream, _startPosition + sectionOffsets[1], sectionSizes[1]);
|
|
503
|
+
if (ReadUInt32() != NHeader::kIfcmSignature)
|
|
504
|
+
return S_FALSE;
|
|
505
|
+
if (ReadUInt32() != 1) // (probably a version number)
|
|
506
|
+
return S_FALSE;
|
|
507
|
+
UInt32 dirChunkSize = ReadUInt32(); // $2000
|
|
508
|
+
if (dirChunkSize < 64)
|
|
509
|
+
return S_FALSE;
|
|
510
|
+
ReadUInt32(); // $100000 (unknown)
|
|
511
|
+
ReadUInt32(); // -1 (unknown)
|
|
512
|
+
ReadUInt32(); // -1 (unknown)
|
|
513
|
+
UInt32 numDirChunks = ReadUInt32();
|
|
514
|
+
ReadUInt32(); // 0 (unknown, probably high word of above)
|
|
515
|
+
|
|
516
|
+
for (UInt32 ci = 0; ci < numDirChunks; ci++)
|
|
517
|
+
{
|
|
518
|
+
UInt64 chunkPos = _inBuffer.GetProcessedSize();
|
|
519
|
+
if (ReadUInt32() == NHeader::kAollSignature)
|
|
520
|
+
{
|
|
521
|
+
UInt32 quickrefLength = ReadUInt32(); // Length of quickref area at end of directory chunk
|
|
522
|
+
if (quickrefLength > dirChunkSize || quickrefLength < 2)
|
|
523
|
+
return S_FALSE;
|
|
524
|
+
ReadUInt64(); // Directory chunk number
|
|
525
|
+
// This must match physical position in file, that is
|
|
526
|
+
// the chunk size times the chunk number must be the
|
|
527
|
+
// offset from the end of the directory header.
|
|
528
|
+
ReadUInt64(); // Chunk number of previous listing chunk when reading
|
|
529
|
+
// directory in sequence (-1 if first listing chunk)
|
|
530
|
+
ReadUInt64(); // Chunk number of next listing chunk when reading
|
|
531
|
+
// directory in sequence (-1 if last listing chunk)
|
|
532
|
+
ReadUInt64(); // Number of first listing entry in this chunk
|
|
533
|
+
ReadUInt32(); // 1 (unknown -- other values have also been seen here)
|
|
534
|
+
ReadUInt32(); // 0 (unknown)
|
|
535
|
+
|
|
536
|
+
int numItems = 0;
|
|
537
|
+
for (;;)
|
|
538
|
+
{
|
|
539
|
+
UInt64 offset = _inBuffer.GetProcessedSize() - chunkPos;
|
|
540
|
+
UInt32 offsetLimit = dirChunkSize - quickrefLength;
|
|
541
|
+
if (offset > offsetLimit)
|
|
542
|
+
return S_FALSE;
|
|
543
|
+
if (offset == offsetLimit)
|
|
544
|
+
break;
|
|
545
|
+
if (database.NewFormat)
|
|
546
|
+
{
|
|
547
|
+
UInt16 nameLength = ReadUInt16();
|
|
548
|
+
if (nameLength == 0)
|
|
549
|
+
return S_FALSE;
|
|
550
|
+
UString name;
|
|
551
|
+
ReadUString((int)nameLength, name);
|
|
552
|
+
AString s;
|
|
553
|
+
ConvertUnicodeToUTF8(name, s);
|
|
554
|
+
Byte b = ReadByte();
|
|
555
|
+
s += ' ';
|
|
556
|
+
PrintByte(b, s);
|
|
557
|
+
s += ' ';
|
|
558
|
+
UInt64 len = ReadEncInt();
|
|
559
|
+
// then number of items ?
|
|
560
|
+
// then length ?
|
|
561
|
+
// then some data (binary encoding?)
|
|
562
|
+
while (len-- != 0)
|
|
563
|
+
{
|
|
564
|
+
b = ReadByte();
|
|
565
|
+
PrintByte(b, s);
|
|
566
|
+
}
|
|
567
|
+
database.NewFormatString += s;
|
|
568
|
+
database.NewFormatString += "\r\n";
|
|
569
|
+
}
|
|
570
|
+
else
|
|
571
|
+
{
|
|
572
|
+
RINOK(ReadDirEntry(database));
|
|
573
|
+
}
|
|
574
|
+
numItems++;
|
|
575
|
+
}
|
|
576
|
+
Skip(quickrefLength - 2);
|
|
577
|
+
if (ReadUInt16() != numItems)
|
|
578
|
+
return S_FALSE;
|
|
579
|
+
if (numItems > numDirEntries)
|
|
580
|
+
return S_FALSE;
|
|
581
|
+
numDirEntries -= numItems;
|
|
582
|
+
}
|
|
583
|
+
else
|
|
584
|
+
Skip(dirChunkSize - 4);
|
|
585
|
+
}
|
|
586
|
+
return numDirEntries == 0 ? S_OK : S_FALSE;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
HRESULT CInArchive::DecompressStream(IInStream *inStream, const CDatabase &database, const AString &name)
|
|
590
|
+
{
|
|
591
|
+
int index = database.FindItem(name);
|
|
592
|
+
if (index < 0)
|
|
593
|
+
return S_FALSE;
|
|
594
|
+
const CItem &item = database.Items[index];
|
|
595
|
+
_chunkSize = item.Size;
|
|
596
|
+
return ReadChunk(inStream, database.ContentOffset + item.Offset, item.Size);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
#define DATA_SPACE "::DataSpace/"
|
|
601
|
+
static const char *kNameList = DATA_SPACE "NameList";
|
|
602
|
+
static const char *kStorage = DATA_SPACE "Storage/";
|
|
603
|
+
static const char *kContent = "Content";
|
|
604
|
+
static const char *kControlData = "ControlData";
|
|
605
|
+
static const char *kSpanInfo = "SpanInfo";
|
|
606
|
+
static const char *kTransform = "Transform/";
|
|
607
|
+
static const char *kResetTable = "/InstanceData/ResetTable";
|
|
608
|
+
static const char *kTransformList = "List";
|
|
609
|
+
|
|
610
|
+
static AString GetSectionPrefix(const AString &name)
|
|
611
|
+
{
|
|
612
|
+
return AString(kStorage) + name + AString("/");
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
|
|
616
|
+
|
|
617
|
+
static int CompareFiles(const int *p1, const int *p2, void *param)
|
|
618
|
+
{
|
|
619
|
+
const CObjectVector<CItem> &items = *(const CObjectVector<CItem> *)param;
|
|
620
|
+
const CItem &item1 = items[*p1];
|
|
621
|
+
const CItem &item2 = items[*p2];
|
|
622
|
+
bool isDir1 = item1.IsDir();
|
|
623
|
+
bool isDir2 = item2.IsDir();
|
|
624
|
+
if (isDir1 && !isDir2)
|
|
625
|
+
return -1;
|
|
626
|
+
if (isDir2)
|
|
627
|
+
{
|
|
628
|
+
if (isDir1)
|
|
629
|
+
return MyCompare(*p1, *p2);
|
|
630
|
+
return 1;
|
|
631
|
+
}
|
|
632
|
+
RINOZ(MyCompare(item1.Section, item2.Section));
|
|
633
|
+
RINOZ(MyCompare(item1.Offset, item2.Offset));
|
|
634
|
+
RINOZ(MyCompare(item1.Size, item2.Size));
|
|
635
|
+
return MyCompare(*p1, *p2);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
void CFilesDatabase::SetIndices()
|
|
639
|
+
{
|
|
640
|
+
for (int i = 0; i < Items.Size(); i++)
|
|
641
|
+
{
|
|
642
|
+
const CItem &item = Items[i];
|
|
643
|
+
if (item.IsUserItem() && item.Name.Length() != 1)
|
|
644
|
+
Indices.Add(i);
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
void CFilesDatabase::Sort()
|
|
649
|
+
{
|
|
650
|
+
Indices.Sort(CompareFiles, (void *)&Items);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
bool CFilesDatabase::Check()
|
|
654
|
+
{
|
|
655
|
+
UInt64 maxPos = 0;
|
|
656
|
+
UInt64 prevSection = 0;
|
|
657
|
+
for(int i = 0; i < Indices.Size(); i++)
|
|
658
|
+
{
|
|
659
|
+
const CItem &item = Items[Indices[i]];
|
|
660
|
+
if (item.Section == 0 || item.IsDir())
|
|
661
|
+
continue;
|
|
662
|
+
if (item.Section != prevSection)
|
|
663
|
+
{
|
|
664
|
+
prevSection = item.Section;
|
|
665
|
+
maxPos = 0;
|
|
666
|
+
continue;
|
|
667
|
+
}
|
|
668
|
+
if (item.Offset < maxPos)
|
|
669
|
+
return false;
|
|
670
|
+
maxPos = item.Offset + item.Size;
|
|
671
|
+
if (maxPos < item.Offset)
|
|
672
|
+
return false;
|
|
673
|
+
}
|
|
674
|
+
return true;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
HRESULT CInArchive::OpenHighLevel(IInStream *inStream, CFilesDatabase &database)
|
|
678
|
+
{
|
|
679
|
+
{
|
|
680
|
+
// The NameList file
|
|
681
|
+
RINOK(DecompressStream(inStream, database, kNameList));
|
|
682
|
+
/* UInt16 length = */ ReadUInt16();
|
|
683
|
+
UInt16 numSections = ReadUInt16();
|
|
684
|
+
for (int i = 0; i < numSections; i++)
|
|
685
|
+
{
|
|
686
|
+
CSectionInfo section;
|
|
687
|
+
UInt16 nameLength = ReadUInt16();
|
|
688
|
+
UString name;
|
|
689
|
+
ReadUString(nameLength, name);
|
|
690
|
+
if (ReadUInt16() != 0)
|
|
691
|
+
return S_FALSE;
|
|
692
|
+
if (!ConvertUnicodeToUTF8(name, section.Name))
|
|
693
|
+
return S_FALSE;
|
|
694
|
+
database.Sections.Add(section);
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
int i;
|
|
699
|
+
for (i = 1; i < database.Sections.Size(); i++)
|
|
700
|
+
{
|
|
701
|
+
CSectionInfo §ion = database.Sections[i];
|
|
702
|
+
AString sectionPrefix = GetSectionPrefix(section.Name);
|
|
703
|
+
{
|
|
704
|
+
// Content
|
|
705
|
+
int index = database.FindItem(sectionPrefix + kContent);
|
|
706
|
+
if (index < 0)
|
|
707
|
+
return S_FALSE;
|
|
708
|
+
const CItem &item = database.Items[index];
|
|
709
|
+
section.Offset = item.Offset;
|
|
710
|
+
section.CompressedSize = item.Size;
|
|
711
|
+
}
|
|
712
|
+
AString transformPrefix = sectionPrefix + kTransform;
|
|
713
|
+
if (database.Help2Format)
|
|
714
|
+
{
|
|
715
|
+
// Transform List
|
|
716
|
+
RINOK(DecompressStream(inStream, database, transformPrefix + kTransformList));
|
|
717
|
+
if ((_chunkSize & 0xF) != 0)
|
|
718
|
+
return S_FALSE;
|
|
719
|
+
int numGuids = (int)(_chunkSize / 0x10);
|
|
720
|
+
if (numGuids < 1)
|
|
721
|
+
return S_FALSE;
|
|
722
|
+
for (int i = 0; i < numGuids; i++)
|
|
723
|
+
{
|
|
724
|
+
CMethodInfo method;
|
|
725
|
+
ReadGUID(method.Guid);
|
|
726
|
+
section.Methods.Add(method);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
else
|
|
730
|
+
{
|
|
731
|
+
CMethodInfo method;
|
|
732
|
+
method.Guid = kChmLzxGuid;
|
|
733
|
+
section.Methods.Add(method);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
{
|
|
737
|
+
// Control Data
|
|
738
|
+
RINOK(DecompressStream(inStream, database, sectionPrefix + kControlData));
|
|
739
|
+
for (int mi = 0; mi < section.Methods.Size(); mi++)
|
|
740
|
+
{
|
|
741
|
+
CMethodInfo &method = section.Methods[mi];
|
|
742
|
+
UInt32 numDWORDS = ReadUInt32();
|
|
743
|
+
if (method.IsLzx())
|
|
744
|
+
{
|
|
745
|
+
if (numDWORDS < 5)
|
|
746
|
+
return S_FALSE;
|
|
747
|
+
if (ReadUInt32() != NHeader::kLzxcSignature)
|
|
748
|
+
return S_FALSE;
|
|
749
|
+
CLzxInfo &li = method.LzxInfo;
|
|
750
|
+
li.Version = ReadUInt32();
|
|
751
|
+
if (li.Version != 2 && li.Version != 3)
|
|
752
|
+
return S_FALSE;
|
|
753
|
+
li.ResetInterval = ReadUInt32();
|
|
754
|
+
li.WindowSize = ReadUInt32();
|
|
755
|
+
li.CacheSize = ReadUInt32();
|
|
756
|
+
if (
|
|
757
|
+
li.ResetInterval != 1 &&
|
|
758
|
+
li.ResetInterval != 2 &&
|
|
759
|
+
li.ResetInterval != 4 &&
|
|
760
|
+
li.ResetInterval != 8 &&
|
|
761
|
+
li.ResetInterval != 16 &&
|
|
762
|
+
li.ResetInterval != 32 &&
|
|
763
|
+
li.ResetInterval != 64)
|
|
764
|
+
return S_FALSE;
|
|
765
|
+
if (
|
|
766
|
+
li.WindowSize != 1 &&
|
|
767
|
+
li.WindowSize != 2 &&
|
|
768
|
+
li.WindowSize != 4 &&
|
|
769
|
+
li.WindowSize != 8 &&
|
|
770
|
+
li.WindowSize != 16 &&
|
|
771
|
+
li.WindowSize != 32 &&
|
|
772
|
+
li.WindowSize != 64)
|
|
773
|
+
return S_FALSE;
|
|
774
|
+
numDWORDS -= 5;
|
|
775
|
+
while (numDWORDS-- != 0)
|
|
776
|
+
ReadUInt32();
|
|
777
|
+
}
|
|
778
|
+
else
|
|
779
|
+
{
|
|
780
|
+
UInt32 numBytes = numDWORDS * 4;
|
|
781
|
+
method.ControlData.SetCapacity(numBytes);
|
|
782
|
+
ReadBytes(method.ControlData, numBytes);
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
{
|
|
788
|
+
// SpanInfo
|
|
789
|
+
RINOK(DecompressStream(inStream, database, sectionPrefix + kSpanInfo));
|
|
790
|
+
section.UncompressedSize = ReadUInt64();
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
// read ResetTable for LZX
|
|
794
|
+
for (int mi = 0; mi < section.Methods.Size(); mi++)
|
|
795
|
+
{
|
|
796
|
+
CMethodInfo &method = section.Methods[mi];
|
|
797
|
+
if (method.IsLzx())
|
|
798
|
+
{
|
|
799
|
+
// ResetTable;
|
|
800
|
+
RINOK(DecompressStream(inStream, database, transformPrefix +
|
|
801
|
+
method.GetGuidString() + kResetTable));
|
|
802
|
+
CResetTable &rt = method.LzxInfo.ResetTable;
|
|
803
|
+
if (_chunkSize < 4)
|
|
804
|
+
{
|
|
805
|
+
if (_chunkSize != 0)
|
|
806
|
+
return S_FALSE;
|
|
807
|
+
// ResetTable is empty in .chw files
|
|
808
|
+
if (section.UncompressedSize != 0)
|
|
809
|
+
return S_FALSE;
|
|
810
|
+
rt.UncompressedSize = 0;
|
|
811
|
+
rt.CompressedSize = 0;
|
|
812
|
+
rt.BlockSize = 0;
|
|
813
|
+
}
|
|
814
|
+
else
|
|
815
|
+
{
|
|
816
|
+
UInt32 ver = ReadUInt32(); // 2 unknown (possibly a version number)
|
|
817
|
+
if (ver != 2 && ver != 3)
|
|
818
|
+
return S_FALSE;
|
|
819
|
+
UInt32 numEntries = ReadUInt32();
|
|
820
|
+
if (ReadUInt32() != 8) // Size of table entry (bytes)
|
|
821
|
+
return S_FALSE;
|
|
822
|
+
if (ReadUInt32() != 0x28) // Length of table header
|
|
823
|
+
return S_FALSE;
|
|
824
|
+
rt.UncompressedSize = ReadUInt64();
|
|
825
|
+
rt.CompressedSize = ReadUInt64();
|
|
826
|
+
rt.BlockSize = ReadUInt64(); // 0x8000 block size for locations below
|
|
827
|
+
if (rt.BlockSize != 0x8000)
|
|
828
|
+
return S_FALSE;
|
|
829
|
+
rt.ResetOffsets.Reserve(numEntries);
|
|
830
|
+
for (UInt32 i = 0; i < numEntries; i++)
|
|
831
|
+
rt.ResetOffsets.Add(ReadUInt64());
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
database.SetIndices();
|
|
838
|
+
database.Sort();
|
|
839
|
+
return database.Check() ? S_OK : S_FALSE;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
HRESULT CInArchive::Open2(IInStream *inStream,
|
|
843
|
+
const UInt64 *searchHeaderSizeLimit,
|
|
844
|
+
CFilesDatabase &database)
|
|
845
|
+
{
|
|
846
|
+
database.Clear();
|
|
847
|
+
|
|
848
|
+
RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &_startPosition));
|
|
849
|
+
|
|
850
|
+
database.Help2Format = false;
|
|
851
|
+
const UInt32 chmVersion = 3;
|
|
852
|
+
{
|
|
853
|
+
if (!_inBuffer.Create(1 << 14))
|
|
854
|
+
return E_OUTOFMEMORY;
|
|
855
|
+
_inBuffer.SetStream(inStream);
|
|
856
|
+
_inBuffer.Init();
|
|
857
|
+
UInt64 value = 0;
|
|
858
|
+
const int kSignatureSize = 8;
|
|
859
|
+
UInt64 hxsSignature = NHeader::GetHxsSignature();
|
|
860
|
+
UInt64 chmSignature = ((UInt64)chmVersion << 32)| NHeader::kItsfSignature;
|
|
861
|
+
UInt64 limit = 1 << 18;
|
|
862
|
+
if (searchHeaderSizeLimit)
|
|
863
|
+
if (limit > *searchHeaderSizeLimit)
|
|
864
|
+
limit = *searchHeaderSizeLimit;
|
|
865
|
+
|
|
866
|
+
for (;;)
|
|
867
|
+
{
|
|
868
|
+
Byte b;
|
|
869
|
+
if (!_inBuffer.ReadByte(b))
|
|
870
|
+
return S_FALSE;
|
|
871
|
+
value >>= 8;
|
|
872
|
+
value |= ((UInt64)b) << ((kSignatureSize - 1) * 8);
|
|
873
|
+
if (_inBuffer.GetProcessedSize() >= kSignatureSize)
|
|
874
|
+
{
|
|
875
|
+
if (value == chmSignature)
|
|
876
|
+
break;
|
|
877
|
+
if (value == hxsSignature)
|
|
878
|
+
{
|
|
879
|
+
database.Help2Format = true;
|
|
880
|
+
break;
|
|
881
|
+
}
|
|
882
|
+
if (_inBuffer.GetProcessedSize() > limit)
|
|
883
|
+
return S_FALSE;
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
_startPosition += _inBuffer.GetProcessedSize() - kSignatureSize;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
if (database.Help2Format)
|
|
890
|
+
{
|
|
891
|
+
RINOK(OpenHelp2(inStream, database));
|
|
892
|
+
if (database.NewFormat)
|
|
893
|
+
return S_OK;
|
|
894
|
+
}
|
|
895
|
+
else
|
|
896
|
+
{
|
|
897
|
+
RINOK(OpenChm(inStream, database));
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
#ifndef CHM_LOW
|
|
901
|
+
try
|
|
902
|
+
{
|
|
903
|
+
HRESULT res = OpenHighLevel(inStream, database);
|
|
904
|
+
if (res == S_FALSE)
|
|
905
|
+
{
|
|
906
|
+
database.HighLevelClear();
|
|
907
|
+
return S_OK;
|
|
908
|
+
}
|
|
909
|
+
RINOK(res);
|
|
910
|
+
database.LowLevel = false;
|
|
911
|
+
}
|
|
912
|
+
catch(...)
|
|
913
|
+
{
|
|
914
|
+
return S_OK;
|
|
915
|
+
}
|
|
916
|
+
#endif
|
|
917
|
+
return S_OK;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
HRESULT CInArchive::Open(IInStream *inStream,
|
|
921
|
+
const UInt64 *searchHeaderSizeLimit,
|
|
922
|
+
CFilesDatabase &database)
|
|
923
|
+
{
|
|
924
|
+
try
|
|
925
|
+
{
|
|
926
|
+
HRESULT res = Open2(inStream, searchHeaderSizeLimit, database);
|
|
927
|
+
_inBuffer.ReleaseStream();
|
|
928
|
+
return res;
|
|
929
|
+
}
|
|
930
|
+
catch(...)
|
|
931
|
+
{
|
|
932
|
+
_inBuffer.ReleaseStream();
|
|
933
|
+
throw;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
}}
|