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.
Files changed (887) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +49 -0
  3. data/.github/workflows/release.yml +21 -0
  4. data/README.md +13 -2
  5. data/Rakefile +2 -0
  6. data/ext/p7zip/C/7zBuf.h +4 -8
  7. data/ext/p7zip/C/7zBuf2.c +9 -3
  8. data/ext/p7zip/C/7zCrc.c +84 -32
  9. data/ext/p7zip/C/7zCrc.h +2 -2
  10. data/ext/p7zip/C/7zCrcOpt.c +89 -8
  11. data/ext/p7zip/C/7zStream.c +4 -2
  12. data/ext/p7zip/C/{Types.h → 7zTypes.h} +8 -6
  13. data/ext/p7zip/C/7zVersion.h +21 -6
  14. data/ext/p7zip/C/Aes.c +28 -15
  15. data/ext/p7zip/C/Aes.h +2 -2
  16. data/ext/p7zip/C/Alloc.c +60 -12
  17. data/ext/p7zip/C/Alloc.h +6 -7
  18. data/ext/p7zip/C/Bcj2.c +256 -0
  19. data/ext/p7zip/C/Bcj2.h +146 -0
  20. data/ext/p7zip/C/Bcj2Enc.c +312 -0
  21. data/ext/p7zip/C/Blake2.h +48 -0
  22. data/ext/p7zip/C/Blake2s.c +244 -0
  23. data/ext/p7zip/C/Bra.c +2 -0
  24. data/ext/p7zip/C/Bra.h +4 -8
  25. data/ext/p7zip/C/Bra86.c +48 -51
  26. data/ext/p7zip/C/BraIA64.c +3 -1
  27. data/ext/p7zip/C/BwtSort.c +3 -4
  28. data/ext/p7zip/C/BwtSort.h +4 -8
  29. data/ext/p7zip/C/Compiler.h +32 -0
  30. data/ext/p7zip/C/CpuArch.c +50 -7
  31. data/ext/p7zip/C/CpuArch.h +112 -41
  32. data/ext/p7zip/C/Delta.c +2 -0
  33. data/ext/p7zip/C/Delta.h +4 -8
  34. data/ext/p7zip/C/HuffEnc.c +8 -6
  35. data/ext/p7zip/C/HuffEnc.h +4 -8
  36. data/ext/p7zip/C/LzFind.c +391 -108
  37. data/ext/p7zip/C/LzFind.h +20 -18
  38. data/ext/p7zip/C/LzFindMt.c +100 -90
  39. data/ext/p7zip/C/LzFindMt.h +4 -8
  40. data/ext/p7zip/C/LzHash.h +23 -20
  41. data/ext/p7zip/C/Lzma2Dec.c +48 -26
  42. data/ext/p7zip/C/Lzma2Dec.h +4 -8
  43. data/ext/p7zip/C/Lzma2Enc.c +58 -15
  44. data/ext/p7zip/C/Lzma2Enc.h +3 -7
  45. data/ext/p7zip/C/{LzmaUtil/Lzma86Enc.h → Lzma86.h} +47 -14
  46. data/ext/p7zip/C/{LzmaUtil/Lzma86Dec.c → Lzma86Dec.c} +6 -13
  47. data/ext/p7zip/C/{LzmaUtil/Lzma86Enc.c → Lzma86Enc.c} +8 -15
  48. data/ext/p7zip/C/LzmaDec.c +180 -79
  49. data/ext/p7zip/C/LzmaDec.h +4 -8
  50. data/ext/p7zip/C/LzmaEnc.c +230 -147
  51. data/ext/p7zip/C/LzmaEnc.h +6 -8
  52. data/ext/p7zip/C/MtCoder.c +3 -3
  53. data/ext/p7zip/C/Ppmd.h +5 -5
  54. data/ext/p7zip/C/Ppmd7.c +9 -7
  55. data/ext/p7zip/C/Ppmd7.h +3 -3
  56. data/ext/p7zip/C/Ppmd7Dec.c +2 -0
  57. data/ext/p7zip/C/Ppmd7Enc.c +4 -2
  58. data/ext/p7zip/C/Ppmd8.c +34 -31
  59. data/ext/p7zip/C/Ppmd8.h +5 -1
  60. data/ext/p7zip/C/Ppmd8Dec.c +2 -0
  61. data/ext/p7zip/C/Ppmd8Enc.c +2 -0
  62. data/ext/p7zip/C/Precomp.h +10 -0
  63. data/ext/p7zip/C/RotateDefs.h +11 -1
  64. data/ext/p7zip/C/Sha1.c +340 -0
  65. data/ext/p7zip/C/Sha1.h +38 -0
  66. data/ext/p7zip/C/Sha256.c +107 -63
  67. data/ext/p7zip/C/Sha256.h +2 -2
  68. data/ext/p7zip/C/Sort.c +59 -11
  69. data/ext/p7zip/C/Sort.h +8 -10
  70. data/ext/p7zip/C/Threads.h +1 -1
  71. data/ext/p7zip/C/Xz.c +7 -5
  72. data/ext/p7zip/C/Xz.h +40 -17
  73. data/ext/p7zip/C/XzCrc64.c +69 -16
  74. data/ext/p7zip/C/XzCrc64.h +2 -2
  75. data/ext/p7zip/C/XzCrc64Opt.c +69 -0
  76. data/ext/p7zip/C/XzDec.c +93 -55
  77. data/ext/p7zip/C/XzEnc.c +206 -165
  78. data/ext/p7zip/C/XzEnc.h +23 -9
  79. data/ext/p7zip/C/XzIn.c +50 -43
  80. data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.h +37 -13
  81. data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.cpp +392 -181
  82. data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.h +29 -29
  83. data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.cpp +424 -212
  84. data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.h +53 -16
  85. data/ext/p7zip/CPP/7zip/Archive/7z/7zExtract.cpp +312 -174
  86. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.cpp +74 -61
  87. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.h +22 -19
  88. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.cpp +505 -232
  89. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.h +70 -16
  90. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandlerOut.cpp +602 -172
  91. data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.cpp +5 -0
  92. data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.h +54 -3
  93. data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.cpp +981 -616
  94. data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.h +275 -89
  95. data/ext/p7zip/CPP/7zip/Archive/7z/7zItem.h +77 -162
  96. data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.cpp +288 -238
  97. data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.h +189 -20
  98. data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.cpp +59 -49
  99. data/ext/p7zip/CPP/7zip/Archive/7z/7zRegister.cpp +12 -9
  100. data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.cpp +4 -6
  101. data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.h +5 -5
  102. data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.cpp +1743 -447
  103. data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.h +61 -10
  104. data/ext/p7zip/CPP/7zip/Archive/ApmHandler.cpp +84 -120
  105. data/ext/p7zip/CPP/7zip/Archive/ArHandler.cpp +854 -0
  106. data/ext/p7zip/CPP/7zip/Archive/ArchiveExports.cpp +48 -32
  107. data/ext/p7zip/CPP/7zip/Archive/ArjHandler.cpp +519 -340
  108. data/ext/p7zip/CPP/7zip/Archive/Bz2Handler.cpp +223 -203
  109. data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.cpp +50 -139
  110. data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.h +17 -18
  111. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.cpp +566 -234
  112. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.h +10 -1
  113. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.cpp +2 -2
  114. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.h +12 -15
  115. data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.cpp +341 -122
  116. data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.h +81 -66
  117. data/ext/p7zip/CPP/7zip/Archive/Cab/CabItem.h +17 -14
  118. data/ext/p7zip/CPP/7zip/Archive/Cab/CabRegister.cpp +10 -4
  119. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.cpp +190 -83
  120. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.h +7 -1
  121. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.cpp +292 -174
  122. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.h +73 -47
  123. data/ext/p7zip/CPP/7zip/Archive/ComHandler.cpp +886 -0
  124. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.cpp +994 -71
  125. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.h +364 -101
  126. data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.cpp +7 -12
  127. data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.h +4 -3
  128. data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.cpp +6 -6
  129. data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.h +2 -2
  130. data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.cpp +77 -543
  131. data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.h +31 -51
  132. data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +18 -14
  133. data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.cpp +34 -7
  134. data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.h +5 -2
  135. data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.cpp +25 -24
  136. data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.h +8 -3
  137. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.h +1 -0
  138. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp +2 -2
  139. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.h +5 -5
  140. data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -174
  141. data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.h +2 -14
  142. data/ext/p7zip/CPP/7zip/Archive/CpioHandler.cpp +506 -335
  143. data/ext/p7zip/CPP/7zip/Archive/CramfsHandler.cpp +227 -84
  144. data/ext/p7zip/CPP/7zip/Archive/DeflateProps.cpp +0 -115
  145. data/ext/p7zip/CPP/7zip/Archive/DeflateProps.h +0 -29
  146. data/ext/p7zip/CPP/7zip/Archive/DllExports2.cpp +63 -17
  147. data/ext/p7zip/CPP/7zip/Archive/DmgHandler.cpp +1007 -339
  148. data/ext/p7zip/CPP/7zip/Archive/ElfHandler.cpp +618 -177
  149. data/ext/p7zip/CPP/7zip/Archive/ExtHandler.cpp +2867 -0
  150. data/ext/p7zip/CPP/7zip/Archive/FatHandler.cpp +136 -76
  151. data/ext/p7zip/CPP/7zip/Archive/FlvHandler.cpp +132 -150
  152. data/ext/p7zip/CPP/7zip/Archive/GptHandler.cpp +405 -0
  153. data/ext/p7zip/CPP/7zip/Archive/GzHandler.cpp +560 -214
  154. data/ext/p7zip/CPP/7zip/Archive/HandlerCont.cpp +288 -0
  155. data/ext/p7zip/CPP/7zip/Archive/HandlerCont.h +116 -0
  156. data/ext/p7zip/CPP/7zip/Archive/HfsHandler.cpp +1880 -0
  157. data/ext/p7zip/CPP/7zip/Archive/IArchive.h +415 -51
  158. data/ext/p7zip/CPP/7zip/Archive/IhexHandler.cpp +497 -0
  159. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.cpp +158 -71
  160. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.h +2 -1
  161. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.cpp +0 -9
  162. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.h +8 -5
  163. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.cpp +311 -91
  164. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.h +101 -83
  165. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoItem.h +48 -39
  166. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoRegister.cpp +12 -4
  167. data/ext/p7zip/CPP/7zip/Archive/LzhHandler.cpp +127 -114
  168. data/ext/p7zip/CPP/7zip/Archive/LzmaHandler.cpp +264 -121
  169. data/ext/p7zip/CPP/7zip/Archive/MachoHandler.cpp +402 -242
  170. data/ext/p7zip/CPP/7zip/Archive/MbrHandler.cpp +56 -114
  171. data/ext/p7zip/CPP/7zip/Archive/MslzHandler.cpp +230 -90
  172. data/ext/p7zip/CPP/7zip/Archive/MubHandler.cpp +129 -153
  173. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.cpp +179 -58
  174. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.h +36 -7
  175. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.cpp +407 -237
  176. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.h +9 -16
  177. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.cpp +5535 -1098
  178. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.h +345 -81
  179. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisRegister.cpp +11 -4
  180. data/ext/p7zip/CPP/7zip/Archive/NtfsHandler.cpp +1424 -434
  181. data/ext/p7zip/CPP/7zip/Archive/PeHandler.cpp +1831 -521
  182. data/ext/p7zip/CPP/7zip/Archive/PpmdHandler.cpp +50 -35
  183. data/ext/p7zip/CPP/7zip/Archive/QcowHandler.cpp +615 -0
  184. data/ext/p7zip/CPP/7zip/Archive/Rar/Rar5Handler.cpp +2746 -0
  185. data/ext/p7zip/CPP/7zip/Archive/Rar/Rar5Handler.h +411 -0
  186. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.cpp +1241 -355
  187. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.h +70 -20
  188. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.h +38 -34
  189. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.h +34 -16
  190. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVol.h +129 -0
  191. data/ext/p7zip/CPP/7zip/Archive/RpmHandler.cpp +641 -194
  192. data/ext/p7zip/CPP/7zip/Archive/SplitHandler.cpp +174 -181
  193. data/ext/p7zip/CPP/7zip/Archive/SquashfsHandler.cpp +237 -174
  194. data/ext/p7zip/CPP/7zip/Archive/SwfHandler.cpp +471 -192
  195. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.cpp +350 -59
  196. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.h +24 -7
  197. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandlerOut.cpp +79 -27
  198. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.cpp +5 -7
  199. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.h +20 -44
  200. data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.cpp +279 -64
  201. data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.h +10 -1
  202. data/ext/p7zip/CPP/7zip/Archive/Tar/TarItem.h +34 -8
  203. data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.cpp +145 -87
  204. data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.h +13 -5
  205. data/ext/p7zip/CPP/7zip/Archive/Tar/TarRegister.cpp +14 -9
  206. data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.cpp +154 -27
  207. data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.h +10 -6
  208. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.cpp +53 -128
  209. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.h +6 -5
  210. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.cpp +384 -119
  211. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.h +40 -21
  212. data/ext/p7zip/CPP/7zip/Archive/UefiHandler.cpp +1618 -0
  213. data/ext/p7zip/CPP/7zip/Archive/VdiHandler.cpp +362 -0
  214. data/ext/p7zip/CPP/7zip/Archive/VhdHandler.cpp +438 -247
  215. data/ext/p7zip/CPP/7zip/Archive/VmdkHandler.cpp +1518 -0
  216. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.cpp +837 -249
  217. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.h +73 -47
  218. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandlerOut.cpp +1614 -351
  219. data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.cpp +1519 -513
  220. data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.h +498 -139
  221. data/ext/p7zip/CPP/7zip/Archive/Wim/WimRegister.cpp +13 -9
  222. data/ext/p7zip/CPP/7zip/Archive/XarHandler.cpp +272 -128
  223. data/ext/p7zip/CPP/7zip/Archive/XzHandler.cpp +502 -253
  224. data/ext/p7zip/CPP/7zip/Archive/XzHandler.h +65 -0
  225. data/ext/p7zip/CPP/7zip/Archive/ZHandler.cpp +114 -39
  226. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.cpp +118 -134
  227. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.h +6 -0
  228. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipCompressionMode.h +40 -20
  229. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.cpp +541 -274
  230. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.h +13 -40
  231. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp +165 -254
  232. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.h +70 -178
  233. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.cpp +1934 -550
  234. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.h +294 -63
  235. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.cpp +160 -86
  236. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.h +139 -110
  237. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.cpp +177 -154
  238. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.h +50 -18
  239. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipRegister.cpp +18 -9
  240. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.cpp +367 -201
  241. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.h +11 -10
  242. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile +2 -319
  243. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.depend +0 -4962
  244. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.list +1004 -259
  245. data/ext/p7zip/CPP/7zip/Common/CWrappers.cpp +26 -22
  246. data/ext/p7zip/CPP/7zip/Common/CWrappers.h +19 -14
  247. data/ext/p7zip/CPP/7zip/Common/CreateCoder.cpp +298 -130
  248. data/ext/p7zip/CPP/7zip/Common/CreateCoder.h +118 -34
  249. data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.cpp +24 -28
  250. data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.h +5 -5
  251. data/ext/p7zip/CPP/7zip/Common/FileStreams.cpp +268 -65
  252. data/ext/p7zip/CPP/7zip/Common/FileStreams.h +70 -33
  253. data/ext/p7zip/CPP/7zip/Common/FilterCoder.cpp +302 -131
  254. data/ext/p7zip/CPP/7zip/Common/FilterCoder.h +141 -43
  255. data/ext/p7zip/CPP/7zip/Common/InBuffer.cpp +87 -35
  256. data/ext/p7zip/CPP/7zip/Common/InBuffer.h +54 -45
  257. data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.cpp +22 -17
  258. data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.h +5 -5
  259. data/ext/p7zip/CPP/7zip/Common/LimitedStreams.cpp +256 -43
  260. data/ext/p7zip/CPP/7zip/Common/LimitedStreams.h +135 -8
  261. data/ext/p7zip/CPP/7zip/Common/MemBlocks.cpp +5 -5
  262. data/ext/p7zip/CPP/7zip/Common/MemBlocks.h +3 -3
  263. data/ext/p7zip/CPP/7zip/Common/MethodId.cpp +0 -24
  264. data/ext/p7zip/CPP/7zip/Common/MethodId.h +1 -1
  265. data/ext/p7zip/CPP/7zip/Common/MethodProps.cpp +430 -71
  266. data/ext/p7zip/CPP/7zip/Common/MethodProps.h +170 -17
  267. data/ext/p7zip/CPP/7zip/Common/OffsetStream.cpp +8 -4
  268. data/ext/p7zip/CPP/7zip/Common/OffsetStream.h +4 -3
  269. data/ext/p7zip/CPP/7zip/Common/OutBuffer.cpp +26 -31
  270. data/ext/p7zip/CPP/7zip/Common/OutBuffer.h +17 -18
  271. data/ext/p7zip/CPP/7zip/Common/OutMemStream.cpp +5 -5
  272. data/ext/p7zip/CPP/7zip/Common/OutMemStream.h +5 -4
  273. data/ext/p7zip/CPP/7zip/Common/ProgressUtils.cpp +22 -13
  274. data/ext/p7zip/CPP/7zip/Common/ProgressUtils.h +4 -3
  275. data/ext/p7zip/CPP/7zip/Common/PropId.cpp +108 -0
  276. data/ext/p7zip/CPP/7zip/Common/RegisterArc.h +63 -17
  277. data/ext/p7zip/CPP/7zip/Common/RegisterCodec.h +79 -6
  278. data/ext/p7zip/CPP/7zip/Common/StreamBinder.cpp +95 -90
  279. data/ext/p7zip/CPP/7zip/Common/StreamBinder.h +46 -23
  280. data/ext/p7zip/CPP/7zip/Common/StreamObjects.cpp +88 -24
  281. data/ext/p7zip/CPP/7zip/Common/StreamObjects.h +36 -14
  282. data/ext/p7zip/CPP/7zip/Common/StreamUtils.cpp +4 -4
  283. data/ext/p7zip/CPP/7zip/Common/StreamUtils.h +6 -6
  284. data/ext/p7zip/CPP/7zip/Common/UniqBlocks.cpp +57 -0
  285. data/ext/p7zip/CPP/7zip/Common/UniqBlocks.h +26 -0
  286. data/ext/p7zip/CPP/7zip/Common/VirtThread.cpp +8 -6
  287. data/ext/p7zip/CPP/7zip/Common/VirtThread.h +6 -5
  288. data/ext/p7zip/CPP/7zip/Compress/BZip2Const.h +13 -12
  289. data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.h +1 -1
  290. data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.cpp +198 -147
  291. data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.h +60 -27
  292. data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.cpp +111 -116
  293. data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.h +53 -59
  294. data/ext/p7zip/CPP/7zip/Compress/BZip2Register.cpp +12 -7
  295. data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.cpp +554 -282
  296. data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.h +73 -71
  297. data/ext/p7zip/CPP/7zip/Compress/Bcj2Register.cpp +10 -5
  298. data/ext/p7zip/CPP/7zip/Compress/BcjCoder.cpp +13 -4
  299. data/ext/p7zip/CPP/7zip/Compress/BcjCoder.h +17 -5
  300. data/ext/p7zip/CPP/7zip/Compress/BcjRegister.cpp +7 -9
  301. data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.cpp +2 -2
  302. data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.h +58 -61
  303. data/ext/p7zip/CPP/7zip/Compress/BitlEncoder.h +24 -25
  304. data/ext/p7zip/CPP/7zip/Compress/BitmDecoder.h +46 -17
  305. data/ext/p7zip/CPP/7zip/Compress/BitmEncoder.h +18 -19
  306. data/ext/p7zip/CPP/7zip/Compress/BranchMisc.cpp +14 -28
  307. data/ext/p7zip/CPP/7zip/Compress/BranchMisc.h +27 -6
  308. data/ext/p7zip/CPP/7zip/Compress/BranchRegister.cpp +26 -15
  309. data/ext/p7zip/CPP/7zip/Compress/ByteSwap.cpp +45 -26
  310. data/ext/p7zip/CPP/7zip/Compress/CodecExports.cpp +254 -70
  311. data/ext/p7zip/CPP/7zip/Compress/CopyCoder.cpp +65 -17
  312. data/ext/p7zip/CPP/7zip/Compress/CopyCoder.h +15 -3
  313. data/ext/p7zip/CPP/7zip/Compress/CopyRegister.cpp +5 -4
  314. data/ext/p7zip/CPP/7zip/Compress/Deflate64Register.cpp +12 -6
  315. data/ext/p7zip/CPP/7zip/Compress/DeflateConst.h +43 -46
  316. data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.cpp +145 -81
  317. data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.h +31 -33
  318. data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.cpp +179 -162
  319. data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.h +35 -30
  320. data/ext/p7zip/CPP/7zip/Compress/DeflateRegister.cpp +11 -7
  321. data/ext/p7zip/CPP/7zip/Compress/DeltaFilter.cpp +55 -39
  322. data/ext/p7zip/CPP/7zip/Compress/{DllExports2.cpp → DllExports2Compress.cpp} +8 -8
  323. data/ext/p7zip/CPP/7zip/Compress/DllExportsCompress.cpp +48 -0
  324. data/ext/p7zip/CPP/7zip/Compress/HuffmanDecoder.h +220 -49
  325. data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.cpp +14 -9
  326. data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.h +2 -3
  327. data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.cpp +7 -7
  328. data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.h +1 -1
  329. data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.cpp +1 -1
  330. data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.h +21 -18
  331. data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.cpp +171 -141
  332. data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.h +32 -64
  333. data/ext/p7zip/CPP/7zip/Compress/Lzham/LICENSE +22 -0
  334. data/ext/p7zip/CPP/7zip/Compress/Lzham/LzhamRegister.cpp +783 -0
  335. data/ext/p7zip/CPP/7zip/Compress/Lzham/README.md +211 -0
  336. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham.h +803 -0
  337. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_dynamic_lib.h +156 -0
  338. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_exports.inc +31 -0
  339. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/lzham_static_lib.h +59 -0
  340. data/ext/p7zip/CPP/7zip/Compress/Lzham/include/zlib.h +2 -0
  341. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/CMakeLists.txt +69 -0
  342. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_comp.h +38 -0
  343. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzbase.cpp +244 -0
  344. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzbase.h +46 -0
  345. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp.cpp +750 -0
  346. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_internal.cpp +2240 -0
  347. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_internal.h +503 -0
  348. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_lzcomp_state.cpp +1684 -0
  349. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_match_accel.cpp +947 -0
  350. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_match_accel.h +164 -0
  351. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_null_threading.h +98 -0
  352. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_pthreads_threading.cpp +214 -0
  353. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_pthreads_threading.h +535 -0
  354. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_threading.h +12 -0
  355. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_win32_threading.cpp +232 -0
  356. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzham_win32_threading.h +387 -0
  357. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamcomp/lzhamcomp.vcxproj +208 -0
  358. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/CMakeLists.txt +86 -0
  359. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_assert.cpp +80 -0
  360. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_assert.h +58 -0
  361. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_checksum.cpp +73 -0
  362. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_checksum.h +13 -0
  363. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_config.h +25 -0
  364. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_core.h +303 -0
  365. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_decomp.h +37 -0
  366. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_helpers.h +54 -0
  367. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_huffman_codes.cpp +286 -0
  368. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_huffman_codes.h +32 -0
  369. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecomp.cpp +1586 -0
  370. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecompbase.cpp +131 -0
  371. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_lzdecompbase.h +89 -0
  372. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_math.h +142 -0
  373. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_mem.cpp +463 -0
  374. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_mem.h +115 -0
  375. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_platform.cpp +159 -0
  376. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_platform.h +284 -0
  377. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_prefix_coding.cpp +431 -0
  378. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_prefix_coding.h +157 -0
  379. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_symbol_codec.cpp +1527 -0
  380. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_symbol_codec.h +494 -0
  381. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_timer.cpp +147 -0
  382. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_timer.h +99 -0
  383. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_traits.h +141 -0
  384. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_types.h +72 -0
  385. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_utils.h +58 -0
  386. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_vector.cpp +83 -0
  387. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzham_vector.h +628 -0
  388. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamdecomp/lzhamdecomp.vcxproj +224 -0
  389. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamlib/lzham_lib.cpp +179 -0
  390. data/ext/p7zip/CPP/7zip/Compress/Lzham/lzhamlib/lzhamlib.vcxproj +187 -0
  391. data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile +10 -0
  392. data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile.depend +0 -0
  393. data/ext/p7zip/CPP/7zip/Compress/Lzham/makefile.list +129 -0
  394. data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.cpp +123 -46
  395. data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.h +29 -14
  396. data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.cpp +14 -9
  397. data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.h +1 -1
  398. data/ext/p7zip/CPP/7zip/Compress/Lzma2Register.cpp +9 -7
  399. data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.cpp +24 -8
  400. data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.h +8 -1
  401. data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.cpp +30 -27
  402. data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.h +3 -1
  403. data/ext/p7zip/CPP/7zip/Compress/LzmaRegister.cpp +9 -7
  404. data/ext/p7zip/CPP/7zip/Compress/LzmsDecoder.cpp +576 -0
  405. data/ext/p7zip/CPP/7zip/Compress/LzmsDecoder.h +271 -0
  406. data/ext/p7zip/CPP/7zip/Compress/Lzx.h +32 -36
  407. data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.cpp +380 -238
  408. data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.h +170 -83
  409. data/ext/p7zip/CPP/7zip/Compress/Mtf8.h +7 -9
  410. data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.cpp +1 -5
  411. data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.cpp +51 -18
  412. data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.h +18 -8
  413. data/ext/p7zip/CPP/7zip/Compress/PpmdRegister.cpp +9 -8
  414. data/ext/p7zip/CPP/7zip/Compress/PpmdZip.cpp +61 -25
  415. data/ext/p7zip/CPP/7zip/Compress/PpmdZip.h +21 -6
  416. data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.cpp +122 -102
  417. data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.h +68 -157
  418. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile +33 -18
  419. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.depend +0 -158
  420. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.list +105 -56
  421. data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.cpp +34 -21
  422. data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.h +2 -0
  423. data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.cpp +77 -67
  424. data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.h +12 -10
  425. data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.cpp +139 -118
  426. data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.h +48 -33
  427. data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.cpp +148 -113
  428. data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.h +35 -19
  429. data/ext/p7zip/CPP/7zip/Compress/Rar5Decoder.cpp +961 -0
  430. data/ext/p7zip/CPP/7zip/Compress/Rar5Decoder.h +335 -0
  431. data/ext/p7zip/CPP/7zip/Compress/RarCodecsRegister.cpp +13 -6
  432. data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.cpp +91 -71
  433. data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.h +2 -4
  434. data/ext/p7zip/CPP/7zip/Compress/XpressDecoder.cpp +129 -0
  435. data/ext/p7zip/CPP/7zip/Compress/XpressDecoder.h +13 -0
  436. data/ext/p7zip/CPP/7zip/Compress/ZDecoder.cpp +98 -20
  437. data/ext/p7zip/CPP/7zip/Compress/ZDecoder.h +19 -7
  438. data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.cpp +14 -11
  439. data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.h +32 -1
  440. data/ext/p7zip/CPP/7zip/Crypto/7zAes.cpp +137 -101
  441. data/ext/p7zip/CPP/7zip/Crypto/7zAes.h +31 -30
  442. data/ext/p7zip/CPP/7zip/Crypto/7zAesRegister.cpp +8 -9
  443. data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.cpp +39 -28
  444. data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.h +3 -3
  445. data/ext/p7zip/CPP/7zip/Crypto/HmacSha256.cpp +62 -0
  446. data/ext/p7zip/CPP/7zip/Crypto/HmacSha256.h +27 -0
  447. data/ext/p7zip/CPP/7zip/Crypto/MyAes.cpp +73 -7
  448. data/ext/p7zip/CPP/7zip/Crypto/MyAes.h +25 -8
  449. data/ext/p7zip/CPP/7zip/Crypto/MyAesReg.cpp +16 -0
  450. data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp +29 -15
  451. data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.h +2 -1
  452. data/ext/p7zip/CPP/7zip/Crypto/RandGen.cpp +49 -34
  453. data/ext/p7zip/CPP/7zip/Crypto/RandGen.h +2 -2
  454. data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.cpp +36 -39
  455. data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.h +15 -17
  456. data/ext/p7zip/CPP/7zip/Crypto/Rar5Aes.cpp +257 -0
  457. data/ext/p7zip/CPP/7zip/Crypto/Rar5Aes.h +84 -0
  458. data/ext/p7zip/CPP/7zip/Crypto/RarAes.cpp +70 -71
  459. data/ext/p7zip/CPP/7zip/Crypto/RarAes.h +24 -19
  460. data/ext/p7zip/CPP/7zip/Crypto/Sha1Cls.h +51 -0
  461. data/ext/p7zip/CPP/7zip/Crypto/WzAes.cpp +68 -54
  462. data/ext/p7zip/CPP/7zip/Crypto/WzAes.h +37 -27
  463. data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.cpp +60 -34
  464. data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.h +28 -11
  465. data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.cpp +90 -28
  466. data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.h +13 -2
  467. data/ext/p7zip/CPP/7zip/Guid.txt +57 -11
  468. data/ext/p7zip/CPP/7zip/ICoder.h +202 -17
  469. data/ext/p7zip/CPP/7zip/IDecl.h +16 -3
  470. data/ext/p7zip/CPP/7zip/IPassword.h +1 -2
  471. data/ext/p7zip/CPP/7zip/IProgress.h +2 -16
  472. data/ext/p7zip/CPP/7zip/IStream.h +82 -13
  473. data/ext/p7zip/CPP/7zip/MyVersion.h +2 -11
  474. data/ext/p7zip/CPP/7zip/PropID.h +60 -9
  475. data/ext/p7zip/CPP/Common/C_FileIO.cpp +5 -1
  476. data/ext/p7zip/CPP/Common/C_FileIO.h +7 -1
  477. data/ext/p7zip/CPP/Common/CommandLineParser.cpp +122 -148
  478. data/ext/p7zip/CPP/Common/CommandLineParser.h +20 -29
  479. data/ext/p7zip/CPP/Common/Common.h +13 -0
  480. data/ext/p7zip/CPP/Common/CrcReg.cpp +98 -0
  481. data/ext/p7zip/CPP/Common/Defs.h +5 -10
  482. data/ext/p7zip/CPP/Common/DynLimBuf.cpp +93 -0
  483. data/ext/p7zip/CPP/Common/DynLimBuf.h +40 -0
  484. data/ext/p7zip/CPP/Common/DynamicBuffer.h +45 -31
  485. data/ext/p7zip/CPP/Common/IntToString.cpp +109 -40
  486. data/ext/p7zip/CPP/Common/IntToString.h +14 -9
  487. data/ext/p7zip/CPP/Common/Lang.cpp +120 -87
  488. data/ext/p7zip/CPP/Common/Lang.h +10 -15
  489. data/ext/p7zip/CPP/Common/ListFileUtils.cpp +82 -40
  490. data/ext/p7zip/CPP/Common/ListFileUtils.h +7 -4
  491. data/ext/p7zip/CPP/Common/MyBuffer.h +244 -0
  492. data/ext/p7zip/CPP/Common/MyCom.h +65 -28
  493. data/ext/p7zip/CPP/Common/MyGuidDef.h +1 -1
  494. data/ext/p7zip/CPP/Common/MyInitGuid.h +23 -0
  495. data/ext/p7zip/CPP/Common/MyLinux.h +42 -0
  496. data/ext/p7zip/CPP/Common/MyMap.cpp +8 -8
  497. data/ext/p7zip/CPP/Common/MyMap.h +2 -2
  498. data/ext/p7zip/CPP/Common/MyString.cpp +1643 -117
  499. data/ext/p7zip/CPP/Common/MyString.h +677 -486
  500. data/ext/p7zip/CPP/Common/MyTypes.h +38 -0
  501. data/ext/p7zip/CPP/Common/MyUnknown.h +4 -0
  502. data/ext/p7zip/CPP/Common/MyVector.cpp +0 -84
  503. data/ext/p7zip/CPP/Common/MyVector.h +472 -112
  504. data/ext/p7zip/CPP/Common/MyWindows.cpp +18 -1
  505. data/ext/p7zip/CPP/Common/MyWindows.h +8 -0
  506. data/ext/p7zip/CPP/Common/MyXml.cpp +169 -118
  507. data/ext/p7zip/CPP/Common/MyXml.h +14 -11
  508. data/ext/p7zip/CPP/Common/NewHandler.cpp +39 -0
  509. data/ext/p7zip/CPP/Common/NewHandler.h +55 -2
  510. data/ext/p7zip/CPP/Common/Random.h +14 -0
  511. data/ext/p7zip/CPP/Common/Sha1Reg.cpp +40 -0
  512. data/ext/p7zip/CPP/Common/Sha256Reg.cpp +40 -0
  513. data/ext/p7zip/CPP/Common/StdInStream.cpp +46 -27
  514. data/ext/p7zip/CPP/Common/StdInStream.h +11 -10
  515. data/ext/p7zip/CPP/Common/StdOutStream.cpp +48 -35
  516. data/ext/p7zip/CPP/Common/StdOutStream.h +44 -17
  517. data/ext/p7zip/CPP/Common/StringConvert.cpp +56 -17
  518. data/ext/p7zip/CPP/Common/StringConvert.h +7 -3
  519. data/ext/p7zip/CPP/Common/StringToInt.cpp +102 -48
  520. data/ext/p7zip/CPP/Common/StringToInt.h +13 -10
  521. data/ext/p7zip/CPP/Common/TextConfig.cpp +33 -47
  522. data/ext/p7zip/CPP/Common/TextConfig.h +3 -6
  523. data/ext/p7zip/CPP/Common/UTFConvert.cpp +218 -75
  524. data/ext/p7zip/CPP/Common/UTFConvert.h +4 -3
  525. data/ext/p7zip/CPP/Common/Wildcard.cpp +345 -125
  526. data/ext/p7zip/CPP/Common/Wildcard.h +82 -13
  527. data/ext/p7zip/CPP/Common/XzCrc64Reg.cpp +42 -0
  528. data/ext/p7zip/CPP/Windows/FileDir.cpp +427 -475
  529. data/ext/p7zip/CPP/Windows/FileDir.h +94 -72
  530. data/ext/p7zip/CPP/Windows/FileFind.cpp +235 -244
  531. data/ext/p7zip/CPP/Windows/FileFind.h +63 -59
  532. data/ext/p7zip/CPP/Windows/FileIO.cpp +29 -46
  533. data/ext/p7zip/CPP/Windows/FileIO.h +40 -42
  534. data/ext/p7zip/CPP/Windows/FileName.cpp +696 -17
  535. data/ext/p7zip/CPP/Windows/FileName.h +11 -3
  536. data/ext/p7zip/CPP/Windows/NtCheck.h +2 -0
  537. data/ext/p7zip/CPP/Windows/PropVariant.cpp +134 -30
  538. data/ext/p7zip/CPP/Windows/PropVariant.h +80 -24
  539. data/ext/p7zip/CPP/Windows/PropVariantUtils.cpp +89 -18
  540. data/ext/p7zip/CPP/Windows/PropVariantUtils.h +12 -7
  541. data/ext/p7zip/CPP/Windows/System.cpp +20 -15
  542. data/ext/p7zip/CPP/Windows/System.h +3 -2
  543. data/ext/p7zip/CPP/Windows/TimeUtils.cpp +203 -0
  544. data/ext/p7zip/CPP/Windows/TimeUtils.h +24 -0
  545. data/ext/p7zip/CPP/include_windows/basetyps.h +4 -4
  546. data/ext/p7zip/CPP/include_windows/windows.h +17 -11
  547. data/ext/p7zip/CPP/myWindows/StdAfx.h +97 -5
  548. data/ext/p7zip/CPP/myWindows/config.h +20 -5
  549. data/ext/p7zip/CPP/myWindows/myPrivate.h +8 -0
  550. data/ext/p7zip/CPP/myWindows/wine_date_and_time.cpp +34 -0
  551. data/ext/p7zip/ChangeLog +283 -35
  552. data/ext/p7zip/{DOCS → DOC}/7zC.txt +6 -13
  553. data/ext/p7zip/{DOCS → DOC}/License.txt +3 -2
  554. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/add.htm +93 -87
  555. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/bench.htm +88 -79
  556. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/delete.htm +62 -59
  557. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/extract.htm +96 -91
  558. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/extract_full.htm +73 -68
  559. data/ext/p7zip/DOC/MANUAL/cmdline/commands/hash.htm +65 -0
  560. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/index.htm +36 -33
  561. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/list.htm +78 -77
  562. data/ext/p7zip/DOC/MANUAL/cmdline/commands/rename.htm +51 -0
  563. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/style.css +232 -232
  564. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/test.htm +47 -46
  565. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/commands/update.htm +71 -66
  566. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/exit_codes.htm +27 -27
  567. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/index.htm +29 -29
  568. data/ext/p7zip/{DOCS/MANUAL/switches → DOC/MANUAL/cmdline}/style.css +232 -232
  569. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_exclude.htm +56 -56
  570. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_include.htm +80 -83
  571. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ar_no.htm +52 -52
  572. data/ext/p7zip/DOC/MANUAL/cmdline/switches/bb.htm +61 -0
  573. data/ext/p7zip/DOC/MANUAL/cmdline/switches/bs.htm +67 -0
  574. data/ext/p7zip/DOC/MANUAL/cmdline/switches/charset.htm +61 -0
  575. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/exclude.htm +71 -60
  576. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/include.htm +89 -87
  577. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/index.htm +95 -64
  578. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/large_pages.htm +59 -50
  579. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/list_tech.htm +36 -36
  580. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/method.htm +738 -625
  581. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/output_dir.htm +53 -53
  582. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/overwrite.htm +56 -56
  583. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/password.htm +55 -54
  584. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/recurse.htm +85 -83
  585. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sa.htm +58 -0
  586. data/ext/p7zip/DOC/MANUAL/cmdline/switches/scc.htm +42 -0
  587. data/ext/p7zip/DOC/MANUAL/cmdline/switches/scrc.htm +53 -0
  588. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sdel.htm +39 -0
  589. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/sfx.htm +153 -156
  590. data/ext/p7zip/DOC/MANUAL/cmdline/switches/shared.htm +40 -0
  591. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sni.htm +56 -0
  592. data/ext/p7zip/DOC/MANUAL/cmdline/switches/sns.htm +77 -0
  593. data/ext/p7zip/DOC/MANUAL/cmdline/switches/spf.htm +80 -0
  594. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/ssc.htm +50 -50
  595. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stdin.htm +56 -55
  596. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stdout.htm +54 -50
  597. data/ext/p7zip/DOC/MANUAL/cmdline/switches/stl.htm +39 -0
  598. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/stop_switch.htm +31 -31
  599. data/ext/p7zip/DOC/MANUAL/cmdline/switches/stx.htm +50 -0
  600. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline/switches}/style.css +232 -232
  601. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/type.htm +121 -83
  602. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/update.htm +177 -176
  603. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/volume.htm +49 -49
  604. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/working_dir.htm +56 -55
  605. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/switches/yes.htm +48 -48
  606. data/ext/p7zip/{DOCS/MANUAL → DOC/MANUAL/cmdline}/syntax.htm +120 -120
  607. data/ext/p7zip/DOC/MANUAL/fm/about.htm +21 -0
  608. data/ext/p7zip/DOC/MANUAL/fm/benchmark.htm +56 -0
  609. data/ext/p7zip/DOC/MANUAL/fm/index.htm +54 -0
  610. data/ext/p7zip/DOC/MANUAL/fm/menu.htm +154 -0
  611. data/ext/p7zip/DOC/MANUAL/fm/options.htm +152 -0
  612. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/add.htm +311 -0
  613. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/extract.htm +78 -0
  614. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/index.htm +63 -0
  615. data/ext/p7zip/DOC/MANUAL/fm/plugins/7-zip/style.css +232 -0
  616. data/ext/p7zip/DOC/MANUAL/fm/plugins/index.htm +22 -0
  617. data/ext/p7zip/DOC/MANUAL/fm/plugins/style.css +232 -0
  618. data/ext/p7zip/DOC/MANUAL/fm/style.css +232 -0
  619. data/ext/p7zip/DOC/MANUAL/general/7z.htm +117 -0
  620. data/ext/p7zip/DOC/MANUAL/general/faq.htm +125 -0
  621. data/ext/p7zip/DOC/MANUAL/general/formats.htm +100 -0
  622. data/ext/p7zip/DOC/MANUAL/general/index.htm +27 -0
  623. data/ext/p7zip/DOC/MANUAL/general/license.htm +30 -0
  624. data/ext/p7zip/DOC/MANUAL/general/performance.htm +98 -0
  625. data/ext/p7zip/DOC/MANUAL/general/style.css +232 -0
  626. data/ext/p7zip/DOC/MANUAL/general/thanks.htm +43 -0
  627. data/ext/p7zip/DOC/MANUAL/start.htm +37 -0
  628. data/ext/p7zip/DOC/MANUAL/style.css +232 -0
  629. data/ext/p7zip/DOC/Methods.txt +158 -0
  630. data/ext/p7zip/{DOCS → DOC}/copying.txt +9 -11
  631. data/ext/p7zip/DOC/lzma.txt +328 -0
  632. data/ext/p7zip/{DOCS → DOC}/readme.txt +42 -65
  633. data/ext/p7zip/{DOCS/history.txt → DOC/src-history.txt} +88 -2
  634. data/ext/p7zip/README +117 -91
  635. data/ext/p7zip/TODO +0 -2
  636. data/ext/p7zip/install.sh +31 -29
  637. data/ext/p7zip/last_error +1 -0
  638. data/ext/p7zip/makefile +29 -125
  639. data/ext/p7zip/makefile.afl +23 -0
  640. data/ext/p7zip/makefile.aix_gcc +5 -4
  641. data/ext/p7zip/makefile.android_arm +49 -0
  642. data/ext/p7zip/makefile.beos +5 -4
  643. data/ext/p7zip/makefile.common +150 -0
  644. data/ext/p7zip/makefile.crc32 +3 -3
  645. data/ext/p7zip/makefile.cygwin +5 -4
  646. data/ext/p7zip/makefile.cygwin64 +21 -0
  647. data/ext/p7zip/makefile.cygwin64_asm +22 -0
  648. data/ext/p7zip/makefile.cygwin_asm +6 -4
  649. data/ext/p7zip/makefile.cygwin_clang +21 -0
  650. data/ext/p7zip/makefile.cygwin_clang_asm +23 -0
  651. data/ext/p7zip/{makefile.djgpp_old → makefile.djgpp} +5 -4
  652. data/ext/p7zip/makefile.djgpp_watt +7 -5
  653. data/ext/p7zip/makefile.freebsd5 +5 -4
  654. data/ext/p7zip/{makefile.freebsd6 → makefile.freebsd6+} +6 -5
  655. data/ext/p7zip/makefile.glb +27 -18
  656. data/ext/p7zip/makefile.gprof +3 -2
  657. data/ext/p7zip/makefile.haiku +19 -0
  658. data/ext/p7zip/makefile.hpux-acc +3 -2
  659. data/ext/p7zip/makefile.hpux-acc_64 +3 -2
  660. data/ext/p7zip/makefile.hpux-gcc +5 -4
  661. data/ext/p7zip/makefile.linux_amd64 +5 -4
  662. data/ext/p7zip/makefile.linux_amd64_asm +12 -5
  663. data/ext/p7zip/makefile.linux_amd64_asm_icc +5 -3
  664. data/ext/p7zip/makefile.linux_amd64_sanitizer +26 -0
  665. data/ext/p7zip/makefile.linux_any_cpu +5 -4
  666. data/ext/p7zip/makefile.linux_any_cpu_gcc_4.X +7 -4
  667. data/ext/p7zip/makefile.linux_clang_amd64_asm +25 -0
  668. data/ext/p7zip/makefile.linux_clang_amd64_asm_sanitize +27 -0
  669. data/ext/p7zip/makefile.linux_cross_aarch64 +25 -0
  670. data/ext/p7zip/makefile.linux_cross_arm +7 -4
  671. data/ext/p7zip/makefile.linux_cross_djgpp +27 -0
  672. data/ext/p7zip/makefile.linux_cross_m68k +26 -0
  673. data/ext/p7zip/makefile.linux_cross_mipsel +27 -0
  674. data/ext/p7zip/makefile.linux_cross_ppc +25 -0
  675. data/ext/p7zip/makefile.linux_cross_ppc64 +25 -0
  676. data/ext/p7zip/makefile.linux_cross_ppc64le +25 -0
  677. data/ext/p7zip/makefile.linux_cross_s390x +25 -0
  678. data/ext/p7zip/makefile.linux_cross_sparc64 +25 -0
  679. data/ext/p7zip/makefile.linux_gcc6_sanitize +23 -0
  680. data/ext/p7zip/makefile.linux_gcc_2.95_no_need_for_libstdc +6 -4
  681. data/ext/p7zip/makefile.linux_other +6 -5
  682. data/ext/p7zip/makefile.linux_s390x +5 -4
  683. data/ext/p7zip/{makefile.machine_base → makefile.linux_scan-build} +5 -4
  684. data/ext/p7zip/makefile.linux_valgrind +25 -0
  685. data/ext/p7zip/{makefile.linux_clang_amd64 → makefile.linux_x32} +6 -5
  686. data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X +10 -5
  687. data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X_fltk +8 -4
  688. data/ext/p7zip/makefile.linux_x86_asm_gcc_mudflap_4.X +4 -2
  689. data/ext/p7zip/makefile.linux_x86_asm_icc +4 -2
  690. data/ext/p7zip/makefile.linux_x86_icc +3 -2
  691. data/ext/p7zip/makefile.macosx_arm64 +17 -0
  692. data/ext/p7zip/{makefile.macosx_32bits → makefile.macosx_gcc_32bits} +3 -2
  693. data/ext/p7zip/{makefile.macosx_32bits_asm → makefile.macosx_gcc_32bits_asm} +5 -3
  694. data/ext/p7zip/{makefile.macosx_32bits_ppc → makefile.macosx_gcc_32bits_ppc} +3 -2
  695. data/ext/p7zip/{makefile.macosx_64bits → makefile.macosx_gcc_64bits} +3 -2
  696. data/ext/p7zip/makefile.macosx_llvm_64bits +9 -3
  697. data/ext/p7zip/makefile.netbsd +5 -4
  698. data/ext/p7zip/makefile.netware_asm_gcc_3.X +6 -4
  699. data/ext/p7zip/makefile.oldmake +41 -130
  700. data/ext/p7zip/makefile.openbsd +7 -3
  701. data/ext/p7zip/makefile.openbsd_no_port +9 -5
  702. data/ext/p7zip/makefile.qnx_shared.bin +5 -4
  703. data/ext/p7zip/makefile.qnx_static +5 -4
  704. data/ext/p7zip/makefile.solaris_sparc_CC_32 +5 -4
  705. data/ext/p7zip/makefile.solaris_sparc_CC_64 +6 -4
  706. data/ext/p7zip/makefile.solaris_sparc_gcc +7 -6
  707. data/ext/p7zip/makefile.solaris_x86 +5 -4
  708. data/ext/p7zip/makefile.tru64 +5 -4
  709. data/ext/seven_zip_ruby/extconf.rb +92 -6
  710. data/ext/seven_zip_ruby/seven_zip_archive.cpp +40 -17
  711. data/ext/seven_zip_ruby/seven_zip_archive.h +1 -1
  712. data/ext/seven_zip_ruby/utils.cpp +267 -124
  713. data/ext/seven_zip_ruby/utils.h +2 -0
  714. data/lib/seven_zip_ruby/7z.dll +0 -0
  715. data/lib/seven_zip_ruby/7z.sfx +0 -0
  716. data/lib/seven_zip_ruby/7z64.dll +0 -0
  717. data/lib/seven_zip_ruby/7zCon.sfx +0 -0
  718. data/lib/seven_zip_ruby/seven_zip_reader.rb +16 -1
  719. data/lib/seven_zip_ruby/version.rb +1 -1
  720. data/p7zip/.gitignore +7 -0
  721. data/p7zip/README.txt +29 -0
  722. data/p7zip/extract.sh +134 -0
  723. data/spec/seven_zip_ruby_spec.rb +22 -13
  724. data/test/res/The Flying Spaghetti Monster.txt +3 -0
  725. data/test/res/The Three Little Pigs.txt +5 -0
  726. data/test/res/UTF_content.txt +3 -0
  727. data/test/res/test_reader_data.7z +0 -0
  728. data/test/res/test_reader_filename_cp932.7z +0 -0
  729. data/test/res/test_reader_files.7z +0 -0
  730. data/test/test_seven_zip_reader.rb +187 -0
  731. data/test/test_seven_zip_writer.rb +184 -0
  732. metadata +267 -219
  733. data/.github/workflows/test-and-release.yml +0 -43
  734. data/ext/C/Types.h +0 -254
  735. data/ext/CPP/7zip/Archive/IArchive.h +0 -234
  736. data/ext/CPP/7zip/IDecl.h +0 -15
  737. data/ext/CPP/7zip/IPassword.h +0 -24
  738. data/ext/CPP/7zip/IProgress.h +0 -33
  739. data/ext/CPP/7zip/IStream.h +0 -58
  740. data/ext/CPP/7zip/PropID.h +0 -76
  741. data/ext/CPP/Common/MyCom.h +0 -225
  742. data/ext/CPP/Common/MyGuidDef.h +0 -54
  743. data/ext/CPP/Common/MyInitGuid.h +0 -22
  744. data/ext/CPP/Common/MyUnknown.h +0 -13
  745. data/ext/CPP/Common/MyWindows.h +0 -204
  746. data/ext/CPP/Common/Types.h +0 -11
  747. data/ext/CPP/Windows/PropVariant.h +0 -56
  748. data/ext/CPP/include_windows/basetyps.h +0 -19
  749. data/ext/CPP/include_windows/tchar.h +0 -89
  750. data/ext/CPP/include_windows/windows.h +0 -194
  751. data/ext/p7zip/Asm/x64/7zCrcT8U.asm +0 -103
  752. data/ext/p7zip/Asm/x86/7zCrcT8U.asm +0 -101
  753. data/ext/p7zip/C/7zCrcT8.c +0 -43
  754. data/ext/p7zip/C/Alloc.back3 +0 -238
  755. data/ext/p7zip/C/Alloc.c.back +0 -243
  756. data/ext/p7zip/C/Alloc.c.back2 +0 -222
  757. data/ext/p7zip/C/LzmaUtil/Lzma86Dec.h +0 -51
  758. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +0 -149
  759. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.h +0 -58
  760. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.cpp +0 -24
  761. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.h +0 -28
  762. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmRegister.cpp +0 -13
  763. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.cpp +0 -239
  764. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.h +0 -28
  765. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.cpp +0 -389
  766. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.h +0 -119
  767. data/ext/p7zip/CPP/7zip/Archive/Com/ComRegister.cpp +0 -13
  768. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +0 -240
  769. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.h +0 -80
  770. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.cpp +0 -239
  771. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.h +0 -88
  772. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +0 -15
  773. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.h +0 -37
  774. data/ext/p7zip/CPP/7zip/Archive/DebHandler.cpp +0 -413
  775. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.cpp +0 -243
  776. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.h +0 -26
  777. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.cpp +0 -480
  778. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.h +0 -154
  779. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsRegister.cpp +0 -13
  780. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.cpp +0 -21
  781. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.cpp +0 -478
  782. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.h +0 -123
  783. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.cpp +0 -55
  784. data/ext/p7zip/CPP/7zip/Archive/Rar/RarRegister.cpp +0 -13
  785. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.cpp +0 -78
  786. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.h +0 -49
  787. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfRegister.cpp +0 -13
  788. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.cpp +0 -36
  789. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItemEx.h +0 -34
  790. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zFM.txt +0 -163
  791. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zG.txt +0 -131
  792. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7za.txt +0 -253
  793. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_ALL.txt +0 -32
  794. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_Format7zFree.txt +0 -290
  795. data/ext/p7zip/CPP/7zip/CMAKE/generate.sh +0 -37
  796. data/ext/p7zip/CPP/7zip/CMAKE/generate_xcode.sh +0 -32
  797. data/ext/p7zip/CPP/7zip/Common/LockedStream.cpp +0 -23
  798. data/ext/p7zip/CPP/7zip/Common/LockedStream.h +0 -38
  799. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.cpp +0 -309
  800. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.h +0 -98
  801. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.cpp +0 -90
  802. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.h +0 -59
  803. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.cpp +0 -19
  804. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.h +0 -44
  805. data/ext/p7zip/CPP/7zip/Compress/DllExports.cpp +0 -39
  806. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +0 -531
  807. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +0 -1018
  808. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +0 -48
  809. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +0 -311
  810. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +0 -20
  811. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/makefile +0 -173
  812. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.cpp +0 -90
  813. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.h +0 -46
  814. data/ext/p7zip/CPP/7zip/Compress/RangeCoder.h +0 -205
  815. data/ext/p7zip/CPP/7zip/Compress/RangeCoderBit.h +0 -114
  816. data/ext/p7zip/CPP/7zip/Crypto/Sha1.cpp +0 -229
  817. data/ext/p7zip/CPP/7zip/Crypto/Sha1.h +0 -68
  818. data/ext/p7zip/CPP/7zip/PREMAKE/generate.sh +0 -18
  819. data/ext/p7zip/CPP/7zip/PREMAKE/premake4.lua +0 -263
  820. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA.pro +0 -228
  821. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA_osx.pro +0 -228
  822. data/ext/p7zip/CPP/7zip/QMAKE/test_emul/test_emul.pro +0 -26
  823. data/ext/p7zip/CPP/7zip/TEST/TestUI/TestUI.cpp +0 -560
  824. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile +0 -33
  825. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.depend +0 -577
  826. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.list +0 -16
  827. data/ext/p7zip/CPP/Common/Buffer.h +0 -77
  828. data/ext/p7zip/CPP/Common/Types.h +0 -11
  829. data/ext/p7zip/CPP/Windows/COM.cpp +0 -37
  830. data/ext/p7zip/CPP/Windows/COM.h +0 -69
  831. data/ext/p7zip/CPP/Windows/Clipboard.cpp +0 -160
  832. data/ext/p7zip/CPP/Windows/Clipboard.h +0 -28
  833. data/ext/p7zip/CPP/Windows/CommonDialog.h +0 -19
  834. data/ext/p7zip/CPP/Windows/Control/ComboBox.h +0 -82
  835. data/ext/p7zip/CPP/Windows/Control/Controls.cpp +0 -515
  836. data/ext/p7zip/CPP/Windows/Control/Dialog.cpp +0 -560
  837. data/ext/p7zip/CPP/Windows/Control/Dialog.h +0 -179
  838. data/ext/p7zip/CPP/Windows/Control/DialogImpl.h +0 -73
  839. data/ext/p7zip/CPP/Windows/Control/Edit.h +0 -24
  840. data/ext/p7zip/CPP/Windows/Control/ListView.h +0 -164
  841. data/ext/p7zip/CPP/Windows/Control/ProgressBar.h +0 -34
  842. data/ext/p7zip/CPP/Windows/Control/Static.h +0 -23
  843. data/ext/p7zip/CPP/Windows/Control/StatusBar.h +0 -56
  844. data/ext/p7zip/CPP/Windows/Control/Window2.cpp +0 -211
  845. data/ext/p7zip/CPP/Windows/Control/Window2.h +0 -111
  846. data/ext/p7zip/CPP/Windows/DLL.cpp +0 -193
  847. data/ext/p7zip/CPP/Windows/DLL.h +0 -48
  848. data/ext/p7zip/CPP/Windows/Error.cpp +0 -58
  849. data/ext/p7zip/CPP/Windows/Error.h +0 -33
  850. data/ext/p7zip/CPP/Windows/Menu.h +0 -4
  851. data/ext/p7zip/CPP/Windows/PropVariantConversions.cpp +0 -142
  852. data/ext/p7zip/CPP/Windows/PropVariantConversions.h +0 -14
  853. data/ext/p7zip/CPP/Windows/Registry.cpp +0 -313
  854. data/ext/p7zip/CPP/Windows/Registry.h +0 -113
  855. data/ext/p7zip/CPP/Windows/ResourceString.h +0 -22
  856. data/ext/p7zip/CPP/Windows/Shell.h +0 -21
  857. data/ext/p7zip/CPP/Windows/Time.cpp +0 -88
  858. data/ext/p7zip/CPP/Windows/Time.h +0 -21
  859. data/ext/p7zip/CPP/Windows/Window.cpp +0 -101
  860. data/ext/p7zip/CPP/Windows/Window.h +0 -43
  861. data/ext/p7zip/CPP/myWindows/initguid.h +0 -4
  862. data/ext/p7zip/CPP/myWindows/makefile +0 -21
  863. data/ext/p7zip/CPP/myWindows/makefile.depend +0 -32
  864. data/ext/p7zip/CPP/myWindows/makefile.list +0 -28
  865. data/ext/p7zip/CPP/myWindows/myAddExeFlag.cpp +0 -20
  866. data/ext/p7zip/CPP/myWindows/myGetTickCount.cpp +0 -8
  867. data/ext/p7zip/CPP/myWindows/mySplitCommandLine.cpp +0 -82
  868. data/ext/p7zip/CPP/myWindows/test_emul.cpp +0 -745
  869. data/ext/p7zip/CPP/myWindows/wine_GetXXXDefaultLangID.cpp +0 -741
  870. data/ext/p7zip/DOCS/MANUAL/switches/charset.htm +0 -49
  871. data/ext/p7zip/DOCS/Methods.txt +0 -152
  872. data/ext/p7zip/DOCS/lzma.txt +0 -598
  873. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/ChangeLog +0 -41
  874. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme +0 -21
  875. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme.u7z +0 -30
  876. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/u7z +0 -133
  877. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/README +0 -21
  878. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/check.sh +0 -117
  879. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/files.tar +0 -0
  880. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 +0 -33
  881. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/p7zip +0 -144
  882. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-shared +0 -14
  883. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-static +0 -10
  884. data/ext/p7zip/integration_context_menu.txt +0 -51
  885. data/ext/p7zip/makefile.rules +0 -661
  886. /data/ext/p7zip/{DOCS → DOC}/7zFormat.txt +0 -0
  887. /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/Buffer.h"
