seven-zip 1.4.2 → 1.7.0.rc1
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 +4 -4
- data/.github/workflows/rake.yml +49 -0
- data/.github/workflows/release.yml +21 -0
- data/README.md +13 -2
- data/Rakefile +2 -0
- data/ext/p7zip/C/7zBuf.h +4 -8
- data/ext/p7zip/C/7zBuf2.c +9 -3
- data/ext/p7zip/C/7zCrc.c +84 -32
- data/ext/p7zip/C/7zCrc.h +2 -2
- data/ext/p7zip/C/7zCrcOpt.c +89 -8
- data/ext/p7zip/C/7zStream.c +4 -2
- data/ext/p7zip/C/{Types.h → 7zTypes.h} +8 -6
- data/ext/p7zip/C/7zVersion.h +21 -6
- data/ext/p7zip/C/Aes.c +28 -15
- data/ext/p7zip/C/Aes.h +2 -2
- data/ext/p7zip/C/Alloc.c +60 -12
- data/ext/p7zip/C/Alloc.h +6 -7
- data/ext/p7zip/C/Bcj2.c +256 -0
- data/ext/p7zip/C/Bcj2.h +146 -0
- data/ext/p7zip/C/Bcj2Enc.c +312 -0
- data/ext/p7zip/C/Blake2.h +48 -0
- data/ext/p7zip/C/Blake2s.c +244 -0
- data/ext/p7zip/C/Bra.c +2 -0
- data/ext/p7zip/C/Bra.h +4 -8
- data/ext/p7zip/C/Bra86.c +48 -51
- data/ext/p7zip/C/BraIA64.c +3 -1
- data/ext/p7zip/C/BwtSort.c +3 -4
- data/ext/p7zip/C/BwtSort.h +4 -8
- data/ext/p7zip/C/Compiler.h +32 -0
- data/ext/p7zip/C/CpuArch.c +50 -7
- data/ext/p7zip/C/CpuArch.h +112 -41
- data/ext/p7zip/C/Delta.c +2 -0
- data/ext/p7zip/C/Delta.h +4 -8
- data/ext/p7zip/C/HuffEnc.c +8 -6
- data/ext/p7zip/C/HuffEnc.h +4 -8
- data/ext/p7zip/C/LzFind.c +391 -108
- data/ext/p7zip/C/LzFind.h +20 -18
- data/ext/p7zip/C/LzFindMt.c +100 -90
- data/ext/p7zip/C/LzFindMt.h +4 -8
- data/ext/p7zip/C/LzHash.h +23 -20
- data/ext/p7zip/C/Lzma2Dec.c +48 -26
- data/ext/p7zip/C/Lzma2Dec.h +4 -8
- data/ext/p7zip/C/Lzma2Enc.c +58 -15
- data/ext/p7zip/C/Lzma2Enc.h +3 -7
- data/ext/p7zip/C/{LzmaUtil/Lzma86Enc.h → Lzma86.h} +47 -14
- data/ext/p7zip/C/{LzmaUtil/Lzma86Dec.c → Lzma86Dec.c} +6 -13
- data/ext/p7zip/C/{LzmaUtil/Lzma86Enc.c → Lzma86Enc.c} +8 -15
- data/ext/p7zip/C/LzmaDec.c +180 -79
- data/ext/p7zip/C/LzmaDec.h +4 -8
- data/ext/p7zip/C/LzmaEnc.c +230 -147
- data/ext/p7zip/C/LzmaEnc.h +6 -8
- data/ext/p7zip/C/MtCoder.c +3 -3
- data/ext/p7zip/C/Ppmd.h +5 -5
- data/ext/p7zip/C/Ppmd7.c +9 -7
- data/ext/p7zip/C/Ppmd7.h +3 -3
- data/ext/p7zip/C/Ppmd7Dec.c +2 -0
- data/ext/p7zip/C/Ppmd7Enc.c +4 -2
- data/ext/p7zip/C/Ppmd8.c +34 -31
- data/ext/p7zip/C/Ppmd8.h +5 -1
- data/ext/p7zip/C/Ppmd8Dec.c +2 -0
- data/ext/p7zip/C/Ppmd8Enc.c +2 -0
- data/ext/p7zip/C/Precomp.h +10 -0
- data/ext/p7zip/C/RotateDefs.h +11 -1
- data/ext/p7zip/C/Sha1.c +340 -0
- data/ext/p7zip/C/Sha1.h +38 -0
- data/ext/p7zip/C/Sha256.c +107 -63
- data/ext/p7zip/C/Sha256.h +2 -2
- data/ext/p7zip/C/Sort.c +59 -11
- data/ext/p7zip/C/Sort.h +8 -10
- data/ext/p7zip/C/Threads.h +1 -1
- data/ext/p7zip/C/Xz.c +7 -5
- data/ext/p7zip/C/Xz.h +40 -17
- data/ext/p7zip/C/XzCrc64.c +69 -16
- data/ext/p7zip/C/XzCrc64.h +2 -2
- data/ext/p7zip/C/XzCrc64Opt.c +69 -0
- data/ext/p7zip/C/XzDec.c +93 -55
- data/ext/p7zip/C/XzEnc.c +206 -165
- data/ext/p7zip/C/XzEnc.h +23 -9
- data/ext/p7zip/C/XzIn.c +50 -43
- data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.h +37 -13
- data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.cpp +392 -181
- data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.h +29 -29
- data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.cpp +424 -212
- data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.h +53 -16
- data/ext/p7zip/CPP/7zip/Archive/7z/7zExtract.cpp +312 -174
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.cpp +74 -61
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.h +22 -19
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.cpp +505 -232
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.h +70 -16
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHandlerOut.cpp +602 -172
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.cpp +5 -0
- data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.h +54 -3
- data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.cpp +981 -616
- data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.h +275 -89
- data/ext/p7zip/CPP/7zip/Archive/7z/7zItem.h +77 -162
- data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.cpp +288 -238
- data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.h +189 -20
- data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.cpp +59 -49
- data/ext/p7zip/CPP/7zip/Archive/7z/7zRegister.cpp +12 -9
- data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.cpp +4 -6
- data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.h +5 -5
- data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.cpp +1743 -447
- data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.h +61 -10
- data/ext/p7zip/CPP/7zip/Archive/ApmHandler.cpp +84 -120
- data/ext/p7zip/CPP/7zip/Archive/ArHandler.cpp +854 -0
- data/ext/p7zip/CPP/7zip/Archive/ArchiveExports.cpp +48 -32
- data/ext/p7zip/CPP/7zip/Archive/ArjHandler.cpp +519 -340
- data/ext/p7zip/CPP/7zip/Archive/Bz2Handler.cpp +223 -203
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.cpp +50 -139
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.h +17 -18
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.cpp +566 -234
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.h +10 -1
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.cpp +2 -2
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.h +12 -15
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.cpp +341 -122
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.h +81 -66
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabItem.h +17 -14
- data/ext/p7zip/CPP/7zip/Archive/Cab/CabRegister.cpp +10 -4
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.cpp +190 -83
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.h +7 -1
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.cpp +292 -174
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.h +73 -47
- data/ext/p7zip/CPP/7zip/Archive/ComHandler.cpp +886 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.cpp +994 -71
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.h +364 -101
- data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.cpp +7 -12
- data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.h +4 -3
- data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.cpp +6 -6
- data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.h +2 -2
- data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.cpp +77 -543
- data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.h +31 -51
- data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +18 -14
- data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.cpp +34 -7
- data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.h +5 -2
- data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.cpp +25 -24
- data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.h +8 -3
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.h +1 -0
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp +2 -2
- data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.h +5 -5
- data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -174
- data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.h +2 -14
- data/ext/p7zip/CPP/7zip/Archive/CpioHandler.cpp +506 -335
- data/ext/p7zip/CPP/7zip/Archive/CramfsHandler.cpp +227 -84
- data/ext/p7zip/CPP/7zip/Archive/DeflateProps.cpp +0 -115
- data/ext/p7zip/CPP/7zip/Archive/DeflateProps.h +0 -29
- data/ext/p7zip/CPP/7zip/Archive/DllExports2.cpp +63 -17
- data/ext/p7zip/CPP/7zip/Archive/DmgHandler.cpp +1007 -339
- data/ext/p7zip/CPP/7zip/Archive/ElfHandler.cpp +618 -177
- data/ext/p7zip/CPP/7zip/Archive/ExtHandler.cpp +2867 -0
- data/ext/p7zip/CPP/7zip/Archive/FatHandler.cpp +136 -76
- data/ext/p7zip/CPP/7zip/Archive/FlvHandler.cpp +132 -150
- data/ext/p7zip/CPP/7zip/Archive/GptHandler.cpp +405 -0
- data/ext/p7zip/CPP/7zip/Archive/GzHandler.cpp +560 -214
- data/ext/p7zip/CPP/7zip/Archive/HandlerCont.cpp +288 -0
- data/ext/p7zip/CPP/7zip/Archive/HandlerCont.h +116 -0
- data/ext/p7zip/CPP/7zip/Archive/HfsHandler.cpp +1880 -0
- data/ext/p7zip/CPP/7zip/Archive/IArchive.h +415 -51
- data/ext/p7zip/CPP/7zip/Archive/IhexHandler.cpp +497 -0
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.cpp +158 -71
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.h +2 -1
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.cpp +0 -9
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.h +8 -5
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.cpp +311 -91
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.h +101 -83
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoItem.h +48 -39
- data/ext/p7zip/CPP/7zip/Archive/Iso/IsoRegister.cpp +12 -4
- data/ext/p7zip/CPP/7zip/Archive/LzhHandler.cpp +127 -114
- data/ext/p7zip/CPP/7zip/Archive/LzmaHandler.cpp +264 -121
- data/ext/p7zip/CPP/7zip/Archive/MachoHandler.cpp +402 -242
- data/ext/p7zip/CPP/7zip/Archive/MbrHandler.cpp +56 -114
- data/ext/p7zip/CPP/7zip/Archive/MslzHandler.cpp +230 -90
- data/ext/p7zip/CPP/7zip/Archive/MubHandler.cpp +129 -153
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.cpp +179 -58
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.h +36 -7
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.cpp +407 -237
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.h +9 -16
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.cpp +5535 -1098
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.h +345 -81
- data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisRegister.cpp +11 -4
- data/ext/p7zip/CPP/7zip/Archive/NtfsHandler.cpp +1424 -434
- data/ext/p7zip/CPP/7zip/Archive/PeHandler.cpp +1831 -521
- data/ext/p7zip/CPP/7zip/Archive/PpmdHandler.cpp +50 -35
- data/ext/p7zip/CPP/7zip/Archive/QcowHandler.cpp +615 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/Rar5Handler.cpp +2746 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/Rar5Handler.h +411 -0
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.cpp +1241 -355
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.h +70 -20
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.h +38 -34
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.h +34 -16
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarVol.h +129 -0
- data/ext/p7zip/CPP/7zip/Archive/RpmHandler.cpp +641 -194
- data/ext/p7zip/CPP/7zip/Archive/SplitHandler.cpp +174 -181
- data/ext/p7zip/CPP/7zip/Archive/SquashfsHandler.cpp +237 -174
- data/ext/p7zip/CPP/7zip/Archive/SwfHandler.cpp +471 -192
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.cpp +350 -59
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.h +24 -7
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandlerOut.cpp +79 -27
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.cpp +5 -7
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.h +20 -44
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.cpp +279 -64
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.h +10 -1
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarItem.h +34 -8
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.cpp +145 -87
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.h +13 -5
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarRegister.cpp +14 -9
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.cpp +154 -27
- data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.h +10 -6
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.cpp +53 -128
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.h +6 -5
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.cpp +384 -119
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.h +40 -21
- data/ext/p7zip/CPP/7zip/Archive/UefiHandler.cpp +1618 -0
- data/ext/p7zip/CPP/7zip/Archive/VdiHandler.cpp +362 -0
- data/ext/p7zip/CPP/7zip/Archive/VhdHandler.cpp +438 -247
- data/ext/p7zip/CPP/7zip/Archive/VmdkHandler.cpp +1518 -0
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.cpp +837 -249
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.h +73 -47
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandlerOut.cpp +1614 -351
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.cpp +1519 -513
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.h +498 -139
- data/ext/p7zip/CPP/7zip/Archive/Wim/WimRegister.cpp +13 -9
- data/ext/p7zip/CPP/7zip/Archive/XarHandler.cpp +272 -128
- data/ext/p7zip/CPP/7zip/Archive/XzHandler.cpp +502 -253
- data/ext/p7zip/CPP/7zip/Archive/XzHandler.h +65 -0
- data/ext/p7zip/CPP/7zip/Archive/ZHandler.cpp +114 -39
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.cpp +118 -134
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.h +6 -0
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipCompressionMode.h +40 -20
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.cpp +541 -274
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.h +13 -40
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp +165 -254
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.h +70 -178
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.cpp +1934 -550
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.h +294 -63
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.cpp +160 -86
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.h +139 -110
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.cpp +177 -154
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.h +50 -18
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipRegister.cpp +18 -9
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.cpp +367 -201
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.h +11 -10
- data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile +2 -319
- data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.depend +0 -4962
- data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.list +1004 -259
- data/ext/p7zip/CPP/7zip/Common/CWrappers.cpp +26 -22
- data/ext/p7zip/CPP/7zip/Common/CWrappers.h +19 -14
- data/ext/p7zip/CPP/7zip/Common/CreateCoder.cpp +298 -130
- data/ext/p7zip/CPP/7zip/Common/CreateCoder.h +118 -34
- data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.cpp +24 -28
- data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.h +5 -5
- data/ext/p7zip/CPP/7zip/Common/FileStreams.cpp +268 -65
- data/ext/p7zip/CPP/7zip/Common/FileStreams.h +70 -33
- data/ext/p7zip/CPP/7zip/Common/FilterCoder.cpp +302 -131
- data/ext/p7zip/CPP/7zip/Common/FilterCoder.h +141 -43
- data/ext/p7zip/CPP/7zip/Common/InBuffer.cpp +87 -35
- data/ext/p7zip/CPP/7zip/Common/InBuffer.h +54 -45
- data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.cpp +22 -17
- data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.h +5 -5
- data/ext/p7zip/CPP/7zip/Common/LimitedStreams.cpp +256 -43
- data/ext/p7zip/CPP/7zip/Common/LimitedStreams.h +135 -8
- data/ext/p7zip/CPP/7zip/Common/MemBlocks.cpp +5 -5
- data/ext/p7zip/CPP/7zip/Common/MemBlocks.h +3 -3
- data/ext/p7zip/CPP/7zip/Common/MethodId.cpp +0 -24
- data/ext/p7zip/CPP/7zip/Common/MethodId.h +1 -1
- data/ext/p7zip/CPP/7zip/Common/MethodProps.cpp +430 -71
- data/ext/p7zip/CPP/7zip/Common/MethodProps.h +170 -17
- data/ext/p7zip/CPP/7zip/Common/OffsetStream.cpp +8 -4
- data/ext/p7zip/CPP/7zip/Common/OffsetStream.h +4 -3
- data/ext/p7zip/CPP/7zip/Common/OutBuffer.cpp +26 -31
- data/ext/p7zip/CPP/7zip/Common/OutBuffer.h +17 -18
- data/ext/p7zip/CPP/7zip/Common/OutMemStream.cpp +5 -5
- data/ext/p7zip/CPP/7zip/Common/OutMemStream.h +5 -4
- data/ext/p7zip/CPP/7zip/Common/ProgressUtils.cpp +22 -13
- data/ext/p7zip/CPP/7zip/Common/ProgressUtils.h +4 -3
- data/ext/p7zip/CPP/7zip/Common/PropId.cpp +108 -0
- data/ext/p7zip/CPP/7zip/Common/RegisterArc.h +63 -17
- data/ext/p7zip/CPP/7zip/Common/RegisterCodec.h +79 -6
- data/ext/p7zip/CPP/7zip/Common/StreamBinder.cpp +95 -90
- data/ext/p7zip/CPP/7zip/Common/StreamBinder.h +46 -23
- data/ext/p7zip/CPP/7zip/Common/StreamObjects.cpp +88 -24
- data/ext/p7zip/CPP/7zip/Common/StreamObjects.h +36 -14
- data/ext/p7zip/CPP/7zip/Common/StreamUtils.cpp +4 -4
- data/ext/p7zip/CPP/7zip/Common/StreamUtils.h +6 -6
- data/ext/p7zip/CPP/7zip/Common/UniqBlocks.cpp +57 -0
- data/ext/p7zip/CPP/7zip/Common/UniqBlocks.h +26 -0
- data/ext/p7zip/CPP/7zip/Common/VirtThread.cpp +8 -6
- data/ext/p7zip/CPP/7zip/Common/VirtThread.h +6 -5
- data/ext/p7zip/CPP/7zip/Compress/BZip2Const.h +13 -12
- data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.h +1 -1
- data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.cpp +198 -147
- data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.h +60 -27
- data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.cpp +111 -116
- data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.h +53 -59
- data/ext/p7zip/CPP/7zip/Compress/BZip2Register.cpp +12 -7
- data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.cpp +554 -282
- data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.h +73 -71
- data/ext/p7zip/CPP/7zip/Compress/Bcj2Register.cpp +10 -5
- data/ext/p7zip/CPP/7zip/Compress/BcjCoder.cpp +13 -4
- data/ext/p7zip/CPP/7zip/Compress/BcjCoder.h +17 -5
- data/ext/p7zip/CPP/7zip/Compress/BcjRegister.cpp +7 -9
- data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.cpp +2 -2
- data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.h +58 -61
- data/ext/p7zip/CPP/7zip/Compress/BitlEncoder.h +24 -25
- data/ext/p7zip/CPP/7zip/Compress/BitmDecoder.h +46 -17
- data/ext/p7zip/CPP/7zip/Compress/BitmEncoder.h +18 -19
- data/ext/p7zip/CPP/7zip/Compress/BranchMisc.cpp +14 -28
- data/ext/p7zip/CPP/7zip/Compress/BranchMisc.h +27 -6
- data/ext/p7zip/CPP/7zip/Compress/BranchRegister.cpp +26 -15
- data/ext/p7zip/CPP/7zip/Compress/ByteSwap.cpp +45 -26
- data/ext/p7zip/CPP/7zip/Compress/CodecExports.cpp +254 -70
- data/ext/p7zip/CPP/7zip/Compress/CopyCoder.cpp +65 -17
- data/ext/p7zip/CPP/7zip/Compress/CopyCoder.h +15 -3
- data/ext/p7zip/CPP/7zip/Compress/CopyRegister.cpp +5 -4
- data/ext/p7zip/CPP/7zip/Compress/Deflate64Register.cpp +12 -6
- data/ext/p7zip/CPP/7zip/Compress/DeflateConst.h +43 -46
- data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.cpp +145 -81
- data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.h +31 -33
- data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.cpp +179 -162
- data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.h +35 -30
- data/ext/p7zip/CPP/7zip/Compress/DeflateRegister.cpp +11 -7
- data/ext/p7zip/CPP/7zip/Compress/DeltaFilter.cpp +55 -39
- data/ext/p7zip/CPP/7zip/Compress/{DllExports2.cpp → DllExports2Compress.cpp} +8 -8
- data/ext/p7zip/CPP/7zip/Compress/DllExportsCompress.cpp +48 -0
- data/ext/p7zip/CPP/7zip/Compress/HuffmanDecoder.h +220 -49
- data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.cpp +14 -9
- data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.h +2 -3
- data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.cpp +7 -7
- data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.h +1 -1
- data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.cpp +1 -1
- data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.h +21 -18
- data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.cpp +171 -141
- data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.h +32 -64
- data/ext/p7zip/CPP/7zip/Compress/Lzham/LICENSE +22 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/LzhamRegister.cpp +783 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/README.md +211 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham.h +803 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_dynamic_lib.h +156 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_exports.inc +31 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_static_lib.h +59 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/include/zlib.h +2 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/CMakeLists.txt +69 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_comp.h +38 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzbase.cpp +244 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzbase.h +46 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp.cpp +750 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_internal.cpp +2240 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_internal.h +503 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_state.cpp +1684 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_match_accel.cpp +947 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_match_accel.h +164 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_null_threading.h +98 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_pthreads_threading.cpp +214 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_pthreads_threading.h +535 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_threading.h +12 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_win32_threading.cpp +232 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_win32_threading.h +387 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzhamcomp.vcxproj +208 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/CMakeLists.txt +86 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_assert.cpp +80 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_assert.h +58 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_checksum.cpp +73 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_checksum.h +13 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_config.h +25 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_core.h +303 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_decomp.h +37 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_helpers.h +54 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_huffman_codes.cpp +286 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_huffman_codes.h +32 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecomp.cpp +1586 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecompbase.cpp +131 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecompbase.h +89 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_math.h +142 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_mem.cpp +463 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_mem.h +115 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_platform.cpp +159 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_platform.h +284 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_prefix_coding.cpp +431 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_prefix_coding.h +157 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_symbol_codec.cpp +1527 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_symbol_codec.h +494 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_timer.cpp +147 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_timer.h +99 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_traits.h +141 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_types.h +72 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_utils.h +58 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_vector.cpp +83 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_vector.h +628 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzhamdecomp.vcxproj +224 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamlib/lzham_lib.cpp +179 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamlib/lzhamlib.vcxproj +187 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile +10 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile.depend +0 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile.list +129 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.cpp +123 -46
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.h +29 -14
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.cpp +14 -9
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.h +1 -1
- data/ext/p7zip/CPP/7zip/Compress/Lzma2Register.cpp +9 -7
- data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.cpp +24 -8
- data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.h +8 -1
- data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.cpp +30 -27
- data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.h +3 -1
- data/ext/p7zip/CPP/7zip/Compress/LzmaRegister.cpp +9 -7
- data/ext/p7zip/CPP/7zip/Compress/LzmsDecoder.cpp +576 -0
- data/ext/p7zip/CPP/7zip/Compress/LzmsDecoder.h +271 -0
- data/ext/p7zip/CPP/7zip/Compress/Lzx.h +32 -36
- data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.cpp +380 -238
- data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.h +170 -83
- data/ext/p7zip/CPP/7zip/Compress/Mtf8.h +7 -9
- data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.cpp +1 -5
- data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.cpp +51 -18
- data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.h +18 -8
- data/ext/p7zip/CPP/7zip/Compress/PpmdRegister.cpp +9 -8
- data/ext/p7zip/CPP/7zip/Compress/PpmdZip.cpp +61 -25
- data/ext/p7zip/CPP/7zip/Compress/PpmdZip.h +21 -6
- data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.cpp +122 -102
- data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.h +68 -157
- data/ext/p7zip/CPP/7zip/Compress/Rar/makefile +33 -18
- data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.depend +0 -158
- data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.list +105 -56
- data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.cpp +34 -21
- data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.h +2 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.cpp +77 -67
- data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.h +12 -10
- data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.cpp +139 -118
- data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.h +48 -33
- data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.cpp +148 -113
- data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.h +35 -19
- data/ext/p7zip/CPP/7zip/Compress/Rar5Decoder.cpp +961 -0
- data/ext/p7zip/CPP/7zip/Compress/Rar5Decoder.h +335 -0
- data/ext/p7zip/CPP/7zip/Compress/RarCodecsRegister.cpp +13 -6
- data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.cpp +91 -71
- data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.h +2 -4
- data/ext/p7zip/CPP/7zip/Compress/XpressDecoder.cpp +129 -0
- data/ext/p7zip/CPP/7zip/Compress/XpressDecoder.h +13 -0
- data/ext/p7zip/CPP/7zip/Compress/ZDecoder.cpp +98 -20
- data/ext/p7zip/CPP/7zip/Compress/ZDecoder.h +19 -7
- data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.cpp +14 -11
- data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.h +32 -1
- data/ext/p7zip/CPP/7zip/Crypto/7zAes.cpp +137 -101
- data/ext/p7zip/CPP/7zip/Crypto/7zAes.h +31 -30
- data/ext/p7zip/CPP/7zip/Crypto/7zAesRegister.cpp +8 -9
- data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.cpp +39 -28
- data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.h +3 -3
- data/ext/p7zip/CPP/7zip/Crypto/HmacSha256.cpp +62 -0
- data/ext/p7zip/CPP/7zip/Crypto/HmacSha256.h +27 -0
- data/ext/p7zip/CPP/7zip/Crypto/MyAes.cpp +73 -7
- data/ext/p7zip/CPP/7zip/Crypto/MyAes.h +25 -8
- data/ext/p7zip/CPP/7zip/Crypto/MyAesReg.cpp +16 -0
- data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp +29 -15
- data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.h +2 -1
- data/ext/p7zip/CPP/7zip/Crypto/RandGen.cpp +49 -34
- data/ext/p7zip/CPP/7zip/Crypto/RandGen.h +2 -2
- data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.cpp +36 -39
- data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.h +15 -17
- data/ext/p7zip/CPP/7zip/Crypto/Rar5Aes.cpp +257 -0
- data/ext/p7zip/CPP/7zip/Crypto/Rar5Aes.h +84 -0
- data/ext/p7zip/CPP/7zip/Crypto/RarAes.cpp +70 -71
- data/ext/p7zip/CPP/7zip/Crypto/RarAes.h +24 -19
- data/ext/p7zip/CPP/7zip/Crypto/Sha1Cls.h +51 -0
- data/ext/p7zip/CPP/7zip/Crypto/WzAes.cpp +68 -54
- data/ext/p7zip/CPP/7zip/Crypto/WzAes.h +37 -27
- data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.cpp +60 -34
- data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.h +28 -11
- data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.cpp +90 -28
- data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.h +13 -2
- data/ext/p7zip/CPP/7zip/Guid.txt +57 -11
- data/ext/p7zip/CPP/7zip/ICoder.h +202 -17
- data/ext/p7zip/CPP/7zip/IDecl.h +16 -3
- data/ext/p7zip/CPP/7zip/IPassword.h +1 -2
- data/ext/p7zip/CPP/7zip/IProgress.h +2 -16
- data/ext/p7zip/CPP/7zip/IStream.h +82 -13
- data/ext/p7zip/CPP/7zip/MyVersion.h +2 -11
- data/ext/p7zip/CPP/7zip/PropID.h +60 -9
- data/ext/p7zip/CPP/Common/C_FileIO.cpp +5 -1
- data/ext/p7zip/CPP/Common/C_FileIO.h +7 -1
- data/ext/p7zip/CPP/Common/CommandLineParser.cpp +122 -148
- data/ext/p7zip/CPP/Common/CommandLineParser.h +20 -29
- data/ext/p7zip/CPP/Common/Common.h +13 -0
- data/ext/p7zip/CPP/Common/CrcReg.cpp +98 -0
- data/ext/p7zip/CPP/Common/Defs.h +5 -10
- data/ext/p7zip/CPP/Common/DynLimBuf.cpp +93 -0
- data/ext/p7zip/CPP/Common/DynLimBuf.h +40 -0
- data/ext/p7zip/CPP/Common/DynamicBuffer.h +45 -31
- data/ext/p7zip/CPP/Common/IntToString.cpp +109 -40
- data/ext/p7zip/CPP/Common/IntToString.h +14 -9
- data/ext/p7zip/CPP/Common/Lang.cpp +120 -87
- data/ext/p7zip/CPP/Common/Lang.h +10 -15
- data/ext/p7zip/CPP/Common/ListFileUtils.cpp +82 -40
- data/ext/p7zip/CPP/Common/ListFileUtils.h +7 -4
- data/ext/p7zip/CPP/Common/MyBuffer.h +244 -0
- data/ext/p7zip/CPP/Common/MyCom.h +65 -28
- data/ext/p7zip/CPP/Common/MyGuidDef.h +1 -1
- data/ext/p7zip/CPP/Common/MyInitGuid.h +23 -0
- data/ext/p7zip/CPP/Common/MyLinux.h +42 -0
- data/ext/p7zip/CPP/Common/MyMap.cpp +8 -8
- data/ext/p7zip/CPP/Common/MyMap.h +2 -2
- data/ext/p7zip/CPP/Common/MyString.cpp +1643 -117
- data/ext/p7zip/CPP/Common/MyString.h +677 -486
- data/ext/p7zip/CPP/Common/MyTypes.h +38 -0
- data/ext/p7zip/CPP/Common/MyUnknown.h +4 -0
- data/ext/p7zip/CPP/Common/MyVector.cpp +0 -84
- data/ext/p7zip/CPP/Common/MyVector.h +472 -112
- data/ext/p7zip/CPP/Common/MyWindows.cpp +18 -1
- data/ext/p7zip/CPP/Common/MyWindows.h +8 -0
- data/ext/p7zip/CPP/Common/MyXml.cpp +169 -118
- data/ext/p7zip/CPP/Common/MyXml.h +14 -11
- data/ext/p7zip/CPP/Common/NewHandler.cpp +39 -0
- data/ext/p7zip/CPP/Common/NewHandler.h +55 -2
- data/ext/p7zip/CPP/Common/Random.h +14 -0
- data/ext/p7zip/CPP/Common/Sha1Reg.cpp +40 -0
- data/ext/p7zip/CPP/Common/Sha256Reg.cpp +40 -0
- data/ext/p7zip/CPP/Common/StdInStream.cpp +46 -27
- data/ext/p7zip/CPP/Common/StdInStream.h +11 -10
- data/ext/p7zip/CPP/Common/StdOutStream.cpp +48 -35
- data/ext/p7zip/CPP/Common/StdOutStream.h +44 -17
- data/ext/p7zip/CPP/Common/StringConvert.cpp +56 -17
- data/ext/p7zip/CPP/Common/StringConvert.h +7 -3
- data/ext/p7zip/CPP/Common/StringToInt.cpp +102 -48
- data/ext/p7zip/CPP/Common/StringToInt.h +13 -10
- data/ext/p7zip/CPP/Common/TextConfig.cpp +33 -47
- data/ext/p7zip/CPP/Common/TextConfig.h +3 -6
- data/ext/p7zip/CPP/Common/UTFConvert.cpp +218 -75
- data/ext/p7zip/CPP/Common/UTFConvert.h +4 -3
- data/ext/p7zip/CPP/Common/Wildcard.cpp +345 -125
- data/ext/p7zip/CPP/Common/Wildcard.h +82 -13
- data/ext/p7zip/CPP/Common/XzCrc64Reg.cpp +42 -0
- data/ext/p7zip/CPP/Windows/FileDir.cpp +427 -475
- data/ext/p7zip/CPP/Windows/FileDir.h +94 -72
- data/ext/p7zip/CPP/Windows/FileFind.cpp +235 -244
- data/ext/p7zip/CPP/Windows/FileFind.h +63 -59
- data/ext/p7zip/CPP/Windows/FileIO.cpp +29 -46
- data/ext/p7zip/CPP/Windows/FileIO.h +40 -42
- data/ext/p7zip/CPP/Windows/FileName.cpp +696 -17
- data/ext/p7zip/CPP/Windows/FileName.h +11 -3
- data/ext/p7zip/CPP/Windows/NtCheck.h +2 -0
- data/ext/p7zip/CPP/Windows/PropVariant.cpp +134 -30
- data/ext/p7zip/CPP/Windows/PropVariant.h +80 -24
- data/ext/p7zip/CPP/Windows/PropVariantUtils.cpp +89 -18
- data/ext/p7zip/CPP/Windows/PropVariantUtils.h +12 -7
- data/ext/p7zip/CPP/Windows/System.cpp +20 -15
- data/ext/p7zip/CPP/Windows/System.h +3 -2
- data/ext/p7zip/CPP/Windows/TimeUtils.cpp +203 -0
- data/ext/p7zip/CPP/Windows/TimeUtils.h +24 -0
- data/ext/p7zip/CPP/include_windows/basetyps.h +4 -4
- data/ext/p7zip/CPP/include_windows/windows.h +17 -11
- data/ext/p7zip/CPP/myWindows/StdAfx.h +97 -5
- data/ext/p7zip/CPP/myWindows/config.h +20 -5
- data/ext/p7zip/CPP/myWindows/myPrivate.h +8 -0
- data/ext/p7zip/CPP/myWindows/wine_date_and_time.cpp +34 -0
- data/ext/p7zip/ChangeLog +283 -35
- data/ext/p7zip/{DOCS → DOC}/7zC.txt +6 -13
- data/ext/p7zip/{DOCS → DOC}/License.txt +3 -2
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/add.htm +93 -87
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/bench.htm +88 -79
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/delete.htm +62 -59
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/extract.htm +96 -91
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/extract_full.htm +73 -68
- data/ext/p7zip/DOC/MANUAL/cmdline/commands/hash.htm +65 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/index.htm +36 -33
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/list.htm +78 -77
- data/ext/p7zip/DOC/MANUAL/cmdline/commands/rename.htm +51 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/style.css +232 -232
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/test.htm +47 -46
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/update.htm +71 -66
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/exit_codes.htm +27 -27
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/index.htm +29 -29
- data/ext/p7zip/{DOCS/MANUAL/switches → DOC/MANUAL/cmdline}/style.css +232 -232
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_exclude.htm +56 -56
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_include.htm +80 -83
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_no.htm +52 -52
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/bb.htm +61 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/bs.htm +67 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/charset.htm +61 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/exclude.htm +71 -60
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/include.htm +89 -87
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/index.htm +95 -64
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/large_pages.htm +59 -50
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/list_tech.htm +36 -36
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/method.htm +738 -625
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/output_dir.htm +53 -53
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/overwrite.htm +56 -56
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/password.htm +55 -54
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/recurse.htm +85 -83
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/sa.htm +58 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/scc.htm +42 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/scrc.htm +53 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/sdel.htm +39 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/sfx.htm +153 -156
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/shared.htm +40 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/sni.htm +56 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/sns.htm +77 -0
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/spf.htm +80 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ssc.htm +50 -50
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stdin.htm +56 -55
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stdout.htm +54 -50
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/stl.htm +39 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stop_switch.htm +31 -31
- data/ext/p7zip/DOC/MANUAL/cmdline/switches/stx.htm +50 -0
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline/switches}/style.css +232 -232
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/type.htm +121 -83
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/update.htm +177 -176
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/volume.htm +49 -49
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/working_dir.htm +56 -55
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/yes.htm +48 -48
- data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/syntax.htm +120 -120
- data/ext/p7zip/DOC/MANUAL/fm/about.htm +21 -0
- data/ext/p7zip/DOC/MANUAL/fm/benchmark.htm +56 -0
- data/ext/p7zip/DOC/MANUAL/fm/index.htm +54 -0
- data/ext/p7zip/DOC/MANUAL/fm/menu.htm +154 -0
- data/ext/p7zip/DOC/MANUAL/fm/options.htm +152 -0
- data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/add.htm +311 -0
- data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/extract.htm +78 -0
- data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/index.htm +63 -0
- data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/style.css +232 -0
- data/ext/p7zip/DOC/MANUAL/fm/plugins/index.htm +22 -0
- data/ext/p7zip/DOC/MANUAL/fm/plugins/style.css +232 -0
- data/ext/p7zip/DOC/MANUAL/fm/style.css +232 -0
- data/ext/p7zip/DOC/MANUAL/general/7z.htm +117 -0
- data/ext/p7zip/DOC/MANUAL/general/faq.htm +125 -0
- data/ext/p7zip/DOC/MANUAL/general/formats.htm +100 -0
- data/ext/p7zip/DOC/MANUAL/general/index.htm +27 -0
- data/ext/p7zip/DOC/MANUAL/general/license.htm +30 -0
- data/ext/p7zip/DOC/MANUAL/general/performance.htm +98 -0
- data/ext/p7zip/DOC/MANUAL/general/style.css +232 -0
- data/ext/p7zip/DOC/MANUAL/general/thanks.htm +43 -0
- data/ext/p7zip/DOC/MANUAL/start.htm +37 -0
- data/ext/p7zip/DOC/MANUAL/style.css +232 -0
- data/ext/p7zip/DOC/Methods.txt +158 -0
- data/ext/p7zip/{DOCS → DOC}/copying.txt +9 -11
- data/ext/p7zip/DOC/lzma.txt +328 -0
- data/ext/p7zip/{DOCS → DOC}/readme.txt +42 -65
- data/ext/p7zip/{DOCS/history.txt → DOC/src-history.txt} +88 -2
- data/ext/p7zip/README +117 -91
- data/ext/p7zip/TODO +0 -2
- data/ext/p7zip/install.sh +31 -29
- data/ext/p7zip/last_error +1 -0
- data/ext/p7zip/makefile +29 -125
- data/ext/p7zip/makefile.afl +23 -0
- data/ext/p7zip/makefile.aix_gcc +5 -4
- data/ext/p7zip/makefile.android_arm +49 -0
- data/ext/p7zip/makefile.beos +5 -4
- data/ext/p7zip/makefile.common +150 -0
- data/ext/p7zip/makefile.crc32 +3 -3
- data/ext/p7zip/makefile.cygwin +5 -4
- data/ext/p7zip/makefile.cygwin64 +21 -0
- data/ext/p7zip/makefile.cygwin64_asm +22 -0
- data/ext/p7zip/makefile.cygwin_asm +6 -4
- data/ext/p7zip/makefile.cygwin_clang +21 -0
- data/ext/p7zip/makefile.cygwin_clang_asm +23 -0
- data/ext/p7zip/{makefile.djgpp_old → makefile.djgpp} +5 -4
- data/ext/p7zip/makefile.djgpp_watt +7 -5
- data/ext/p7zip/makefile.freebsd5 +5 -4
- data/ext/p7zip/{makefile.freebsd6 → makefile.freebsd6+} +6 -5
- data/ext/p7zip/makefile.glb +27 -18
- data/ext/p7zip/makefile.gprof +3 -2
- data/ext/p7zip/makefile.haiku +19 -0
- data/ext/p7zip/makefile.hpux-acc +3 -2
- data/ext/p7zip/makefile.hpux-acc_64 +3 -2
- data/ext/p7zip/makefile.hpux-gcc +5 -4
- data/ext/p7zip/makefile.linux_amd64 +5 -4
- data/ext/p7zip/makefile.linux_amd64_asm +12 -5
- data/ext/p7zip/makefile.linux_amd64_asm_icc +5 -3
- data/ext/p7zip/makefile.linux_amd64_sanitizer +26 -0
- data/ext/p7zip/makefile.linux_any_cpu +5 -4
- data/ext/p7zip/makefile.linux_any_cpu_gcc_4.X +7 -4
- data/ext/p7zip/makefile.linux_clang_amd64_asm +25 -0
- data/ext/p7zip/makefile.linux_clang_amd64_asm_sanitize +27 -0
- data/ext/p7zip/makefile.linux_cross_aarch64 +25 -0
- data/ext/p7zip/makefile.linux_cross_arm +7 -4
- data/ext/p7zip/makefile.linux_cross_djgpp +27 -0
- data/ext/p7zip/makefile.linux_cross_m68k +26 -0
- data/ext/p7zip/makefile.linux_cross_mipsel +27 -0
- data/ext/p7zip/makefile.linux_cross_ppc +25 -0
- data/ext/p7zip/makefile.linux_cross_ppc64 +25 -0
- data/ext/p7zip/makefile.linux_cross_ppc64le +25 -0
- data/ext/p7zip/makefile.linux_cross_s390x +25 -0
- data/ext/p7zip/makefile.linux_cross_sparc64 +25 -0
- data/ext/p7zip/makefile.linux_gcc6_sanitize +23 -0
- data/ext/p7zip/makefile.linux_gcc_2.95_no_need_for_libstdc +6 -4
- data/ext/p7zip/makefile.linux_other +6 -5
- data/ext/p7zip/makefile.linux_s390x +5 -4
- data/ext/p7zip/{makefile.machine_base → makefile.linux_scan-build} +5 -4
- data/ext/p7zip/makefile.linux_valgrind +25 -0
- data/ext/p7zip/{makefile.linux_clang_amd64 → makefile.linux_x32} +6 -5
- data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X +10 -5
- data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X_fltk +8 -4
- data/ext/p7zip/makefile.linux_x86_asm_gcc_mudflap_4.X +4 -2
- data/ext/p7zip/makefile.linux_x86_asm_icc +4 -2
- data/ext/p7zip/makefile.linux_x86_icc +3 -2
- data/ext/p7zip/makefile.macosx_arm64 +17 -0
- data/ext/p7zip/{makefile.macosx_32bits → makefile.macosx_gcc_32bits} +3 -2
- data/ext/p7zip/{makefile.macosx_32bits_asm → makefile.macosx_gcc_32bits_asm} +5 -3
- data/ext/p7zip/{makefile.macosx_32bits_ppc → makefile.macosx_gcc_32bits_ppc} +3 -2
- data/ext/p7zip/{makefile.macosx_64bits → makefile.macosx_gcc_64bits} +3 -2
- data/ext/p7zip/makefile.macosx_llvm_64bits +9 -3
- data/ext/p7zip/makefile.netbsd +5 -4
- data/ext/p7zip/makefile.netware_asm_gcc_3.X +6 -4
- data/ext/p7zip/makefile.oldmake +41 -130
- data/ext/p7zip/makefile.openbsd +7 -3
- data/ext/p7zip/makefile.openbsd_no_port +9 -5
- data/ext/p7zip/makefile.qnx_shared.bin +5 -4
- data/ext/p7zip/makefile.qnx_static +5 -4
- data/ext/p7zip/makefile.solaris_sparc_CC_32 +5 -4
- data/ext/p7zip/makefile.solaris_sparc_CC_64 +6 -4
- data/ext/p7zip/makefile.solaris_sparc_gcc +7 -6
- data/ext/p7zip/makefile.solaris_x86 +5 -4
- data/ext/p7zip/makefile.tru64 +5 -4
- data/ext/seven_zip_ruby/extconf.rb +92 -6
- data/ext/seven_zip_ruby/seven_zip_archive.cpp +40 -17
- data/ext/seven_zip_ruby/seven_zip_archive.h +1 -1
- data/ext/seven_zip_ruby/utils.cpp +267 -124
- data/ext/seven_zip_ruby/utils.h +2 -0
- data/lib/seven_zip_ruby/7z.dll +0 -0
- data/lib/seven_zip_ruby/7z.sfx +0 -0
- data/lib/seven_zip_ruby/7z64.dll +0 -0
- data/lib/seven_zip_ruby/7zCon.sfx +0 -0
- data/lib/seven_zip_ruby/seven_zip_reader.rb +16 -1
- data/lib/seven_zip_ruby/version.rb +1 -1
- data/p7zip/.gitignore +7 -0
- data/p7zip/README.txt +29 -0
- data/p7zip/extract.sh +134 -0
- data/spec/seven_zip_ruby_spec.rb +22 -13
- data/test/res/The Flying Spaghetti Monster.txt +3 -0
- data/test/res/The Three Little Pigs.txt +5 -0
- data/test/res/UTF_content.txt +3 -0
- data/test/res/test_reader_data.7z +0 -0
- data/test/res/test_reader_filename_cp932.7z +0 -0
- data/test/res/test_reader_files.7z +0 -0
- data/test/test_seven_zip_reader.rb +187 -0
- data/test/test_seven_zip_writer.rb +184 -0
- metadata +267 -219
- data/.github/workflows/test-and-release.yml +0 -43
- data/ext/C/Types.h +0 -254
- data/ext/CPP/7zip/Archive/IArchive.h +0 -234
- data/ext/CPP/7zip/IDecl.h +0 -15
- data/ext/CPP/7zip/IPassword.h +0 -24
- data/ext/CPP/7zip/IProgress.h +0 -33
- data/ext/CPP/7zip/IStream.h +0 -58
- data/ext/CPP/7zip/PropID.h +0 -76
- data/ext/CPP/Common/MyCom.h +0 -225
- data/ext/CPP/Common/MyGuidDef.h +0 -54
- data/ext/CPP/Common/MyInitGuid.h +0 -22
- data/ext/CPP/Common/MyUnknown.h +0 -13
- data/ext/CPP/Common/MyWindows.h +0 -204
- data/ext/CPP/Common/Types.h +0 -11
- data/ext/CPP/Windows/PropVariant.h +0 -56
- data/ext/CPP/include_windows/basetyps.h +0 -19
- data/ext/CPP/include_windows/tchar.h +0 -89
- data/ext/CPP/include_windows/windows.h +0 -194
- data/ext/p7zip/Asm/x64/7zCrcT8U.asm +0 -103
- data/ext/p7zip/Asm/x86/7zCrcT8U.asm +0 -101
- data/ext/p7zip/C/7zCrcT8.c +0 -43
- data/ext/p7zip/C/Alloc.back3 +0 -238
- data/ext/p7zip/C/Alloc.c.back +0 -243
- data/ext/p7zip/C/Alloc.c.back2 +0 -222
- data/ext/p7zip/C/LzmaUtil/Lzma86Dec.h +0 -51
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +0 -149
- data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.h +0 -58
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.cpp +0 -24
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.h +0 -28
- data/ext/p7zip/CPP/7zip/Archive/Chm/ChmRegister.cpp +0 -13
- data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.cpp +0 -239
- data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.h +0 -28
- data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.cpp +0 -389
- data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.h +0 -119
- data/ext/p7zip/CPP/7zip/Archive/Com/ComRegister.cpp +0 -13
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +0 -240
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.h +0 -80
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.cpp +0 -239
- data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.h +0 -88
- data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +0 -15
- data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.h +0 -37
- data/ext/p7zip/CPP/7zip/Archive/DebHandler.cpp +0 -413
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.cpp +0 -243
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.h +0 -26
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.cpp +0 -480
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.h +0 -154
- data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsRegister.cpp +0 -13
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.cpp +0 -21
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.cpp +0 -478
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.h +0 -123
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.cpp +0 -55
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarRegister.cpp +0 -13
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.cpp +0 -78
- data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.h +0 -49
- data/ext/p7zip/CPP/7zip/Archive/Udf/UdfRegister.cpp +0 -13
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.cpp +0 -36
- data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItemEx.h +0 -34
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zFM.txt +0 -163
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zG.txt +0 -131
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7za.txt +0 -253
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_ALL.txt +0 -32
- data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_Format7zFree.txt +0 -290
- data/ext/p7zip/CPP/7zip/CMAKE/generate.sh +0 -37
- data/ext/p7zip/CPP/7zip/CMAKE/generate_xcode.sh +0 -32
- data/ext/p7zip/CPP/7zip/Common/LockedStream.cpp +0 -23
- data/ext/p7zip/CPP/7zip/Common/LockedStream.h +0 -38
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.cpp +0 -309
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.h +0 -98
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.cpp +0 -90
- data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.h +0 -59
- data/ext/p7zip/CPP/7zip/Compress/BranchCoder.cpp +0 -19
- data/ext/p7zip/CPP/7zip/Compress/BranchCoder.h +0 -44
- data/ext/p7zip/CPP/7zip/Compress/DllExports.cpp +0 -39
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +0 -531
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +0 -1018
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +0 -48
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +0 -311
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +0 -20
- data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/makefile +0 -173
- data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.cpp +0 -90
- data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.h +0 -46
- data/ext/p7zip/CPP/7zip/Compress/RangeCoder.h +0 -205
- data/ext/p7zip/CPP/7zip/Compress/RangeCoderBit.h +0 -114
- data/ext/p7zip/CPP/7zip/Crypto/Sha1.cpp +0 -229
- data/ext/p7zip/CPP/7zip/Crypto/Sha1.h +0 -68
- data/ext/p7zip/CPP/7zip/PREMAKE/generate.sh +0 -18
- data/ext/p7zip/CPP/7zip/PREMAKE/premake4.lua +0 -263
- data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA.pro +0 -228
- data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA_osx.pro +0 -228
- data/ext/p7zip/CPP/7zip/QMAKE/test_emul/test_emul.pro +0 -26
- data/ext/p7zip/CPP/7zip/TEST/TestUI/TestUI.cpp +0 -560
- data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile +0 -33
- data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.depend +0 -577
- data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.list +0 -16
- data/ext/p7zip/CPP/Common/Buffer.h +0 -77
- data/ext/p7zip/CPP/Common/Types.h +0 -11
- data/ext/p7zip/CPP/Windows/COM.cpp +0 -37
- data/ext/p7zip/CPP/Windows/COM.h +0 -69
- data/ext/p7zip/CPP/Windows/Clipboard.cpp +0 -160
- data/ext/p7zip/CPP/Windows/Clipboard.h +0 -28
- data/ext/p7zip/CPP/Windows/CommonDialog.h +0 -19
- data/ext/p7zip/CPP/Windows/Control/ComboBox.h +0 -82
- data/ext/p7zip/CPP/Windows/Control/Controls.cpp +0 -515
- data/ext/p7zip/CPP/Windows/Control/Dialog.cpp +0 -560
- data/ext/p7zip/CPP/Windows/Control/Dialog.h +0 -179
- data/ext/p7zip/CPP/Windows/Control/DialogImpl.h +0 -73
- data/ext/p7zip/CPP/Windows/Control/Edit.h +0 -24
- data/ext/p7zip/CPP/Windows/Control/ListView.h +0 -164
- data/ext/p7zip/CPP/Windows/Control/ProgressBar.h +0 -34
- data/ext/p7zip/CPP/Windows/Control/Static.h +0 -23
- data/ext/p7zip/CPP/Windows/Control/StatusBar.h +0 -56
- data/ext/p7zip/CPP/Windows/Control/Window2.cpp +0 -211
- data/ext/p7zip/CPP/Windows/Control/Window2.h +0 -111
- data/ext/p7zip/CPP/Windows/DLL.cpp +0 -193
- data/ext/p7zip/CPP/Windows/DLL.h +0 -48
- data/ext/p7zip/CPP/Windows/Error.cpp +0 -58
- data/ext/p7zip/CPP/Windows/Error.h +0 -33
- data/ext/p7zip/CPP/Windows/Menu.h +0 -4
- data/ext/p7zip/CPP/Windows/PropVariantConversions.cpp +0 -142
- data/ext/p7zip/CPP/Windows/PropVariantConversions.h +0 -14
- data/ext/p7zip/CPP/Windows/Registry.cpp +0 -313
- data/ext/p7zip/CPP/Windows/Registry.h +0 -113
- data/ext/p7zip/CPP/Windows/ResourceString.h +0 -22
- data/ext/p7zip/CPP/Windows/Shell.h +0 -21
- data/ext/p7zip/CPP/Windows/Time.cpp +0 -88
- data/ext/p7zip/CPP/Windows/Time.h +0 -21
- data/ext/p7zip/CPP/Windows/Window.cpp +0 -101
- data/ext/p7zip/CPP/Windows/Window.h +0 -43
- data/ext/p7zip/CPP/myWindows/initguid.h +0 -4
- data/ext/p7zip/CPP/myWindows/makefile +0 -21
- data/ext/p7zip/CPP/myWindows/makefile.depend +0 -32
- data/ext/p7zip/CPP/myWindows/makefile.list +0 -28
- data/ext/p7zip/CPP/myWindows/myAddExeFlag.cpp +0 -20
- data/ext/p7zip/CPP/myWindows/myGetTickCount.cpp +0 -8
- data/ext/p7zip/CPP/myWindows/mySplitCommandLine.cpp +0 -82
- data/ext/p7zip/CPP/myWindows/test_emul.cpp +0 -745
- data/ext/p7zip/CPP/myWindows/wine_GetXXXDefaultLangID.cpp +0 -741
- data/ext/p7zip/DOCS/MANUAL/switches/charset.htm +0 -49
- data/ext/p7zip/DOCS/Methods.txt +0 -152
- data/ext/p7zip/DOCS/lzma.txt +0 -598
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/ChangeLog +0 -41
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme +0 -21
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme.u7z +0 -30
- data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/u7z +0 -133
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/README +0 -21
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/check.sh +0 -117
- 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 +0 -33
- data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/p7zip +0 -144
- data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-shared +0 -14
- data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-static +0 -10
- data/ext/p7zip/integration_context_menu.txt +0 -51
- data/ext/p7zip/makefile.rules +0 -661
- /data/ext/p7zip/{DOCS → DOC}/7zFormat.txt +0 -0
- /data/ext/p7zip/{DOCS → DOC}/unRarLicense.txt +0 -0
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
#include "StdAfx.h"
|
4
4
|
|
5
|
+
// #include <stdio.h>
|
6
|
+
|
5
7
|
#include "../../../../C/Alloc.h"
|
6
8
|
|
7
|
-
#include "Common/
|
8
|
-
#include "Common/
|
9
|
-
#include "Common/
|
10
|
-
#include "Common/
|
11
|
-
#include "Common/StringConvert.h"
|
12
|
-
#include "Common/UTFConvert.h"
|
9
|
+
#include "../../../Common/ComTry.h"
|
10
|
+
#include "../../../Common/IntToString.h"
|
11
|
+
#include "../../../Common/StringConvert.h"
|
12
|
+
#include "../../../Common/UTFConvert.h"
|
13
13
|
|
14
|
-
#include "Windows/PropVariant.h"
|
15
|
-
#include "Windows/
|
14
|
+
#include "../../../Windows/PropVariant.h"
|
15
|
+
#include "../../../Windows/TimeUtils.h"
|
16
16
|
|
17
17
|
#include "../../Common/ProgressUtils.h"
|
18
18
|
#include "../../Common/StreamUtils.h"
|
@@ -41,102 +41,245 @@ enum
|
|
41
41
|
};
|
42
42
|
#endif
|
43
43
|
|
44
|
-
static
|
44
|
+
static const Byte kProps[] =
|
45
45
|
{
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
46
|
+
kpidPath,
|
47
|
+
kpidSize,
|
48
|
+
kpidMTime,
|
49
|
+
kpidAttrib,
|
50
|
+
kpidMethod,
|
51
|
+
kpidBlock
|
52
52
|
#ifdef _CAB_DETAILS
|
53
53
|
,
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
// kpidBlockReal, // L"BlockReal",
|
55
|
+
kpidOffset,
|
56
|
+
kpidVolume
|
57
57
|
#endif
|
58
58
|
};
|
59
59
|
|
60
|
-
static const
|
60
|
+
static const Byte kArcProps[] =
|
61
61
|
{
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
kpidTotalPhySize,
|
63
|
+
kpidMethod,
|
64
|
+
// kpidSolid,
|
65
|
+
kpidNumBlocks,
|
66
|
+
kpidNumVolumes,
|
67
|
+
kpidVolumeIndex,
|
68
|
+
kpidId
|
66
69
|
};
|
67
70
|
|
68
|
-
|
69
|
-
|
71
|
+
IMP_IInArchive_Props
|
72
|
+
IMP_IInArchive_ArcProps
|
70
73
|
|
71
|
-
static
|
74
|
+
static const char * const kMethods[] =
|
72
75
|
{
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
76
|
+
"None"
|
77
|
+
, "MSZip"
|
78
|
+
, "Quantum"
|
79
|
+
, "LZX"
|
77
80
|
};
|
78
81
|
|
79
|
-
|
80
|
-
|
82
|
+
static const unsigned kMethodNameBufSize = 32; // "Quantum:255"
|
83
|
+
|
84
|
+
static void SetMethodName(char *s, unsigned method, unsigned param)
|
85
|
+
{
|
86
|
+
if (method < ARRAY_SIZE(kMethods))
|
87
|
+
{
|
88
|
+
s = MyStpCpy(s, kMethods[method]);
|
89
|
+
if (method != NHeader::NMethod::kLZX &&
|
90
|
+
method != NHeader::NMethod::kQuantum)
|
91
|
+
return;
|
92
|
+
*s++ = ':';
|
93
|
+
method = param;
|
94
|
+
}
|
95
|
+
ConvertUInt32ToString(method, s);
|
96
|
+
}
|
81
97
|
|
82
98
|
STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
|
83
99
|
{
|
84
100
|
COM_TRY_BEGIN
|
85
|
-
|
86
|
-
switch(propID)
|
101
|
+
NCOM::CPropVariant prop;
|
102
|
+
switch (propID)
|
87
103
|
{
|
88
104
|
case kpidMethod:
|
89
105
|
{
|
90
|
-
|
91
|
-
|
92
|
-
int i;
|
93
|
-
for (int v = 0; v < m_Database.Volumes.Size(); v++)
|
106
|
+
UInt32 mask = 0;
|
107
|
+
UInt32 params[2] = { 0, 0 };
|
94
108
|
{
|
95
|
-
|
96
|
-
|
97
|
-
|
109
|
+
FOR_VECTOR (v, m_Database.Volumes)
|
110
|
+
{
|
111
|
+
const CRecordVector<CFolder> &folders = m_Database.Volumes[v].Folders;
|
112
|
+
FOR_VECTOR (i, folders)
|
113
|
+
{
|
114
|
+
const CFolder &folder = folders[i];
|
115
|
+
unsigned method = folder.GetMethod();
|
116
|
+
mask |= ((UInt32)1 << method);
|
117
|
+
if (method == NHeader::NMethod::kLZX ||
|
118
|
+
method == NHeader::NMethod::kQuantum)
|
119
|
+
{
|
120
|
+
unsigned di = (method == NHeader::NMethod::kQuantum) ? 0 : 1;
|
121
|
+
if (params[di] < folder.MethodMinor)
|
122
|
+
params[di] = folder.MethodMinor;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
98
126
|
}
|
99
|
-
|
127
|
+
|
128
|
+
AString s;
|
129
|
+
|
130
|
+
for (unsigned i = 0; i < kNumMethodsMax; i++)
|
100
131
|
{
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
132
|
+
if ((mask & (1 << i)) == 0)
|
133
|
+
continue;
|
134
|
+
s.Add_Space_if_NotEmpty();
|
135
|
+
char temp[kMethodNameBufSize];
|
136
|
+
SetMethodName(temp, i, params[i == NHeader::NMethod::kQuantum ? 0 : 1]);
|
137
|
+
s += temp;
|
106
138
|
}
|
107
|
-
|
139
|
+
|
140
|
+
prop = s;
|
108
141
|
break;
|
109
142
|
}
|
110
143
|
// case kpidSolid: prop = _database.IsSolid(); break;
|
111
144
|
case kpidNumBlocks:
|
112
145
|
{
|
113
146
|
UInt32 numFolders = 0;
|
114
|
-
|
147
|
+
FOR_VECTOR (v, m_Database.Volumes)
|
115
148
|
numFolders += m_Database.Volumes[v].Folders.Size();
|
116
149
|
prop = numFolders;
|
117
150
|
break;
|
118
151
|
}
|
119
|
-
|
152
|
+
|
153
|
+
case kpidTotalPhySize:
|
120
154
|
{
|
155
|
+
if (m_Database.Volumes.Size() > 1)
|
156
|
+
{
|
157
|
+
UInt64 sum = 0;
|
158
|
+
FOR_VECTOR (v, m_Database.Volumes)
|
159
|
+
sum += m_Database.Volumes[v].ArcInfo.Size;
|
160
|
+
prop = sum;
|
161
|
+
}
|
162
|
+
break;
|
163
|
+
}
|
164
|
+
|
165
|
+
case kpidNumVolumes:
|
121
166
|
prop = (UInt32)m_Database.Volumes.Size();
|
122
167
|
break;
|
168
|
+
|
169
|
+
case kpidVolumeIndex:
|
170
|
+
{
|
171
|
+
if (m_Database.Volumes.Size() == 1)
|
172
|
+
{
|
173
|
+
const CDatabaseEx &db = m_Database.Volumes[0];
|
174
|
+
const CInArcInfo &ai = db.ArcInfo;
|
175
|
+
prop = (UInt32)ai.CabinetNumber;
|
176
|
+
}
|
177
|
+
break;
|
178
|
+
}
|
179
|
+
|
180
|
+
case kpidId:
|
181
|
+
{
|
182
|
+
if (m_Database.Volumes.Size() != 0)
|
183
|
+
{
|
184
|
+
prop = (UInt32)m_Database.Volumes[0].ArcInfo.SetID;
|
185
|
+
}
|
186
|
+
break;
|
187
|
+
}
|
188
|
+
|
189
|
+
case kpidOffset:
|
190
|
+
/*
|
191
|
+
if (m_Database.Volumes.Size() == 1)
|
192
|
+
prop = m_Database.Volumes[0].StartPosition;
|
193
|
+
*/
|
194
|
+
prop = _offset;
|
195
|
+
break;
|
196
|
+
|
197
|
+
case kpidPhySize:
|
198
|
+
/*
|
199
|
+
if (m_Database.Volumes.Size() == 1)
|
200
|
+
prop = (UInt64)m_Database.Volumes[0].ArcInfo.Size;
|
201
|
+
*/
|
202
|
+
prop = (UInt64)_phySize;
|
203
|
+
break;
|
204
|
+
|
205
|
+
case kpidErrorFlags:
|
206
|
+
{
|
207
|
+
UInt32 v = 0;
|
208
|
+
if (!_isArc) v |= kpv_ErrorFlags_IsNotArc;
|
209
|
+
if (_errorInHeaders) v |= kpv_ErrorFlags_HeadersError;
|
210
|
+
if (_unexpectedEnd) v |= kpv_ErrorFlags_UnexpectedEnd;
|
211
|
+
prop = v;
|
212
|
+
break;
|
213
|
+
}
|
214
|
+
|
215
|
+
case kpidError:
|
216
|
+
if (!_errorMessage.IsEmpty())
|
217
|
+
prop = _errorMessage;
|
218
|
+
break;
|
219
|
+
|
220
|
+
case kpidName:
|
221
|
+
{
|
222
|
+
if (m_Database.Volumes.Size() == 1)
|
223
|
+
{
|
224
|
+
const CDatabaseEx &db = m_Database.Volumes[0];
|
225
|
+
const CInArcInfo &ai = db.ArcInfo;
|
226
|
+
if (ai.SetID != 0)
|
227
|
+
{
|
228
|
+
AString s;
|
229
|
+
char temp[32];
|
230
|
+
ConvertUInt32ToString(ai.SetID, temp);
|
231
|
+
s += temp;
|
232
|
+
ConvertUInt32ToString(ai.CabinetNumber + 1, temp);
|
233
|
+
s += '_';
|
234
|
+
s += temp;
|
235
|
+
s += ".cab";
|
236
|
+
prop = s;
|
237
|
+
}
|
238
|
+
/*
|
239
|
+
// that code is incomplete. It gcan give accurate name of volume
|
240
|
+
char s[32];
|
241
|
+
ConvertUInt32ToString(ai.CabinetNumber + 2, s);
|
242
|
+
unsigned len = MyStringLen(s);
|
243
|
+
if (ai.IsThereNext())
|
244
|
+
{
|
245
|
+
AString fn = ai.NextArc.FileName;
|
246
|
+
if (fn.Len() > 4 && StringsAreEqualNoCase_Ascii(fn.RightPtr(4), ".cab"))
|
247
|
+
fn.DeleteFrom(fn.Len() - 4);
|
248
|
+
if (len < fn.Len())
|
249
|
+
{
|
250
|
+
if (strcmp(s, fn.RightPtr(len)) == 0)
|
251
|
+
{
|
252
|
+
AString s2 = fn;
|
253
|
+
s2.DeleteFrom(fn.Len() - len);
|
254
|
+
ConvertUInt32ToString(ai.CabinetNumber + 1, s);
|
255
|
+
s2 += s;
|
256
|
+
s2 += ".cab";
|
257
|
+
prop = GetUnicodeString(s2);
|
258
|
+
}
|
259
|
+
}
|
260
|
+
}
|
261
|
+
*/
|
262
|
+
}
|
263
|
+
break;
|
123
264
|
}
|
265
|
+
|
266
|
+
// case kpidShortComment:
|
124
267
|
}
|
125
268
|
prop.Detach(value);
|
126
269
|
return S_OK;
|
127
270
|
COM_TRY_END
|
128
271
|
}
|
129
272
|
|
130
|
-
STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID,
|
273
|
+
STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
|
131
274
|
{
|
132
275
|
COM_TRY_BEGIN
|
133
|
-
|
276
|
+
NCOM::CPropVariant prop;
|
134
277
|
|
135
278
|
const CMvItem &mvItem = m_Database.Items[index];
|
136
279
|
const CDatabaseEx &db = m_Database.Volumes[mvItem.VolumeIndex];
|
137
|
-
|
280
|
+
unsigned itemIndex = mvItem.ItemIndex;
|
138
281
|
const CItem &item = db.Items[itemIndex];
|
139
|
-
switch(propID)
|
282
|
+
switch (propID)
|
140
283
|
{
|
141
284
|
case kpidPath:
|
142
285
|
{
|
@@ -148,9 +291,10 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *va
|
|
148
291
|
prop = (const wchar_t *)NItemName::WinNameToOSName(unicodeName);
|
149
292
|
break;
|
150
293
|
}
|
294
|
+
|
151
295
|
case kpidIsDir: prop = item.IsDir(); break;
|
152
296
|
case kpidSize: prop = item.Size; break;
|
153
|
-
case kpidAttrib: prop = item.
|
297
|
+
case kpidAttrib: prop = item.GetWinAttrib(); break;
|
154
298
|
|
155
299
|
case kpidMTime:
|
156
300
|
{
|
@@ -170,24 +314,17 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *va
|
|
170
314
|
{
|
171
315
|
UInt32 realFolderIndex = item.GetFolderIndex(db.Folders.Size());
|
172
316
|
const CFolder &folder = db.Folders[realFolderIndex];
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
methodIndex == NHeader::NCompressionMethodMajor::kQuantum)
|
177
|
-
{
|
178
|
-
method += ':';
|
179
|
-
char temp[32];
|
180
|
-
ConvertUInt64ToString(folder.CompressionTypeMinor, temp);
|
181
|
-
method += temp;
|
182
|
-
}
|
183
|
-
prop = method;
|
317
|
+
char s[kMethodNameBufSize];;
|
318
|
+
SetMethodName(s, folder.GetMethod(), folder.MethodMinor);
|
319
|
+
prop = s;
|
184
320
|
break;
|
185
321
|
}
|
322
|
+
|
186
323
|
case kpidBlock: prop = (Int32)m_Database.GetFolderIndex(&mvItem); break;
|
187
324
|
|
188
325
|
#ifdef _CAB_DETAILS
|
189
326
|
|
190
|
-
case kpidBlockReal: prop = (UInt32)item.FolderIndex; break;
|
327
|
+
// case kpidBlockReal: prop = (UInt32)item.FolderIndex; break;
|
191
328
|
case kpidOffset: prop = (UInt32)item.Offset; break;
|
192
329
|
case kpidVolume: prop = (UInt32)mvItem.VolumeIndex; break;
|
193
330
|
|
@@ -198,136 +335,205 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *va
|
|
198
335
|
COM_TRY_END
|
199
336
|
}
|
200
337
|
|
201
|
-
/*
|
202
|
-
class CProgressImp: public CProgressVirt
|
203
|
-
{
|
204
|
-
CMyComPtr<IArchiveOpenCallback> m_OpenArchiveCallback;
|
205
|
-
public:
|
206
|
-
STDMETHOD(SetTotal)(const UInt64 *numFiles);
|
207
|
-
STDMETHOD(SetCompleted)(const UInt64 *numFiles);
|
208
|
-
void Init(IArchiveOpenCallback *openArchiveCallback)
|
209
|
-
{ m_OpenArchiveCallback = openArchiveCallback; }
|
210
|
-
};
|
211
|
-
|
212
|
-
STDMETHODIMP CProgressImp::SetTotal(const UInt64 *numFiles)
|
213
|
-
{
|
214
|
-
if (m_OpenArchiveCallback)
|
215
|
-
return m_OpenArchiveCallback->SetCompleted(numFiles, NULL);
|
216
|
-
return S_OK;
|
217
|
-
}
|
218
|
-
|
219
|
-
STDMETHODIMP CProgressImp::SetCompleted(const UInt64 *numFiles)
|
220
|
-
{
|
221
|
-
if (m_OpenArchiveCallback)
|
222
|
-
return m_OpenArchiveCallback->SetCompleted(numFiles, NULL);
|
223
|
-
return S_OK;
|
224
|
-
}
|
225
|
-
*/
|
226
|
-
|
227
338
|
STDMETHODIMP CHandler::Open(IInStream *inStream,
|
228
339
|
const UInt64 *maxCheckStartPosition,
|
229
340
|
IArchiveOpenCallback *callback)
|
230
341
|
{
|
231
342
|
COM_TRY_BEGIN
|
232
343
|
Close();
|
233
|
-
|
344
|
+
|
234
345
|
CInArchive archive;
|
235
346
|
CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
|
236
347
|
callback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback);
|
237
348
|
|
238
349
|
CMyComPtr<IInStream> nextStream = inStream;
|
239
350
|
bool prevChecked = false;
|
351
|
+
UString startVolName;
|
352
|
+
bool startVolName_was_Requested = false;
|
240
353
|
UInt64 numItems = 0;
|
241
|
-
|
354
|
+
unsigned numTempVolumes = 0;
|
355
|
+
// try
|
242
356
|
{
|
243
|
-
while (nextStream
|
357
|
+
while (nextStream)
|
244
358
|
{
|
245
359
|
CDatabaseEx db;
|
246
360
|
db.Stream = nextStream;
|
247
|
-
|
248
|
-
|
361
|
+
|
362
|
+
HRESULT res = archive.Open(db, maxCheckStartPosition);
|
363
|
+
|
364
|
+
_errorInHeaders |= archive.HeaderError;
|
365
|
+
_errorInHeaders |= archive.ErrorInNames;
|
366
|
+
_unexpectedEnd |= archive.UnexpectedEnd;
|
367
|
+
|
368
|
+
if (res == S_OK && !m_Database.Volumes.IsEmpty())
|
249
369
|
{
|
250
|
-
|
370
|
+
const CArchInfo &lastArc = m_Database.Volumes.Back().ArcInfo;
|
371
|
+
unsigned cabNumber = db.ArcInfo.CabinetNumber;
|
372
|
+
if (lastArc.SetID != db.ArcInfo.SetID)
|
373
|
+
res = S_FALSE;
|
374
|
+
else if (prevChecked)
|
375
|
+
{
|
376
|
+
if (cabNumber != lastArc.CabinetNumber + 1)
|
377
|
+
res = S_FALSE;
|
378
|
+
}
|
379
|
+
else if (cabNumber >= lastArc.CabinetNumber)
|
380
|
+
res = S_FALSE;
|
381
|
+
else if (numTempVolumes != 0)
|
251
382
|
{
|
252
|
-
const
|
253
|
-
if (
|
254
|
-
dbPrev.ArchiveInfo.CabinetNumber + (prevChecked ? 1: - 1) !=
|
255
|
-
db.ArchiveInfo.CabinetNumber)
|
383
|
+
const CArchInfo &prevArc = m_Database.Volumes[numTempVolumes - 1].ArcInfo;
|
384
|
+
if (cabNumber != prevArc.CabinetNumber + 1)
|
256
385
|
res = S_FALSE;
|
257
386
|
}
|
258
387
|
}
|
388
|
+
|
389
|
+
if (archive.IsArc || res == S_OK)
|
390
|
+
{
|
391
|
+
_isArc = true;
|
392
|
+
if (m_Database.Volumes.IsEmpty())
|
393
|
+
{
|
394
|
+
_offset = db.StartPosition;
|
395
|
+
_phySize = db.ArcInfo.Size;
|
396
|
+
}
|
397
|
+
}
|
398
|
+
|
259
399
|
if (res == S_OK)
|
260
|
-
|
261
|
-
|
262
|
-
|
400
|
+
{
|
401
|
+
numItems += db.Items.Size();
|
402
|
+
m_Database.Volumes.Insert(prevChecked ? m_Database.Volumes.Size() : numTempVolumes, db);
|
403
|
+
if (!prevChecked && m_Database.Volumes.Size() > 1)
|
404
|
+
{
|
405
|
+
numTempVolumes++;
|
406
|
+
if (db.ArcInfo.CabinetNumber + 1 == m_Database.Volumes[numTempVolumes].ArcInfo.CabinetNumber)
|
407
|
+
numTempVolumes = 0;
|
408
|
+
}
|
409
|
+
}
|
263
410
|
else
|
264
411
|
{
|
412
|
+
if (res != S_FALSE)
|
413
|
+
return res;
|
265
414
|
if (m_Database.Volumes.IsEmpty())
|
266
415
|
return S_FALSE;
|
267
416
|
if (prevChecked)
|
268
417
|
break;
|
269
418
|
prevChecked = true;
|
419
|
+
if (numTempVolumes != 0)
|
420
|
+
{
|
421
|
+
m_Database.Volumes.DeleteFrontal(numTempVolumes);
|
422
|
+
numTempVolumes = 0;
|
423
|
+
}
|
270
424
|
}
|
271
425
|
|
272
|
-
numItems += db.Items.Size();
|
273
426
|
RINOK(callback->SetCompleted(&numItems, NULL));
|
274
427
|
|
275
|
-
nextStream =
|
428
|
+
nextStream = NULL;
|
429
|
+
|
276
430
|
for (;;)
|
277
431
|
{
|
278
|
-
const
|
432
|
+
const COtherArc *otherArc = NULL;
|
433
|
+
|
279
434
|
if (!prevChecked)
|
280
435
|
{
|
281
|
-
|
282
|
-
|
283
|
-
|
436
|
+
if (numTempVolumes == 0)
|
437
|
+
{
|
438
|
+
const CInArcInfo &ai = m_Database.Volumes[0].ArcInfo;
|
439
|
+
if (ai.IsTherePrev())
|
440
|
+
otherArc = &ai.PrevArc;
|
441
|
+
else
|
442
|
+
prevChecked = true;
|
443
|
+
}
|
284
444
|
else
|
285
|
-
|
445
|
+
{
|
446
|
+
const CInArcInfo &ai = m_Database.Volumes[numTempVolumes - 1].ArcInfo;
|
447
|
+
if (ai.IsThereNext())
|
448
|
+
otherArc = &ai.NextArc;
|
449
|
+
else
|
450
|
+
{
|
451
|
+
prevChecked = true;
|
452
|
+
m_Database.Volumes.DeleteFrontal(numTempVolumes);
|
453
|
+
numTempVolumes = 0;
|
454
|
+
}
|
455
|
+
}
|
286
456
|
}
|
287
|
-
|
457
|
+
|
458
|
+
if (!otherArc)
|
288
459
|
{
|
289
|
-
const
|
460
|
+
const CInArcInfo &ai = m_Database.Volumes.Back().ArcInfo;
|
290
461
|
if (ai.IsThereNext())
|
291
|
-
|
462
|
+
otherArc = &ai.NextArc;
|
292
463
|
}
|
293
|
-
|
464
|
+
|
465
|
+
if (!otherArc)
|
294
466
|
break;
|
295
|
-
const UString fullName = MultiByteToUnicodeString(otherArchive->FileName, CP_ACP);
|
296
467
|
if (!openVolumeCallback)
|
297
468
|
break;
|
469
|
+
// printf("\n%s", otherArc->FileName);
|
470
|
+
const UString fullName = MultiByteToUnicodeString(otherArc->FileName, CP_ACP);
|
471
|
+
|
472
|
+
if (!startVolName_was_Requested)
|
473
|
+
{
|
474
|
+
// some "bad" cab example can contain the link to itself.
|
475
|
+
startVolName_was_Requested = true;
|
476
|
+
{
|
477
|
+
NCOM::CPropVariant prop;
|
478
|
+
RINOK(openVolumeCallback->GetProperty(kpidName, &prop));
|
479
|
+
if (prop.vt == VT_BSTR)
|
480
|
+
startVolName = prop.bstrVal;
|
481
|
+
}
|
482
|
+
if (fullName == startVolName)
|
483
|
+
break;
|
484
|
+
}
|
298
485
|
|
299
486
|
HRESULT result = openVolumeCallback->GetStream(fullName, &nextStream);
|
300
487
|
if (result == S_OK)
|
301
488
|
break;
|
302
489
|
if (result != S_FALSE)
|
303
490
|
return result;
|
491
|
+
|
492
|
+
if (!_errorMessage.IsEmpty())
|
493
|
+
_errorMessage.Add_LF();
|
494
|
+
_errorMessage.AddAscii("Can't open volume: ");
|
495
|
+
_errorMessage += fullName;
|
496
|
+
|
304
497
|
if (prevChecked)
|
305
498
|
break;
|
306
499
|
prevChecked = true;
|
500
|
+
if (numTempVolumes != 0)
|
501
|
+
{
|
502
|
+
m_Database.Volumes.DeleteFrontal(numTempVolumes);
|
503
|
+
numTempVolumes = 0;
|
504
|
+
}
|
307
505
|
}
|
506
|
+
|
507
|
+
} // read nextStream iteration
|
508
|
+
|
509
|
+
if (numTempVolumes != 0)
|
510
|
+
{
|
511
|
+
m_Database.Volumes.DeleteFrontal(numTempVolumes);
|
512
|
+
numTempVolumes = 0;
|
308
513
|
}
|
309
|
-
if (
|
514
|
+
if (m_Database.Volumes.IsEmpty())
|
515
|
+
return S_FALSE;
|
516
|
+
else
|
310
517
|
{
|
311
518
|
m_Database.FillSortAndShrink();
|
312
519
|
if (!m_Database.Check())
|
313
|
-
|
520
|
+
return S_FALSE;
|
314
521
|
}
|
315
522
|
}
|
316
|
-
catch(...)
|
317
|
-
{
|
318
|
-
res = S_FALSE;
|
319
|
-
}
|
320
|
-
if (res != S_OK)
|
321
|
-
{
|
322
|
-
Close();
|
323
|
-
return res;
|
324
|
-
}
|
325
523
|
COM_TRY_END
|
326
524
|
return S_OK;
|
327
525
|
}
|
328
526
|
|
329
527
|
STDMETHODIMP CHandler::Close()
|
330
528
|
{
|
529
|
+
_errorMessage.Empty();
|
530
|
+
_isArc = false;
|
531
|
+
_errorInHeaders = false;
|
532
|
+
_unexpectedEnd = false;
|
533
|
+
// _mainVolIndex = -1;
|
534
|
+
_phySize = 0;
|
535
|
+
_offset = 0;
|
536
|
+
|
331
537
|
m_Database.Clear();
|
332
538
|
return S_OK;
|
333
539
|
}
|
@@ -346,12 +552,12 @@ private:
|
|
346
552
|
|
347
553
|
Byte *TempBuf;
|
348
554
|
UInt32 TempBufSize;
|
349
|
-
|
555
|
+
unsigned NumIdenticalFiles;
|
350
556
|
bool TempBufMode;
|
351
557
|
UInt32 m_BufStartFolderOffset;
|
352
558
|
|
353
|
-
|
354
|
-
|
559
|
+
unsigned m_StartIndex;
|
560
|
+
unsigned m_CurrentIndex;
|
355
561
|
CMyComPtr<IArchiveExtractCallback> m_ExtractCallback;
|
356
562
|
bool m_TestMode;
|
357
563
|
|
@@ -381,21 +587,23 @@ public:
|
|
381
587
|
void Init(
|
382
588
|
const CMvDatabaseEx *database,
|
383
589
|
const CRecordVector<bool> *extractStatuses,
|
384
|
-
|
590
|
+
unsigned startIndex,
|
385
591
|
UInt64 folderSize,
|
386
592
|
IArchiveExtractCallback *extractCallback,
|
387
593
|
bool testMode);
|
388
|
-
HRESULT FlushCorrupted();
|
594
|
+
HRESULT FlushCorrupted(unsigned folderIndex);
|
389
595
|
HRESULT Unsupported();
|
390
596
|
|
597
|
+
bool NeedMoreWrite() const { return (m_FolderSize > m_PosInFolder); }
|
391
598
|
UInt64 GetRemain() const { return m_FolderSize - m_PosInFolder; }
|
392
599
|
UInt64 GetPosInFolder() const { return m_PosInFolder; }
|
393
600
|
};
|
394
601
|
|
602
|
+
|
395
603
|
void CFolderOutStream::Init(
|
396
604
|
const CMvDatabaseEx *database,
|
397
605
|
const CRecordVector<bool> *extractStatuses,
|
398
|
-
|
606
|
+
unsigned startIndex,
|
399
607
|
UInt64 folderSize,
|
400
608
|
IArchiveExtractCallback *extractCallback,
|
401
609
|
bool testMode)
|
@@ -416,6 +624,7 @@ void CFolderOutStream::Init(
|
|
416
624
|
NumIdenticalFiles = 0;
|
417
625
|
}
|
418
626
|
|
627
|
+
|
419
628
|
HRESULT CFolderOutStream::CloseFileWithResOp(Int32 resOp)
|
420
629
|
{
|
421
630
|
m_RealOutStream.Release();
|
@@ -424,6 +633,7 @@ HRESULT CFolderOutStream::CloseFileWithResOp(Int32 resOp)
|
|
424
633
|
return m_ExtractCallback->SetOperationResult(resOp);
|
425
634
|
}
|
426
635
|
|
636
|
+
|
427
637
|
HRESULT CFolderOutStream::CloseFile()
|
428
638
|
{
|
429
639
|
return CloseFileWithResOp(m_IsOk ?
|
@@ -431,14 +641,16 @@ HRESULT CFolderOutStream::CloseFile()
|
|
431
641
|
NExtract::NOperationResult::kDataError);
|
432
642
|
}
|
433
643
|
|
644
|
+
|
434
645
|
HRESULT CFolderOutStream::OpenFile()
|
435
646
|
{
|
436
647
|
if (NumIdenticalFiles == 0)
|
437
648
|
{
|
438
649
|
const CMvItem &mvItem = m_Database->Items[m_StartIndex + m_CurrentIndex];
|
439
650
|
const CItem &item = m_Database->Volumes[mvItem.VolumeIndex].Items[mvItem.ItemIndex];
|
440
|
-
|
441
|
-
|
651
|
+
unsigned numExtractItems = 0;
|
652
|
+
unsigned curIndex;
|
653
|
+
|
442
654
|
for (curIndex = m_CurrentIndex; curIndex < m_ExtractStatuses->Size(); curIndex++)
|
443
655
|
{
|
444
656
|
const CMvItem &mvItem2 = m_Database->Items[m_StartIndex + curIndex];
|
@@ -450,10 +662,12 @@ HRESULT CFolderOutStream::OpenFile()
|
|
450
662
|
if (!m_TestMode && (*m_ExtractStatuses)[curIndex])
|
451
663
|
numExtractItems++;
|
452
664
|
}
|
665
|
+
|
453
666
|
NumIdenticalFiles = (curIndex - m_CurrentIndex);
|
454
667
|
if (NumIdenticalFiles == 0)
|
455
668
|
NumIdenticalFiles = 1;
|
456
669
|
TempBufMode = false;
|
670
|
+
|
457
671
|
if (numExtractItems > 1)
|
458
672
|
{
|
459
673
|
if (!TempBuf || item.Size > TempBufSize)
|
@@ -493,6 +707,7 @@ HRESULT CFolderOutStream::OpenFile()
|
|
493
707
|
return m_ExtractCallback->PrepareOperation(askMode);
|
494
708
|
}
|
495
709
|
|
710
|
+
|
496
711
|
HRESULT CFolderOutStream::WriteEmptyFiles()
|
497
712
|
{
|
498
713
|
if (m_FileIsOpen)
|
@@ -512,20 +727,22 @@ HRESULT CFolderOutStream::WriteEmptyFiles()
|
|
512
727
|
return S_OK;
|
513
728
|
}
|
514
729
|
|
515
|
-
|
730
|
+
|
516
731
|
HRESULT CFolderOutStream::Write2(const void *data, UInt32 size, UInt32 *processedSize, bool isOK)
|
517
732
|
{
|
518
733
|
COM_TRY_BEGIN
|
734
|
+
|
519
735
|
UInt32 realProcessed = 0;
|
520
|
-
if (processedSize
|
736
|
+
if (processedSize)
|
521
737
|
*processedSize = 0;
|
738
|
+
|
522
739
|
while (size != 0)
|
523
740
|
{
|
524
741
|
if (m_FileIsOpen)
|
525
742
|
{
|
526
743
|
UInt32 numBytesToWrite = MyMin(m_RemainFileSize, size);
|
527
744
|
HRESULT res = S_OK;
|
528
|
-
if (numBytesToWrite
|
745
|
+
if (numBytesToWrite != 0)
|
529
746
|
{
|
530
747
|
if (!isOK)
|
531
748
|
m_IsOk = false;
|
@@ -539,14 +756,16 @@ HRESULT CFolderOutStream::Write2(const void *data, UInt32 size, UInt32 *processe
|
|
539
756
|
memcpy(TempBuf + (m_PosInFolder - m_BufStartFolderOffset), data, numBytesToWrite);
|
540
757
|
}
|
541
758
|
realProcessed += numBytesToWrite;
|
542
|
-
if (processedSize
|
759
|
+
if (processedSize)
|
543
760
|
*processedSize = realProcessed;
|
544
761
|
data = (const void *)((const Byte *)data + numBytesToWrite);
|
545
762
|
size -= numBytesToWrite;
|
546
763
|
m_RemainFileSize -= numBytesToWrite;
|
547
764
|
m_PosInFolder += numBytesToWrite;
|
765
|
+
|
548
766
|
if (res != S_OK)
|
549
767
|
return res;
|
768
|
+
|
550
769
|
if (m_RemainFileSize == 0)
|
551
770
|
{
|
552
771
|
RINOK(CloseFile());
|
@@ -561,23 +780,34 @@ HRESULT CFolderOutStream::Write2(const void *data, UInt32 size, UInt32 *processe
|
|
561
780
|
|
562
781
|
if (!TempBuf && TempBufMode && m_RealOutStream)
|
563
782
|
{
|
564
|
-
RINOK(CloseFileWithResOp(NExtract::NOperationResult::
|
783
|
+
RINOK(CloseFileWithResOp(NExtract::NOperationResult::kUnsupportedMethod));
|
565
784
|
}
|
566
785
|
else
|
567
786
|
{
|
568
787
|
RINOK(CloseFile());
|
569
788
|
}
|
789
|
+
|
570
790
|
RINOK(result);
|
571
791
|
}
|
792
|
+
|
572
793
|
TempBufMode = false;
|
573
794
|
}
|
795
|
+
|
574
796
|
if (realProcessed > 0)
|
575
797
|
break; // with this break this function works as Write-Part
|
576
798
|
}
|
577
799
|
else
|
578
800
|
{
|
579
801
|
if (m_CurrentIndex >= m_ExtractStatuses->Size())
|
580
|
-
|
802
|
+
{
|
803
|
+
// we ignore extra data;
|
804
|
+
realProcessed += size;
|
805
|
+
if (processedSize)
|
806
|
+
*processedSize = realProcessed;
|
807
|
+
m_PosInFolder += size;
|
808
|
+
return S_OK;
|
809
|
+
// return E_FAIL;
|
810
|
+
}
|
581
811
|
|
582
812
|
const CMvItem &mvItem = m_Database->Items[m_StartIndex + m_CurrentIndex];
|
583
813
|
const CItem &item = m_Database->Volumes[mvItem.VolumeIndex].Items[mvItem.ItemIndex];
|
@@ -585,18 +815,21 @@ HRESULT CFolderOutStream::Write2(const void *data, UInt32 size, UInt32 *processe
|
|
585
815
|
m_RemainFileSize = item.Size;
|
586
816
|
|
587
817
|
UInt32 fileOffset = item.Offset;
|
818
|
+
|
588
819
|
if (fileOffset < m_PosInFolder)
|
589
820
|
return E_FAIL;
|
821
|
+
|
590
822
|
if (fileOffset > m_PosInFolder)
|
591
823
|
{
|
592
824
|
UInt32 numBytesToWrite = MyMin(fileOffset - (UInt32)m_PosInFolder, size);
|
593
825
|
realProcessed += numBytesToWrite;
|
594
|
-
if (processedSize
|
826
|
+
if (processedSize)
|
595
827
|
*processedSize = realProcessed;
|
596
828
|
data = (const void *)((const Byte *)data + numBytesToWrite);
|
597
829
|
size -= numBytesToWrite;
|
598
830
|
m_PosInFolder += numBytesToWrite;
|
599
831
|
}
|
832
|
+
|
600
833
|
if (fileOffset == m_PosInFolder)
|
601
834
|
{
|
602
835
|
RINOK(OpenFile());
|
@@ -606,41 +839,58 @@ HRESULT CFolderOutStream::Write2(const void *data, UInt32 size, UInt32 *processe
|
|
606
839
|
}
|
607
840
|
}
|
608
841
|
}
|
842
|
+
|
609
843
|
return WriteEmptyFiles();
|
844
|
+
|
610
845
|
COM_TRY_END
|
611
846
|
}
|
612
847
|
|
848
|
+
|
613
849
|
STDMETHODIMP CFolderOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize)
|
614
850
|
{
|
615
851
|
return Write2(data, size, processedSize, true);
|
616
852
|
}
|
617
853
|
|
618
|
-
|
854
|
+
|
855
|
+
HRESULT CFolderOutStream::FlushCorrupted(unsigned folderIndex)
|
619
856
|
{
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
857
|
+
if (!NeedMoreWrite())
|
858
|
+
{
|
859
|
+
CMyComPtr<IArchiveExtractCallbackMessage> callbackMessage;
|
860
|
+
m_ExtractCallback.QueryInterface(IID_IArchiveExtractCallbackMessage, &callbackMessage);
|
861
|
+
if (callbackMessage)
|
862
|
+
{
|
863
|
+
RINOK(callbackMessage->ReportExtractResult(NEventIndexType::kBlockIndex, folderIndex, NExtract::NOperationResult::kDataError));
|
864
|
+
}
|
865
|
+
return S_OK;
|
866
|
+
}
|
867
|
+
|
868
|
+
const unsigned kBufSize = (1 << 12);
|
869
|
+
Byte buf[kBufSize];
|
870
|
+
for (unsigned i = 0; i < kBufSize; i++)
|
871
|
+
buf[i] = 0;
|
872
|
+
|
624
873
|
for (;;)
|
625
874
|
{
|
626
|
-
|
627
|
-
if (remain == 0)
|
875
|
+
if (!NeedMoreWrite())
|
628
876
|
return S_OK;
|
629
|
-
|
877
|
+
UInt64 remain = GetRemain();
|
878
|
+
UInt32 size = (remain < kBufSize ? (UInt32)remain : (UInt32)kBufSize);
|
630
879
|
UInt32 processedSizeLocal = 0;
|
631
|
-
RINOK(Write2(
|
880
|
+
RINOK(Write2(buf, size, &processedSizeLocal, false));
|
632
881
|
}
|
633
882
|
}
|
634
883
|
|
884
|
+
|
635
885
|
HRESULT CFolderOutStream::Unsupported()
|
636
886
|
{
|
637
|
-
while(m_CurrentIndex < m_ExtractStatuses->Size())
|
887
|
+
while (m_CurrentIndex < m_ExtractStatuses->Size())
|
638
888
|
{
|
639
889
|
HRESULT result = OpenFile();
|
640
890
|
if (result != S_FALSE && result != S_OK)
|
641
891
|
return result;
|
642
892
|
m_RealOutStream.Release();
|
643
|
-
RINOK(m_ExtractCallback->SetOperationResult(NExtract::NOperationResult::
|
893
|
+
RINOK(m_ExtractCallback->SetOperationResult(NExtract::NOperationResult::kUnsupportedMethod));
|
644
894
|
m_CurrentIndex++;
|
645
895
|
}
|
646
896
|
return S_OK;
|
@@ -651,10 +901,11 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
651
901
|
Int32 testModeSpec, IArchiveExtractCallback *extractCallback)
|
652
902
|
{
|
653
903
|
COM_TRY_BEGIN
|
654
|
-
|
904
|
+
|
905
|
+
bool allFilesMode = (numItems == (UInt32)(Int32)-1);
|
655
906
|
if (allFilesMode)
|
656
907
|
numItems = m_Database.Items.Size();
|
657
|
-
if(numItems == 0)
|
908
|
+
if (numItems == 0)
|
658
909
|
return S_OK;
|
659
910
|
bool testMode = (testModeSpec != 0);
|
660
911
|
UInt64 totalUnPacked = 0;
|
@@ -662,9 +913,10 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
662
913
|
UInt32 i;
|
663
914
|
int lastFolder = -2;
|
664
915
|
UInt64 lastFolderSize = 0;
|
665
|
-
|
916
|
+
|
917
|
+
for (i = 0; i < numItems; i++)
|
666
918
|
{
|
667
|
-
|
919
|
+
unsigned index = allFilesMode ? i : indices[i];
|
668
920
|
const CMvItem &mvItem = m_Database.Items[index];
|
669
921
|
const CItem &item = m_Database.Volumes[mvItem.VolumeIndex].Items[mvItem.ItemIndex];
|
670
922
|
if (item.IsDir())
|
@@ -675,6 +927,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
675
927
|
lastFolder = folderIndex;
|
676
928
|
lastFolderSize = item.GetEndOffset();
|
677
929
|
}
|
930
|
+
|
678
931
|
totalUnPacked += lastFolderSize;
|
679
932
|
|
680
933
|
extractCallback->SetTotal(totalUnPacked);
|
@@ -694,10 +947,10 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
694
947
|
CMyComPtr<ICompressCoder> deflateDecoder;
|
695
948
|
|
696
949
|
NCompress::NLzx::CDecoder *lzxDecoderSpec = NULL;
|
697
|
-
CMyComPtr<
|
950
|
+
CMyComPtr<IUnknown> lzxDecoder;
|
698
951
|
|
699
952
|
NCompress::NQuantum::CDecoder *quantumDecoderSpec = NULL;
|
700
|
-
CMyComPtr<
|
953
|
+
CMyComPtr<IUnknown> quantumDecoder;
|
701
954
|
|
702
955
|
CCabBlockInStream *cabBlockInStreamSpec = new CCabBlockInStream();
|
703
956
|
CMyComPtr<ISequentialInStream> cabBlockInStream = cabBlockInStreamSpec;
|
@@ -705,13 +958,21 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
705
958
|
return E_OUTOFMEMORY;
|
706
959
|
|
707
960
|
CRecordVector<bool> extractStatuses;
|
708
|
-
|
961
|
+
|
962
|
+
for (i = 0;;)
|
709
963
|
{
|
710
|
-
|
964
|
+
lps->OutSize = totalUnPacked;
|
965
|
+
lps->InSize = totalPacked;
|
966
|
+
RINOK(lps->SetCur());
|
967
|
+
|
968
|
+
if (i >= numItems)
|
969
|
+
break;
|
970
|
+
|
971
|
+
unsigned index = allFilesMode ? i : indices[i];
|
711
972
|
|
712
973
|
const CMvItem &mvItem = m_Database.Items[index];
|
713
974
|
const CDatabaseEx &db = m_Database.Volumes[mvItem.VolumeIndex];
|
714
|
-
|
975
|
+
unsigned itemIndex = mvItem.ItemIndex;
|
715
976
|
const CItem &item = db.Items[itemIndex];
|
716
977
|
|
717
978
|
i++;
|
@@ -727,7 +988,9 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
727
988
|
RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK));
|
728
989
|
continue;
|
729
990
|
}
|
991
|
+
|
730
992
|
int folderIndex = m_Database.GetFolderIndex(&mvItem);
|
993
|
+
|
731
994
|
if (folderIndex < 0)
|
732
995
|
{
|
733
996
|
// If we need previous archive
|
@@ -741,22 +1004,24 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
741
1004
|
RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kDataError));
|
742
1005
|
continue;
|
743
1006
|
}
|
744
|
-
|
745
|
-
|
1007
|
+
|
1008
|
+
unsigned startIndex2 = m_Database.FolderStartFileIndex[folderIndex];
|
1009
|
+
unsigned startIndex = startIndex2;
|
746
1010
|
extractStatuses.Clear();
|
747
1011
|
for (; startIndex < index; startIndex++)
|
748
1012
|
extractStatuses.Add(false);
|
749
1013
|
extractStatuses.Add(true);
|
750
1014
|
startIndex++;
|
751
1015
|
UInt64 curUnpack = item.GetEndOffset();
|
752
|
-
|
1016
|
+
|
1017
|
+
for (; i < numItems; i++)
|
753
1018
|
{
|
754
|
-
|
755
|
-
const CMvItem &
|
756
|
-
const CItem &
|
757
|
-
if (
|
1019
|
+
unsigned indexNext = allFilesMode ? i : indices[i];
|
1020
|
+
const CMvItem &mvItem2 = m_Database.Items[indexNext];
|
1021
|
+
const CItem &item2 = m_Database.Volumes[mvItem2.VolumeIndex].Items[mvItem2.ItemIndex];
|
1022
|
+
if (item2.IsDir())
|
758
1023
|
continue;
|
759
|
-
int newFolderIndex = m_Database.GetFolderIndex(&
|
1024
|
+
int newFolderIndex = m_Database.GetFolderIndex(&mvItem2);
|
760
1025
|
|
761
1026
|
if (newFolderIndex != folderIndex)
|
762
1027
|
break;
|
@@ -764,68 +1029,74 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
764
1029
|
extractStatuses.Add(false);
|
765
1030
|
extractStatuses.Add(true);
|
766
1031
|
startIndex++;
|
767
|
-
curUnpack =
|
1032
|
+
curUnpack = item2.GetEndOffset();
|
768
1033
|
}
|
769
1034
|
|
770
|
-
lps->OutSize = totalUnPacked;
|
771
|
-
lps->InSize = totalPacked;
|
772
|
-
RINOK(lps->SetCur());
|
773
|
-
|
774
1035
|
CFolderOutStream *cabFolderOutStream = new CFolderOutStream;
|
775
1036
|
CMyComPtr<ISequentialOutStream> outStream(cabFolderOutStream);
|
776
1037
|
|
777
|
-
|
1038
|
+
unsigned folderIndex2 = item.GetFolderIndex(db.Folders.Size());
|
1039
|
+
const CFolder &folder = db.Folders[folderIndex2];
|
778
1040
|
|
779
1041
|
cabFolderOutStream->Init(&m_Database, &extractStatuses, startIndex2,
|
780
1042
|
curUnpack, extractCallback, testMode);
|
781
1043
|
|
782
1044
|
cabBlockInStreamSpec->MsZip = false;
|
783
|
-
|
1045
|
+
HRESULT res = S_OK;
|
1046
|
+
|
1047
|
+
switch (folder.GetMethod())
|
784
1048
|
{
|
785
|
-
case NHeader::
|
1049
|
+
case NHeader::NMethod::kNone:
|
786
1050
|
break;
|
787
|
-
|
788
|
-
|
1051
|
+
|
1052
|
+
case NHeader::NMethod::kMSZip:
|
1053
|
+
if (!deflateDecoder)
|
789
1054
|
{
|
790
1055
|
deflateDecoderSpec = new NCompress::NDeflate::NDecoder::CCOMCoder;
|
791
1056
|
deflateDecoder = deflateDecoderSpec;
|
792
1057
|
}
|
793
1058
|
cabBlockInStreamSpec->MsZip = true;
|
794
1059
|
break;
|
795
|
-
|
796
|
-
|
1060
|
+
|
1061
|
+
case NHeader::NMethod::kLZX:
|
1062
|
+
if (!lzxDecoder)
|
797
1063
|
{
|
798
1064
|
lzxDecoderSpec = new NCompress::NLzx::CDecoder;
|
799
1065
|
lzxDecoder = lzxDecoderSpec;
|
800
1066
|
}
|
801
|
-
|
1067
|
+
res = lzxDecoderSpec->SetParams_and_Alloc(folder.MethodMinor);
|
802
1068
|
break;
|
803
|
-
|
804
|
-
|
1069
|
+
|
1070
|
+
case NHeader::NMethod::kQuantum:
|
1071
|
+
if (!quantumDecoder)
|
805
1072
|
{
|
806
1073
|
quantumDecoderSpec = new NCompress::NQuantum::CDecoder;
|
807
1074
|
quantumDecoder = quantumDecoderSpec;
|
808
1075
|
}
|
809
|
-
quantumDecoderSpec->SetParams(folder.
|
1076
|
+
res = quantumDecoderSpec->SetParams(folder.MethodMinor);
|
810
1077
|
break;
|
1078
|
+
|
811
1079
|
default:
|
812
|
-
|
813
|
-
|
814
|
-
totalUnPacked += curUnpack;
|
815
|
-
continue;
|
816
|
-
}
|
1080
|
+
res = E_INVALIDARG;
|
1081
|
+
break;
|
817
1082
|
}
|
818
1083
|
|
819
|
-
|
820
|
-
|
821
|
-
|
1084
|
+
if (res == E_INVALIDARG)
|
1085
|
+
{
|
1086
|
+
RINOK(cabFolderOutStream->Unsupported());
|
1087
|
+
totalUnPacked += curUnpack;
|
1088
|
+
continue;
|
1089
|
+
}
|
1090
|
+
RINOK(res);
|
822
1091
|
|
823
1092
|
{
|
824
|
-
|
1093
|
+
unsigned volIndex = mvItem.VolumeIndex;
|
825
1094
|
int locFolderIndex = item.GetFolderIndex(db.Folders.Size());
|
826
1095
|
bool keepHistory = false;
|
827
1096
|
bool keepInputBuffer = false;
|
828
|
-
|
1097
|
+
bool thereWasNotAlignedChunk = false;
|
1098
|
+
|
1099
|
+
for (UInt32 bl = 0; cabFolderOutStream->NeedMoreWrite();)
|
829
1100
|
{
|
830
1101
|
if (volIndex >= m_Database.Volumes.Size())
|
831
1102
|
{
|
@@ -833,30 +1104,41 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
833
1104
|
break;
|
834
1105
|
}
|
835
1106
|
|
836
|
-
const CDatabaseEx &
|
837
|
-
const CFolder &
|
838
|
-
|
1107
|
+
const CDatabaseEx &db2 = m_Database.Volumes[volIndex];
|
1108
|
+
const CFolder &folder2 = db2.Folders[locFolderIndex];
|
1109
|
+
|
1110
|
+
if (bl == 0)
|
839
1111
|
{
|
840
|
-
cabBlockInStreamSpec->
|
841
|
-
|
842
|
-
RINOK(db.Stream->Seek(db.StartPosition + folder.DataStart, STREAM_SEEK_SET, NULL));
|
1112
|
+
cabBlockInStreamSpec->ReservedSize = db2.ArcInfo.GetDataBlockReserveSize();
|
1113
|
+
RINOK(db2.Stream->Seek(db2.StartPosition + folder2.DataStart, STREAM_SEEK_SET, NULL));
|
843
1114
|
}
|
844
|
-
|
1115
|
+
|
1116
|
+
if (bl == folder2.NumDataBlocks)
|
845
1117
|
{
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
1118
|
+
/*
|
1119
|
+
CFolder::NumDataBlocks (CFFOLDER::cCFData in CAB specification) is 16-bit.
|
1120
|
+
But there are some big CAB archives from MS that contain more
|
1121
|
+
than (0xFFFF) CFDATA blocks in folder.
|
1122
|
+
Old cab extracting software can show error (or ask next volume)
|
1123
|
+
but cab extracting library in new Windows ignores this error.
|
1124
|
+
15.00 : We also try to ignore such error, if archive is not multi-volume.
|
1125
|
+
*/
|
1126
|
+
if (m_Database.Volumes.Size() > 1)
|
1127
|
+
{
|
1128
|
+
volIndex++;
|
1129
|
+
locFolderIndex = 0;
|
1130
|
+
bl = 0;
|
1131
|
+
continue;
|
1132
|
+
}
|
850
1133
|
}
|
851
|
-
f++;
|
852
|
-
|
853
|
-
cabBlockInStreamSpec->DataError = false;
|
854
1134
|
|
1135
|
+
bl++;
|
1136
|
+
|
855
1137
|
if (!keepInputBuffer)
|
856
1138
|
cabBlockInStreamSpec->InitForNewBlock();
|
857
1139
|
|
858
1140
|
UInt32 packSize, unpackSize;
|
859
|
-
res = cabBlockInStreamSpec->PreRead(packSize, unpackSize);
|
1141
|
+
res = cabBlockInStreamSpec->PreRead(db2.Stream, packSize, unpackSize);
|
860
1142
|
if (res == S_FALSE)
|
861
1143
|
break;
|
862
1144
|
RINOK(res);
|
@@ -871,55 +1153,105 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
|
|
871
1153
|
lps->InSize = totalPacked;
|
872
1154
|
RINOK(lps->SetCur());
|
873
1155
|
|
874
|
-
UInt64 unpackRemain = cabFolderOutStream->GetRemain();
|
875
|
-
|
876
1156
|
const UInt32 kBlockSizeMax = (1 << 15);
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
1157
|
+
|
1158
|
+
/* We don't try to reduce last block.
|
1159
|
+
Note that LZX converts data with x86 filter.
|
1160
|
+
and filter needs larger input data than reduced size.
|
1161
|
+
It's simpler to decompress full chunk here.
|
1162
|
+
also we need full block for quantum for more integrity checks */
|
1163
|
+
|
1164
|
+
if (unpackSize > kBlockSizeMax)
|
1165
|
+
{
|
1166
|
+
res = S_FALSE;
|
1167
|
+
break;
|
1168
|
+
}
|
1169
|
+
|
1170
|
+
if (unpackSize != kBlockSizeMax)
|
1171
|
+
{
|
1172
|
+
if (thereWasNotAlignedChunk)
|
1173
|
+
{
|
1174
|
+
res = S_FALSE;
|
1175
|
+
break;
|
1176
|
+
}
|
1177
|
+
thereWasNotAlignedChunk = true;
|
1178
|
+
}
|
1179
|
+
|
1180
|
+
UInt64 unpackSize64 = unpackSize;
|
1181
|
+
UInt32 packSizeChunk = cabBlockInStreamSpec->GetPackSizeAvail();
|
1182
|
+
|
1183
|
+
switch (folder2.GetMethod())
|
883
1184
|
{
|
884
|
-
case NHeader::
|
885
|
-
res = copyCoder->Code(cabBlockInStream, outStream, NULL, &
|
1185
|
+
case NHeader::NMethod::kNone:
|
1186
|
+
res = copyCoder->Code(cabBlockInStream, outStream, NULL, &unpackSize64, NULL);
|
886
1187
|
break;
|
887
|
-
|
888
|
-
|
889
|
-
|
1188
|
+
|
1189
|
+
case NHeader::NMethod::kMSZip:
|
1190
|
+
deflateDecoderSpec->Set_KeepHistory(keepHistory);
|
1191
|
+
/* v9.31: now we follow MSZIP specification that requires to finish deflate stream at the end of each block.
|
1192
|
+
But PyCabArc can create CAB archives that doesn't have finish marker at the end of block.
|
1193
|
+
Cabarc probably ignores such errors in cab archives.
|
1194
|
+
Maybe we also should ignore that error?
|
1195
|
+
Or we should extract full file and show the warning? */
|
1196
|
+
deflateDecoderSpec->Set_NeedFinishInput(true);
|
1197
|
+
res = deflateDecoder->Code(cabBlockInStream, outStream, NULL, &unpackSize64, NULL);
|
1198
|
+
if (res == S_OK)
|
1199
|
+
{
|
1200
|
+
if (!deflateDecoderSpec->IsFinished())
|
1201
|
+
res = S_FALSE;
|
1202
|
+
if (!deflateDecoderSpec->IsFinalBlock())
|
1203
|
+
res = S_FALSE;
|
1204
|
+
}
|
890
1205
|
break;
|
891
|
-
|
1206
|
+
|
1207
|
+
case NHeader::NMethod::kLZX:
|
892
1208
|
lzxDecoderSpec->SetKeepHistory(keepHistory);
|
893
|
-
|
1209
|
+
lzxDecoderSpec->KeepHistoryForNext = true;
|
1210
|
+
|
1211
|
+
res = lzxDecoderSpec->Code(cabBlockInStreamSpec->GetData(), packSizeChunk, unpackSize);
|
1212
|
+
|
1213
|
+
if (res == S_OK)
|
1214
|
+
res = WriteStream(outStream,
|
1215
|
+
lzxDecoderSpec->GetUnpackData(),
|
1216
|
+
lzxDecoderSpec->GetUnpackSize());
|
1217
|
+
break;
|
1218
|
+
|
1219
|
+
case NHeader::NMethod::kQuantum:
|
1220
|
+
res = quantumDecoderSpec->Code(cabBlockInStreamSpec->GetData(),
|
1221
|
+
packSizeChunk, outStream, unpackSize, keepHistory);
|
894
1222
|
break;
|
895
|
-
case NHeader::NCompressionMethodMajor::kQuantum:
|
896
|
-
quantumDecoderSpec->SetKeepHistory(keepHistory);
|
897
|
-
res = quantumDecoder->Code(cabBlockInStream, outStream, NULL, &unpackRemain, NULL);
|
898
|
-
break;
|
899
1223
|
}
|
1224
|
+
|
900
1225
|
if (res != S_OK)
|
901
1226
|
{
|
902
1227
|
if (res != S_FALSE)
|
903
1228
|
RINOK(res);
|
904
1229
|
break;
|
905
1230
|
}
|
1231
|
+
|
906
1232
|
keepHistory = true;
|
907
1233
|
}
|
1234
|
+
|
908
1235
|
if (res == S_OK)
|
909
1236
|
{
|
910
1237
|
RINOK(cabFolderOutStream->WriteEmptyFiles());
|
911
1238
|
}
|
912
1239
|
}
|
913
|
-
|
1240
|
+
|
1241
|
+
if (res != S_OK || cabFolderOutStream->NeedMoreWrite())
|
914
1242
|
{
|
915
|
-
RINOK(cabFolderOutStream->FlushCorrupted());
|
1243
|
+
RINOK(cabFolderOutStream->FlushCorrupted(folderIndex2));
|
916
1244
|
}
|
1245
|
+
|
917
1246
|
totalUnPacked += curUnpack;
|
918
1247
|
}
|
1248
|
+
|
919
1249
|
return S_OK;
|
1250
|
+
|
920
1251
|
COM_TRY_END
|
921
1252
|
}
|
922
1253
|
|
1254
|
+
|
923
1255
|
STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
|
924
1256
|
{
|
925
1257
|
*numItems = m_Database.Items.Size();
|