8
- #include "Common/ComTry.h"
9
- #include "Common/Defs.h"
10
- #include "Common/IntToString.h"
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/Time.h"
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 STATPROPSTG kProps[] =
44
+ static const Byte kProps[] =
45
45
  {
46
- { NULL, kpidPath, VT_BSTR},
47
- { NULL, kpidSize, VT_UI8},
48
- { NULL, kpidMTime, VT_FILETIME},
49
- { NULL, kpidAttrib, VT_UI4},
50
- { NULL, kpidMethod, VT_BSTR},
51
- { NULL, kpidBlock, VT_I4}
46
+ kpidPath,
47
+ kpidSize,
48
+ kpidMTime,
49
+ kpidAttrib,
50
+ kpidMethod,
51
+ kpidBlock
52
52
  #ifdef _CAB_DETAILS
53
53
  ,
54
- { L"BlockReal", kpidBlockReal, VT_UI4},
55
- { NULL, kpidOffset, VT_UI4},
56
- { NULL, kpidVolume, VT_UI4}
54
+ // kpidBlockReal, // L"BlockReal",
55
+ kpidOffset,
56
+ kpidVolume
57
57
  #endif
58
58
  };
59
59
 
60
- static const char *kMethods[] =
60
+ static const Byte kArcProps[] =
61
61
  {
62
- "None",
63
- "MSZip",
64
- "Quantum",
65
- "LZX"
62
+ kpidTotalPhySize,
63
+ kpidMethod,
64
+ // kpidSolid,
65
+ kpidNumBlocks,
66
+ kpidNumVolumes,
67
+ kpidVolumeIndex,
68
+ kpidId
66
69
  };
67
70
 
68
- static const int kNumMethods = sizeof(kMethods) / sizeof(kMethods[0]);
69
- static const char *kUnknownMethod = "Unknown";
71
+ IMP_IInArchive_Props
72
+ IMP_IInArchive_ArcProps
70
73
 
71
- static STATPROPSTG kArcProps[] =
74
+ static const char * const kMethods[] =
72
75
  {
73
- { NULL, kpidMethod, VT_BSTR},
74
- // { NULL, kpidSolid, VT_BOOL},
75
- { NULL, kpidNumBlocks, VT_UI4},
76
- { NULL, kpidNumVolumes, VT_UI4}
76
+ "None"
77
+ , "MSZip"
78
+ , "Quantum"
79
+ , "LZX"
77
80
  };
78
81
 
79
- IMP_IInArchive_Props
80
- IMP_IInArchive_ArcProps
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
- NWindows::NCOM::CPropVariant prop;
86
- switch(propID)
101
+ NCOM::CPropVariant prop;
102
+ switch (propID)
87
103
  {
88
104
  case kpidMethod:
89
105
  {
90
- AString resString;
91
- CRecordVector<Byte> ids;
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
- const CDatabaseEx &de = m_Database.Volumes[v];
96
- for (i = 0; i < de.Folders.Size(); i++)
97
- ids.AddToUniqueSorted(de.Folders[i].GetCompressionMethod());
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
- for (i = 0; i < ids.Size(); i++)
127
+
128
+ AString s;
129
+
130
+ for (unsigned i = 0; i < kNumMethodsMax; i++)
100
131
  {
101
- Byte id = ids[i];
102
- AString method = (id < kNumMethods) ? kMethods[id] : kUnknownMethod;
103
- if (!resString.IsEmpty())
104
- resString += ' ';
105
- resString += method;
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
- prop = resString;
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
- for (int v = 0; v < m_Database.Volumes.Size(); v++)
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
- case kpidNumVolumes:
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, PROPVARIANT *value)
273
+ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
131
274
  {
132
275
  COM_TRY_BEGIN
133
- NWindows::NCOM::CPropVariant prop;
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
- int itemIndex = mvItem.ItemIndex;
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.GetWinAttributes(); break;
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
- int methodIndex = folder.GetCompressionMethod();
174
- AString method = (methodIndex < kNumMethods) ? kMethods[methodIndex] : kUnknownMethod;
175
- if (methodIndex == NHeader::NCompressionMethodMajor::kLZX ||
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
- HRESULT res = S_FALSE;
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
- try
354
+ unsigned numTempVolumes = 0;
355
+ // try
242
356
  {
243
- while (nextStream != 0)
357
+ while (nextStream)
244
358
  {
245
359
  CDatabaseEx db;
246
360
  db.Stream = nextStream;
247
- res = archive.Open(maxCheckStartPosition, db);
248
- if (res == S_OK)
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
- if (!m_Database.Volumes.IsEmpty())
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 CDatabaseEx &dbPrev = m_Database.Volumes[prevChecked ? m_Database.Volumes.Size() - 1 : 0];
253
- if (dbPrev.ArchiveInfo.SetID != db.ArchiveInfo.SetID ||
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
- m_Database.Volumes.Insert(prevChecked ? m_Database.Volumes.Size() : 0, db);
261
- else if (res != S_FALSE)
262
- return res;
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 = 0;
428
+ nextStream = NULL;
429
+
276
430
  for (;;)
277
431
  {
278
- const COtherArchive *otherArchive = 0;
432
+ const COtherArc *otherArc = NULL;
433
+
279
434
  if (!prevChecked)
280
435
  {
281
- const CInArchiveInfo &ai = m_Database.Volumes.Front().ArchiveInfo;
282
- if (ai.IsTherePrev())
283
- otherArchive = &ai.PrevArc;
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
- prevChecked = true;
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
- if (otherArchive == 0)
457
+
458
+ if (!otherArc)
288
459
  {
289
- const CInArchiveInfo &ai = m_Database.Volumes.Back().ArchiveInfo;
460
+ const CInArcInfo &ai = m_Database.Volumes.Back().ArcInfo;
290
461
  if (ai.IsThereNext())
291
- otherArchive = &ai.NextArc;
462
+ otherArc = &ai.NextArc;
292
463
  }
293
- if (!otherArchive)
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 (res == S_OK)
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
- res = S_FALSE;
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
- int NumIdenticalFiles;
555
+ unsigned NumIdenticalFiles;
350
556
  bool TempBufMode;
351
557
  UInt32 m_BufStartFolderOffset;
352
558
 
353
- int m_StartIndex;
354
- int m_CurrentIndex;
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
- int startIndex,
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
- int startIndex,
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
- int numExtractItems = 0;
441
- int curIndex;
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
- // This is Write function
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 != NULL)
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 > 0)
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 != NULL)
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::kUnSupportedMethod));
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
- return E_FAIL;
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 != NULL)
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
- HRESULT CFolderOutStream::FlushCorrupted()
854
+
855
+ HRESULT CFolderOutStream::FlushCorrupted(unsigned folderIndex)
619
856
  {
620
- const UInt32 kBufferSize = (1 << 10);
621
- Byte buffer[kBufferSize];
622
- for (int i = 0; i < kBufferSize; i++)
623
- buffer[i] = 0;
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
- UInt64 remain = GetRemain();
627
- if (remain == 0)
875
+ if (!NeedMoreWrite())
628
876
  return S_OK;
629
- UInt32 size = (UInt32)MyMin(remain, (UInt64)kBufferSize);
877
+ UInt64 remain = GetRemain();
878
+ UInt32 size = (remain < kBufSize ? (UInt32)remain : (UInt32)kBufSize);
630
879
  UInt32 processedSizeLocal = 0;
631
- RINOK(Write2(buffer, size, &processedSizeLocal, false));
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::kUnSupportedMethod));
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
- bool allFilesMode = (numItems == (UInt32)-1);
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
- for(i = 0; i < numItems; i++)
916
+
917
+ for (i = 0; i < numItems; i++)
666
918
  {
667
- int index = allFilesMode ? i : indices[i];
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<ICompressCoder> lzxDecoder;
950
+ CMyComPtr<IUnknown> lzxDecoder;
698
951
 
699
952
  NCompress::NQuantum::CDecoder *quantumDecoderSpec = NULL;
700
- CMyComPtr<ICompressCoder> quantumDecoder;
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
- for(i = 0; i < numItems;)
961
+
962
+ for (i = 0;;)
709
963
  {
710
- int index = allFilesMode ? i : indices[i];
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
- int itemIndex = mvItem.ItemIndex;
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
- int startIndex2 = m_Database.FolderStartFileIndex[folderIndex];
745
- int startIndex = startIndex2;
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
- for(;i < numItems; i++)
1016
+
1017
+ for (; i < numItems; i++)
753
1018
  {
754
- int indexNext = allFilesMode ? i : indices[i];
755
- const CMvItem &mvItem = m_Database.Items[indexNext];
756
- const CItem &item = m_Database.Volumes[mvItem.VolumeIndex].Items[mvItem.ItemIndex];
757
- if (item.IsDir())
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(&mvItem);
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 = item.GetEndOffset();
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
- const CFolder &folder = db.Folders[item.GetFolderIndex(db.Folders.Size())];
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
- switch(folder.GetCompressionMethod())
1045
+ HRESULT res = S_OK;
1046
+
1047
+ switch (folder.GetMethod())
784
1048
  {
785
- case NHeader::NCompressionMethodMajor::kNone:
1049
+ case NHeader::NMethod::kNone:
786
1050
  break;
787
- case NHeader::NCompressionMethodMajor::kMSZip:
788
- if(deflateDecoderSpec == NULL)
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
- case NHeader::NCompressionMethodMajor::kLZX:
796
- if(lzxDecoderSpec == NULL)
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
- RINOK(lzxDecoderSpec->SetParams(folder.CompressionTypeMinor));
1067
+ res = lzxDecoderSpec->SetParams_and_Alloc(folder.MethodMinor);
802
1068
  break;
803
- case NHeader::NCompressionMethodMajor::kQuantum:
804
- if(quantumDecoderSpec == NULL)
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.CompressionTypeMinor);
1076
+ res = quantumDecoderSpec->SetParams(folder.MethodMinor);
810
1077
  break;
1078
+
811
1079
  default:
812
- {
813
- RINOK(cabFolderOutStream->Unsupported());
814
- totalUnPacked += curUnpack;
815
- continue;
816
- }
1080
+ res = E_INVALIDARG;
1081
+ break;
817
1082
  }
818
1083
 
819
- cabBlockInStreamSpec->InitForNewFolder();
820
-
821
- HRESULT res = S_OK;
1084
+ if (res == E_INVALIDARG)
1085
+ {
1086
+ RINOK(cabFolderOutStream->Unsupported());
1087
+ totalUnPacked += curUnpack;
1088
+ continue;
1089
+ }
1090
+ RINOK(res);
822
1091
 
823
1092
  {
824
- int volIndex = mvItem.VolumeIndex;
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
- for (UInt32 f = 0; cabFolderOutStream->GetRemain() != 0;)
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 &db = m_Database.Volumes[volIndex];
837
- const CFolder &folder = db.Folders[locFolderIndex];
838
- if (f == 0)
1107
+ const CDatabaseEx &db2 = m_Database.Volumes[volIndex];
1108
+ const CFolder &folder2 = db2.Folders[locFolderIndex];
1109
+
1110
+ if (bl == 0)
839
1111
  {
840
- cabBlockInStreamSpec->SetStream(db.Stream);
841
- cabBlockInStreamSpec->ReservedSize = db.ArchiveInfo.GetDataBlockReserveSize();
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
- if (f == folder.NumDataBlocks)
1115
+
1116
+ if (bl == folder2.NumDataBlocks)
845
1117
  {
846
- volIndex++;
847
- locFolderIndex = 0;
848
- f = 0;
849
- continue;
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
- if (unpackRemain > kBlockSizeMax)
878
- unpackRemain = kBlockSizeMax;
879
- if (unpackRemain > unpackSize)
880
- unpackRemain = unpackSize;
881
-
882
- switch(folder.GetCompressionMethod())
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::NCompressionMethodMajor::kNone:
885
- res = copyCoder->Code(cabBlockInStream, outStream, NULL, &unpackRemain, NULL);
1185
+ case NHeader::NMethod::kNone:
1186
+ res = copyCoder->Code(cabBlockInStream, outStream, NULL, &unpackSize64, NULL);
886
1187
  break;
887
- case NHeader::NCompressionMethodMajor::kMSZip:
888
- deflateDecoderSpec->SetKeepHistory(keepHistory);
889
- res = deflateDecoder->Code(cabBlockInStream, outStream, NULL, &unpackRemain, NULL);
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
- case NHeader::NCompressionMethodMajor::kLZX:
1206
+
1207
+ case NHeader::NMethod::kLZX:
892
1208
  lzxDecoderSpec->SetKeepHistory(keepHistory);
893
- res = lzxDecoder->Code(cabBlockInStream, outStream, NULL, &unpackRemain, NULL);
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
- if (res != S_OK || cabFolderOutStream->GetRemain() != 0)
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();