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
@@ -4,12 +4,12 @@
4
4
 
5
5
  #include "../../../../C/Alloc.h"
6
6
 
7
- #include "Common/AutoPtr.h"
8
- #include "Common/Defs.h"
9
- #include "Common/StringConvert.h"
7
+ #include "../../../Common/AutoPtr.h"
8
+ #include "../../../Common/Defs.h"
9
+ #include "../../../Common/StringConvert.h"
10
10
 
11
- #include "Windows/Defs.h"
12
- #include "Windows/Thread.h"
11
+ #include "../../../Windows/TimeUtils.h"
12
+ #include "../../../Windows/Thread.h"
13
13
 
14
14
  #include "../../Common/CreateCoder.h"
15
15
  #include "../../Common/LimitedStreams.h"
@@ -44,79 +44,69 @@ static const Byte kExtractHostOS = kHostOS;
44
44
 
45
45
  static const Byte kMethodForDirectory = NFileHeader::NCompressionMethod::kStored;
46
46
 
47
- static HRESULT CopyBlockToArchive(ISequentialInStream *inStream,
47
+ static HRESULT CopyBlockToArchive(ISequentialInStream *inStream, UInt64 size,
48
48
  COutArchive &outArchive, ICompressProgressInfo *progress)
49
49
  {
50
50
  CMyComPtr<ISequentialOutStream> outStream;
51
51
  outArchive.CreateStreamForCopying(&outStream);
52
- return NCompress::CopyStream(inStream, outStream, progress);
53
- }
54
-
55
- static HRESULT WriteRange(IInStream *inStream, COutArchive &outArchive,
56
- const CUpdateRange &range, ICompressProgressInfo *progress)
57
- {
58
- UInt64 position;
59
- RINOK(inStream->Seek(range.Position, STREAM_SEEK_SET, &position));
60
-
61
- CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
62
- CMyComPtr<CLimitedSequentialInStream> inStreamLimited(streamSpec);
63
- streamSpec->SetStream(inStream);
64
- streamSpec->Init(range.Size);
65
-
66
- RINOK(CopyBlockToArchive(inStreamLimited, outArchive, progress));
67
- return progress->SetRatioInfo(&range.Size, &range.Size);
52
+ return NCompress::CopyStream_ExactSize(inStream, outStream, size, progress);
68
53
  }
69
54
 
70
55
  static void SetFileHeader(
71
56
  COutArchive &archive,
72
57
  const CCompressionMethodMode &options,
73
58
  const CUpdateItem &ui,
74
- CItem &item)
59
+ // bool isSeqMode,
60
+ CItemOut &item)
75
61
  {
76
- item.UnPackSize = ui.Size;
62
+ item.Size = ui.Size;
77
63
  bool isDir;
78
64
 
79
65
  item.ClearFlags();
80
66
 
81
- if (ui.NewProperties)
67
+ if (ui.NewProps)
82
68
  {
83
69
  isDir = ui.IsDir;
84
70
  item.Name = ui.Name;
85
71
  item.SetUtf8(ui.IsUtf8);
86
- item.ExternalAttributes = ui.Attributes;
72
+ item.ExternalAttrib = ui.Attrib;
87
73
  item.Time = ui.Time;
88
- item.NtfsMTime = ui.NtfsMTime;
89
- item.NtfsATime = ui.NtfsATime;
90
- item.NtfsCTime = ui.NtfsCTime;
74
+ item.Ntfs_MTime = ui.Ntfs_MTime;
75
+ item.Ntfs_ATime = ui.Ntfs_ATime;
76
+ item.Ntfs_CTime = ui.Ntfs_CTime;
91
77
  item.NtfsTimeIsDefined = ui.NtfsTimeIsDefined;
92
78
  }
93
79
  else
94
80
  isDir = item.IsDir();
95
81
 
96
- item.LocalHeaderPosition = archive.GetCurrentPosition();
82
+ item.LocalHeaderPos = archive.GetCurPos();
97
83
  item.MadeByVersion.HostOS = kMadeByHostOS;
98
84
  item.MadeByVersion.Version = NFileHeader::NCompressionMethod::kMadeByProgramVersion;
99
85
 
100
86
  item.ExtractVersion.HostOS = kExtractHostOS;
101
87
 
102
- item.InternalAttributes = 0; // test it
88
+ item.InternalAttrib = 0; // test it
103
89
  item.SetEncrypted(!isDir && options.PasswordIsDefined);
90
+ // item.SetDescriptorMode(isSeqMode);
91
+
104
92
  if (isDir)
105
93
  {
106
94
  item.ExtractVersion.Version = NFileHeader::NCompressionMethod::kExtractVersion_Dir;
107
- item.CompressionMethod = kMethodForDirectory;
95
+ item.Method = kMethodForDirectory;
108
96
  item.PackSize = 0;
109
- item.FileCRC = 0; // test it
97
+ item.Size = 0;
98
+ item.Crc = 0;
110
99
  }
111
100
  }
112
101
 
102
+
113
103
  static void SetItemInfoFromCompressingResult(const CCompressingResult &compressingResult,
114
104
  bool isAesMode, Byte aesKeyMode, CItem &item)
115
105
  {
116
106
  item.ExtractVersion.Version = compressingResult.ExtractVersion;
117
- item.CompressionMethod = compressingResult.Method;
118
- item.FileCRC = compressingResult.CRC;
119
- item.UnPackSize = compressingResult.UnpackSize;
107
+ item.Method = compressingResult.Method;
108
+ item.Crc = compressingResult.CRC;
109
+ item.Size = compressingResult.UnpackSize;
120
110
  item.PackSize = compressingResult.PackSize;
121
111
 
122
112
  item.LocalExtra.Clear();
@@ -124,11 +114,11 @@ static void SetItemInfoFromCompressingResult(const CCompressingResult &compressi
124
114
 
125
115
  if (isAesMode)
126
116
  {
127
- CWzAesExtraField wzAesField;
117
+ CWzAesExtra wzAesField;
128
118
  wzAesField.Strength = aesKeyMode;
129
119
  wzAesField.Method = compressingResult.Method;
130
- item.CompressionMethod = NFileHeader::NCompressionMethod::kWzAES;
131
- item.FileCRC = 0;
120
+ item.Method = NFileHeader::NCompressionMethod::kWzAES;
121
+ item.Crc = 0;
132
122
  CExtraSubBlock sb;
133
123
  wzAesField.SetSubBlock(sb);
134
124
  item.LocalExtra.SubBlocks.Add(sb);
@@ -136,16 +126,14 @@ static void SetItemInfoFromCompressingResult(const CCompressingResult &compressi
136
126
  }
137
127
  }
138
128
 
129
+
139
130
  #ifndef _7ZIP_ST
140
131
 
141
132
  static THREAD_FUNC_DECL CoderThread(void *threadCoderInfo);
142
133
 
143
134
  struct CThreadInfo
144
135
  {
145
- #ifdef EXTERNAL_CODECS
146
- CMyComPtr<ICompressCodecsInfo> _codecsInfo;
147
- const CObjectVector<CCodecInfoEx> *_externalCodecs;
148
- #endif
136
+ DECL_EXTERNAL_CODECS_LOC_VARS2;
149
137
 
150
138
  NWindows::CThread Thread;
151
139
  NWindows::NSynchronization::CAutoResetEvent CompressEvent;
@@ -165,12 +153,14 @@ struct CThreadInfo
165
153
 
166
154
  bool IsFree;
167
155
  UInt32 UpdateIndex;
156
+ UInt32 FileTime;
168
157
 
169
158
  CThreadInfo(const CCompressionMethodMode &options):
170
159
  ExitThread(false),
171
160
  ProgressSpec(0),
172
161
  OutStreamSpec(0),
173
- Coder(options)
162
+ Coder(options),
163
+ FileTime(0)
174
164
  {}
175
165
 
176
166
  HRESULT CreateEvents(CSynchro *sync)
@@ -191,7 +181,6 @@ struct CThreadInfo
191
181
  Thread.Wait();
192
182
  Thread.Close();
193
183
  }
194
-
195
184
  };
196
185
 
197
186
  void CThreadInfo::WaitAndCode()
@@ -201,11 +190,11 @@ void CThreadInfo::WaitAndCode()
201
190
  CompressEvent.Lock();
202
191
  if (ExitThread)
203
192
  return;
193
+
204
194
  Result = Coder.Compress(
205
- #ifdef EXTERNAL_CODECS
206
- _codecsInfo, _externalCodecs,
207
- #endif
208
- InStream, OutStream, Progress, CompressingResult);
195
+ EXTERNAL_CODECS_LOC_VARS
196
+ InStream, OutStream, FileTime, Progress, CompressingResult);
197
+
209
198
  if (Result == S_OK && Progress)
210
199
  Result = Progress->SetRatioInfo(&CompressingResult.UnpackSize, &CompressingResult.PackSize);
211
200
  CompressionCompletedEvent.Set();
@@ -224,7 +213,7 @@ public:
224
213
  CObjectVector<CThreadInfo> Threads;
225
214
  ~CThreads()
226
215
  {
227
- for (int i = 0; i < Threads.Size(); i++)
216
+ FOR_VECTOR (i, Threads)
228
217
  Threads[i].StopWaitClose();
229
218
  }
230
219
  };
@@ -245,7 +234,7 @@ public:
245
234
  CMemRefs(CMemBlockManagerMt *manager): Manager(manager) {} ;
246
235
  ~CMemRefs()
247
236
  {
248
- for (int i = 0; i < Refs.Size(); i++)
237
+ FOR_VECTOR (i, Refs)
249
238
  Refs[i].FreeOpt(Manager);
250
239
  }
251
240
  };
@@ -265,7 +254,7 @@ public:
265
254
  MY_UNKNOWN_IMP
266
255
  void Create(IProgress *progress, bool inSizeIsMain);
267
256
  void SetProgressOffset(UInt64 progressOffset);
268
- HRESULT SetRatioInfo(int index, const UInt64 *inSize, const UInt64 *outSize);
257
+ HRESULT SetRatioInfo(unsigned index, const UInt64 *inSize, const UInt64 *outSize);
269
258
  STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
270
259
  };
271
260
 
@@ -285,16 +274,16 @@ void CMtProgressMixer2::SetProgressOffset(UInt64 progressOffset)
285
274
  CriticalSection.Leave();
286
275
  }
287
276
 
288
- HRESULT CMtProgressMixer2::SetRatioInfo(int index, const UInt64 *inSize, const UInt64 *outSize)
277
+ HRESULT CMtProgressMixer2::SetRatioInfo(unsigned index, const UInt64 *inSize, const UInt64 *outSize)
289
278
  {
290
279
  NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
291
280
  if (index == 0 && RatioProgress)
292
281
  {
293
282
  RINOK(RatioProgress->SetRatioInfo(inSize, outSize));
294
283
  }
295
- if (inSize != 0)
284
+ if (inSize)
296
285
  InSizes[index] = *inSize;
297
- if (outSize != 0)
286
+ if (outSize)
298
287
  OutSizes[index] = *outSize;
299
288
  UInt64 v = ProgressOffset + (_inSizeIsMain ?
300
289
  (InSizes[0] + InSizes[1]) :
@@ -335,74 +324,151 @@ STDMETHODIMP CMtProgressMixer::SetRatioInfo(const UInt64 *inSize, const UInt64 *
335
324
  #endif
336
325
 
337
326
 
338
- static HRESULT UpdateItemOldData(COutArchive &archive,
339
- IInStream *inStream,
340
- const CUpdateItem &ui, CItemEx &item,
327
+ static HRESULT UpdateItemOldData(
328
+ COutArchive &archive,
329
+ CInArchive *inArchive,
330
+ const CItemEx &itemEx,
331
+ const CUpdateItem &ui,
332
+ CItemOut &item,
341
333
  /* bool izZip64, */
342
334
  ICompressProgressInfo *progress,
335
+ IArchiveUpdateCallbackFile *opCallback,
343
336
  UInt64 &complexity)
344
337
  {
345
- if (ui.NewProperties)
338
+ if (opCallback)
339
+ {
340
+ RINOK(opCallback->ReportOperation(
341
+ NEventIndexType::kInArcIndex, (UInt32)ui.IndexInArc,
342
+ NUpdateNotifyOp::kReplicate))
343
+ }
344
+
345
+ if (ui.NewProps)
346
346
  {
347
347
  if (item.HasDescriptor())
348
348
  return E_NOTIMPL;
349
349
 
350
350
  // use old name size.
351
- // CUpdateRange range(item.GetLocalExtraPosition(), item.LocalExtraSize + item.PackSize);
352
- CUpdateRange range(item.GetDataPosition(), item.PackSize);
353
351
 
354
- // item.ExternalAttributes = ui.Attributes;
355
- // Test it
352
+ CMyComPtr<ISequentialInStream> packStream;
353
+ RINOK(inArchive->GetItemStream(itemEx, true, packStream));
354
+ if (!packStream)
355
+ return E_NOTIMPL;
356
+
357
+ // we keep ExternalAttrib and some another properties from old archive
358
+ // item.ExternalAttrib = ui.Attrib;
359
+
356
360
  item.Name = ui.Name;
357
361
  item.SetUtf8(ui.IsUtf8);
358
362
  item.Time = ui.Time;
359
- item.NtfsMTime = ui.NtfsMTime;
360
- item.NtfsATime = ui.NtfsATime;
361
- item.NtfsCTime = ui.NtfsCTime;
363
+ item.Ntfs_MTime = ui.Ntfs_MTime;
364
+ item.Ntfs_ATime = ui.Ntfs_ATime;
365
+ item.Ntfs_CTime = ui.Ntfs_CTime;
362
366
  item.NtfsTimeIsDefined = ui.NtfsTimeIsDefined;
363
367
 
364
368
  item.CentralExtra.RemoveUnknownSubBlocks();
365
369
  item.LocalExtra.RemoveUnknownSubBlocks();
366
-
367
- archive.PrepareWriteCompressedData2((UInt16)item.Name.Length(), item.UnPackSize, item.PackSize, item.LocalExtra.HasWzAesField());
368
- item.LocalHeaderPosition = archive.GetCurrentPosition();
369
- archive.SeekToPackedDataPosition();
370
- RINOK(WriteRange(inStream, archive, range, progress));
371
- complexity += range.Size;
370
+ item.LocalHeaderPos = archive.GetCurPos();
371
+
372
+ archive.PrepareWriteCompressedData2(item.Name.Len(), item.Size, item.PackSize, item.LocalExtra.HasWzAes());
372
373
  archive.WriteLocalHeader(item);
374
+
375
+ RINOK(CopyBlockToArchive(packStream, itemEx.PackSize, archive, progress));
376
+
377
+ complexity += itemEx.PackSize;
373
378
  }
374
379
  else
375
380
  {
376
- CUpdateRange range(item.LocalHeaderPosition, item.GetLocalFullSize());
381
+ CMyComPtr<ISequentialInStream> packStream;
382
+ RINOK(inArchive->GetItemStream(itemEx, false, packStream));
383
+ if (!packStream)
384
+ return E_NOTIMPL;
377
385
 
378
386
  // set new header position
379
- item.LocalHeaderPosition = archive.GetCurrentPosition();
387
+ item.LocalHeaderPos = archive.GetCurPos();
388
+
389
+ const UInt64 rangeSize = itemEx.GetLocalFullSize();
380
390
 
381
- RINOK(WriteRange(inStream, archive, range, progress));
382
- complexity += range.Size;
383
- archive.MoveBasePosition(range.Size);
391
+ RINOK(CopyBlockToArchive(packStream, rangeSize, archive, progress));
392
+
393
+ complexity += rangeSize;
394
+ archive.MoveCurPos(rangeSize);
384
395
  }
396
+
385
397
  return S_OK;
386
398
  }
387
399
 
400
+
388
401
  static void WriteDirHeader(COutArchive &archive, const CCompressionMethodMode *options,
389
- const CUpdateItem &ui, CItemEx &item)
402
+ const CUpdateItem &ui, CItemOut &item)
390
403
  {
391
404
  SetFileHeader(archive, *options, ui, item);
392
- archive.PrepareWriteCompressedData((UInt16)item.Name.Length(), ui.Size, options->IsAesMode);
393
- archive.WriteLocalHeader(item);
405
+ archive.PrepareWriteCompressedData(item.Name.Len(), ui.Size,
406
+ // options->IsRealAesMode()
407
+ false // fixed 9.31
408
+ );
409
+ archive.WriteLocalHeader_And_SeekToNextFile(item);
394
410
  }
395
411
 
412
+
413
+ static inline bool IsZero_FILETIME(const FILETIME &ft)
414
+ {
415
+ return (ft.dwHighDateTime == 0 && ft.dwLowDateTime == 0);
416
+ }
417
+
418
+ static void UpdatePropsFromStream(CUpdateItem &item, ISequentialInStream *fileInStream,
419
+ IArchiveUpdateCallback *updateCallback, UInt64 &totalComplexity)
420
+ {
421
+ CMyComPtr<IStreamGetProps> getProps;
422
+ fileInStream->QueryInterface(IID_IStreamGetProps, (void **)&getProps);
423
+ if (!getProps)
424
+ return;
425
+
426
+ FILETIME cTime, aTime, mTime;
427
+ UInt64 size;
428
+ // UInt32 attrib;
429
+ if (getProps->GetProps(&size, &cTime, &aTime, &mTime, NULL) != S_OK)
430
+ return;
431
+
432
+ if (size != item.Size && size != (UInt64)(Int64)-1)
433
+ {
434
+ Int64 newComplexity = totalComplexity + ((Int64)size - (Int64)item.Size);
435
+ if (newComplexity > 0)
436
+ {
437
+ totalComplexity = newComplexity;
438
+ updateCallback->SetTotal(totalComplexity);
439
+ }
440
+ item.Size = size;
441
+ }
442
+
443
+ if (!IsZero_FILETIME(mTime))
444
+ {
445
+ item.Ntfs_MTime = mTime;
446
+ FILETIME loc = { 0, 0 };
447
+ if (FileTimeToLocalFileTime(&mTime, &loc))
448
+ {
449
+ item.Time = 0;
450
+ NTime::FileTimeToDosTime(loc, item.Time);
451
+ }
452
+ }
453
+
454
+ if (!IsZero_FILETIME(cTime)) item.Ntfs_CTime = cTime;
455
+ if (!IsZero_FILETIME(aTime)) item.Ntfs_ATime = aTime;
456
+
457
+ // item.Attrib = attrib;
458
+ }
459
+
460
+
396
461
  static HRESULT Update2St(
397
462
  DECL_EXTERNAL_CODECS_LOC_VARS
398
463
  COutArchive &archive,
399
464
  CInArchive *inArchive,
400
- IInStream *inStream,
401
465
  const CObjectVector<CItemEx> &inputItems,
402
- const CObjectVector<CUpdateItem> &updateItems,
466
+ CObjectVector<CUpdateItem> &updateItems,
403
467
  const CCompressionMethodMode *options,
404
468
  const CByteBuffer *comment,
405
- IArchiveUpdateCallback *updateCallback)
469
+ IArchiveUpdateCallback *updateCallback,
470
+ UInt64 &totalComplexity,
471
+ IArchiveUpdateCallbackFile *opCallback)
406
472
  {
407
473
  CLocalProgress *lps = new CLocalProgress;
408
474
  CMyComPtr<ICompressProgressInfo> progress = lps;
@@ -410,26 +476,29 @@ static HRESULT Update2St(
410
476
 
411
477
  CAddCommon compressor(*options);
412
478
 
413
- CObjectVector<CItem> items;
479
+ CObjectVector<CItemOut> items;
414
480
  UInt64 unpackSizeTotal = 0, packSizeTotal = 0;
415
481
 
416
- for (int itemIndex = 0; itemIndex < updateItems.Size(); itemIndex++)
482
+ FOR_VECTOR (itemIndex, updateItems)
417
483
  {
418
484
  lps->InSize = unpackSizeTotal;
419
485
  lps->OutSize = packSizeTotal;
420
486
  RINOK(lps->SetCur());
421
- const CUpdateItem &ui = updateItems[itemIndex];
422
- CItemEx item;
423
- if (!ui.NewProperties || !ui.NewData)
487
+ CUpdateItem &ui = updateItems[itemIndex];
488
+ CItemEx itemEx;
489
+ CItemOut item;
490
+
491
+ if (!ui.NewProps || !ui.NewData)
424
492
  {
425
- item = inputItems[ui.IndexInArchive];
426
- if (inArchive->ReadLocalItemAfterCdItemFull(item) != S_OK)
493
+ itemEx = inputItems[ui.IndexInArc];
494
+ if (inArchive->ReadLocalItemAfterCdItemFull(itemEx) != S_OK)
427
495
  return E_NOTIMPL;
496
+ (CItem &)item = itemEx;
428
497
  }
429
498
 
430
499
  if (ui.NewData)
431
500
  {
432
- bool isDir = ((ui.NewProperties) ? ui.IsDir : item.IsDir());
501
+ bool isDir = ((ui.NewProps) ? ui.IsDir : item.IsDir());
433
502
  if (isDir)
434
503
  {
435
504
  WriteDirHeader(archive, options, ui, item);
@@ -445,20 +514,46 @@ static HRESULT Update2St(
445
514
  continue;
446
515
  }
447
516
  RINOK(res);
517
+ if (!fileInStream)
518
+ return E_INVALIDARG;
448
519
 
449
- // file Size can be 64-bit !!!
520
+ // bool isSeqMode = false;
521
+ /*
522
+ {
523
+ CMyComPtr<IInStream> inStream2;
524
+ fileInStream->QueryInterface(IID_IInStream, (void **)&inStream2);
525
+ isSeqMode = (inStream2 == NULL);
526
+ }
527
+ */
528
+
529
+ UpdatePropsFromStream(ui, fileInStream, updateCallback, totalComplexity);
450
530
  SetFileHeader(archive, *options, ui, item);
451
- archive.PrepareWriteCompressedData((UInt16)item.Name.Length(), ui.Size, options->IsAesMode);
531
+
532
+ // file Size can be 64-bit !!!
533
+ archive.PrepareWriteCompressedData(item.Name.Len(), ui.Size, options->IsRealAesMode());
452
534
  CCompressingResult compressingResult;
453
535
  CMyComPtr<IOutStream> outStream;
454
536
  archive.CreateStreamForCompressing(&outStream);
537
+
455
538
  RINOK(compressor.Compress(
456
539
  EXTERNAL_CODECS_LOC_VARS
457
- fileInStream, outStream, progress, compressingResult));
458
- SetItemInfoFromCompressingResult(compressingResult, options->IsAesMode, options->AesKeyMode, item);
459
- archive.WriteLocalHeader(item);
540
+ fileInStream, outStream,
541
+ ui.Time,
542
+ progress, compressingResult));
543
+
544
+ if (compressingResult.FileTimeWasUsed)
545
+ {
546
+ /*
547
+ if (!item.HasDescriptor())
548
+ return E_FAIL;
549
+ */
550
+ item.SetDescriptorMode(true);
551
+ }
552
+
553
+ SetItemInfoFromCompressingResult(compressingResult, options->IsRealAesMode(), options->AesKeyMode, item);
554
+ archive.WriteLocalHeader_And_SeekToNextFile(item);
460
555
  RINOK(updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK));
461
- unpackSizeTotal += item.UnPackSize;
556
+ unpackSizeTotal += item.Size;
462
557
  packSizeTotal += item.PackSize;
463
558
  }
464
559
  }
@@ -466,34 +561,43 @@ static HRESULT Update2St(
466
561
  {
467
562
  UInt64 complexity = 0;
468
563
  lps->SendRatio = false;
469
- RINOK(UpdateItemOldData(archive, inStream, ui, item, progress, complexity));
564
+ RINOK(UpdateItemOldData(archive, inArchive, itemEx, ui, item, progress, opCallback, complexity));
470
565
  lps->SendRatio = true;
471
566
  lps->ProgressOffset += complexity;
472
567
  }
568
+
473
569
  items.Add(item);
474
- lps->ProgressOffset += NFileHeader::kLocalBlockSize;
570
+ lps->ProgressOffset += kLocalHeaderSize;
475
571
  }
572
+
573
+ lps->InSize = unpackSizeTotal;
574
+ lps->OutSize = packSizeTotal;
575
+ RINOK(lps->SetCur());
476
576
  archive.WriteCentralDir(items, comment);
477
577
  return S_OK;
478
578
  }
479
579
 
580
+
480
581
  static HRESULT Update2(
481
582
  DECL_EXTERNAL_CODECS_LOC_VARS
482
583
  COutArchive &archive,
483
584
  CInArchive *inArchive,
484
- IInStream *inStream,
485
585
  const CObjectVector<CItemEx> &inputItems,
486
- const CObjectVector<CUpdateItem> &updateItems,
586
+ CObjectVector<CUpdateItem> &updateItems,
487
587
  const CCompressionMethodMode *options,
488
588
  const CByteBuffer *comment,
489
589
  IArchiveUpdateCallback *updateCallback)
490
590
  {
591
+ CMyComPtr<IArchiveUpdateCallbackFile> opCallback;
592
+ updateCallback->QueryInterface(IID_IArchiveUpdateCallbackFile, (void **)&opCallback);
593
+
491
594
  UInt64 complexity = 0;
492
595
  UInt64 numFilesToCompress = 0;
493
596
  UInt64 numBytesToCompress = 0;
494
597
 
495
- int i;
496
- for(i = 0; i < updateItems.Size(); i++)
598
+ unsigned i;
599
+
600
+ for (i = 0; i < updateItems.Size(); i++)
497
601
  {
498
602
  const CUpdateItem &ui = updateItems[i];
499
603
  if (ui.NewData)
@@ -508,82 +612,101 @@ static HRESULT Update2(
508
612
  }
509
613
  else
510
614
  {
511
- CItemEx inputItem = inputItems[ui.IndexInArchive];
615
+ CItemEx inputItem = inputItems[ui.IndexInArc];
512
616
  if (inArchive->ReadLocalItemAfterCdItemFull(inputItem) != S_OK)
513
617
  return E_NOTIMPL;
514
618
  complexity += inputItem.GetLocalFullSize();
515
619
  // complexity += inputItem.GetCentralExtraPlusCommentSize();
516
620
  }
517
- complexity += NFileHeader::kLocalBlockSize;
518
- complexity += NFileHeader::kCentralBlockSize;
621
+ complexity += kLocalHeaderSize;
622
+ complexity += kCentralHeaderSize;
519
623
  }
520
624
 
521
625
  if (comment)
522
- complexity += comment->GetCapacity();
626
+ complexity += comment->Size();
523
627
  complexity++; // end of central
524
628
  updateCallback->SetTotal(complexity);
525
629
 
630
+ UInt64 totalComplexity = complexity;
631
+
526
632
  CAddCommon compressor(*options);
527
633
 
528
634
  complexity = 0;
529
635
 
636
+ CCompressionMethodMode options2;
637
+ if (options != 0)
638
+ options2 = *options;
639
+
530
640
  #ifndef _7ZIP_ST
531
641
 
532
- const size_t kNumMaxThreads = (1 << 10);
533
642
  UInt32 numThreads = options->NumThreads;
643
+ const UInt32 kNumMaxThreads = 64;
534
644
  if (numThreads > kNumMaxThreads)
535
645
  numThreads = kNumMaxThreads;
646
+ if (numThreads > MAXIMUM_WAIT_OBJECTS) // is 64 in Windows (is it 64 in all versions?)
647
+ numThreads = MAXIMUM_WAIT_OBJECTS;
648
+ if (numThreads < 1)
649
+ numThreads = 1;
650
+
536
651
 
537
652
  const size_t kMemPerThread = (1 << 25);
538
653
  const size_t kBlockSize = 1 << 16;
539
654
 
540
- CCompressionMethodMode options2;
541
- if (options != 0)
542
- options2 = *options;
543
-
544
655
  bool mtMode = ((options != 0) && (numThreads > 1));
545
656
 
546
657
  if (numFilesToCompress <= 1)
547
658
  mtMode = false;
548
659
 
549
- if (mtMode)
660
+ Byte method = options->MethodSequence.Front();
661
+
662
+ if (!mtMode)
663
+ {
664
+ if (options2.MethodInfo.FindProp(NCoderPropID::kNumThreads) < 0)
665
+ {
666
+ // fixed for 9.31. bzip2 default is just one thread.
667
+ if (options2.NumThreadsWasChanged || method == NFileHeader::NCompressionMethod::kBZip2)
668
+ options2.MethodInfo.AddProp_NumThreads(numThreads);
669
+ }
670
+ }
671
+ else
550
672
  {
551
- Byte method = options->MethodSequence.Front();
552
673
  if (method == NFileHeader::NCompressionMethod::kStored && !options->PasswordIsDefined)
553
- mtMode = false;
674
+ numThreads = 1;
554
675
  if (method == NFileHeader::NCompressionMethod::kBZip2)
555
676
  {
556
- UInt64 averageSize = numBytesToCompress / numFilesToCompress;
557
- UInt32 blockSize = options->DicSize;
558
- if (blockSize == 0)
559
- blockSize = 1;
560
- UInt64 averageNumberOfBlocks = averageSize / blockSize;
561
- UInt32 numBZip2Threads = 32;
562
- if (averageNumberOfBlocks < numBZip2Threads)
563
- numBZip2Threads = (UInt32)averageNumberOfBlocks;
564
- if (numBZip2Threads < 1)
565
- numBZip2Threads = 1;
566
- numThreads = numThreads / numBZip2Threads;
567
- options2.NumThreads = numBZip2Threads;
568
- if (numThreads <= 1)
569
- mtMode = false;
677
+ bool fixedNumber;
678
+ UInt32 numBZip2Threads = options2.MethodInfo.Get_BZip2_NumThreads(fixedNumber);
679
+ if (!fixedNumber)
680
+ {
681
+ UInt64 averageSize = numBytesToCompress / numFilesToCompress;
682
+ UInt32 blockSize = options2.MethodInfo.Get_BZip2_BlockSize();
683
+ UInt64 averageNumberOfBlocks = averageSize / blockSize + 1;
684
+ numBZip2Threads = 32;
685
+ if (averageNumberOfBlocks < numBZip2Threads)
686
+ numBZip2Threads = (UInt32)averageNumberOfBlocks;
687
+ options2.MethodInfo.AddProp_NumThreads(numBZip2Threads);
688
+ }
689
+ numThreads /= numBZip2Threads;
570
690
  }
571
691
  if (method == NFileHeader::NCompressionMethod::kLZMA)
572
692
  {
573
- UInt32 numLZMAThreads = (options->Algo > 0 ? 2 : 1);
693
+ bool fixedNumber;
694
+ // we suppose that default LZMA is 2 thread. So we don't change it
695
+ UInt32 numLZMAThreads = options2.MethodInfo.Get_Lzma_NumThreads(fixedNumber);
574
696
  numThreads /= numLZMAThreads;
575
- options2.NumThreads = numLZMAThreads;
576
- if (numThreads <= 1)
577
- mtMode = false;
578
697
  }
698
+ if (numThreads > numFilesToCompress)
699
+ numThreads = (UInt32)numFilesToCompress;
700
+ if (numThreads <= 1)
701
+ mtMode = false;
579
702
  }
580
703
 
581
704
  if (!mtMode)
582
705
  #endif
583
706
  return Update2St(
584
707
  EXTERNAL_CODECS_LOC_VARS
585
- archive, inArchive,inStream,
586
- inputItems, updateItems, options, comment, updateCallback);
708
+ archive, inArchive,
709
+ inputItems, updateItems, &options2, comment, updateCallback, totalComplexity, opCallback);
587
710
 
588
711
 
589
712
  #ifndef _7ZIP_ST
@@ -594,9 +717,8 @@ static HRESULT Update2(
594
717
  synchroForCompressingCompletedEvents.Create();
595
718
  NWindows::NSynchronization::CSynchro synchroForOutStreamSpec;
596
719
  synchroForOutStreamSpec.Create();
597
-
598
720
 
599
- CObjectVector<CItem> items;
721
+ CObjectVector<CItemOut> items;
600
722
 
601
723
  CMtProgressMixer *mtProgressMixerSpec = new CMtProgressMixer;
602
724
  CMyComPtr<ICompressProgressInfo> progress = mtProgressMixerSpec;
@@ -610,14 +732,13 @@ static HRESULT Update2(
610
732
 
611
733
  CThreads threads;
612
734
  CRecordVector<HANDLE> compressingCompletedEvents;
613
- CRecordVector<int> threadIndices; // list threads in order of updateItems
735
+ CUIntVector threadIndices; // list threads in order of updateItems
614
736
 
615
737
  {
616
738
  RINOK(memManager.AllocateSpaceAlways(&synchroForOutStreamSpec,(size_t)numThreads * (kMemPerThread / kBlockSize)));
617
- for(i = 0; i < updateItems.Size(); i++)
739
+ for (i = 0; i < updateItems.Size(); i++)
618
740
  refs.Refs.Add(CMemBlocks2());
619
741
 
620
- UInt32 i;
621
742
  for (i = 0; i < numThreads; i++)
622
743
  threads.Threads.Add(CThreadInfo(options2));
623
744
 
@@ -625,8 +746,7 @@ static HRESULT Update2(
625
746
  {
626
747
  CThreadInfo &threadInfo = threads.Threads[i];
627
748
  #ifdef EXTERNAL_CODECS
628
- threadInfo._codecsInfo = codecsInfo;
629
- threadInfo._externalCodecs = externalCodecs;
749
+ threadInfo.__externalCodecs = __externalCodecs;
630
750
  #endif
631
751
  RINOK(threadInfo.CreateEvents(&synchroForCompressingCompletedEvents));
632
752
  threadInfo.OutStreamSpec = new COutMemStream(&memManager);
@@ -636,55 +756,64 @@ static HRESULT Update2(
636
756
  threadInfo.ProgressSpec = new CMtCompressProgress();
637
757
  threadInfo.Progress = threadInfo.ProgressSpec;
638
758
  threadInfo.ProgressSpec->Init(&mtCompressProgressMixer, (int)i);
759
+ threadInfo.FileTime = 0; // fix it !
639
760
  RINOK(threadInfo.CreateThread());
640
761
  }
641
762
  }
642
- int mtItemIndex = 0;
643
763
 
644
- int itemIndex = 0;
764
+ unsigned mtItemIndex = 0;
765
+ unsigned itemIndex = 0;
645
766
  int lastRealStreamItemIndex = -1;
646
767
 
647
768
  while (itemIndex < updateItems.Size())
648
769
  {
649
- if ((UInt32)threadIndices.Size() < numThreads && mtItemIndex < updateItems.Size())
770
+ if (threadIndices.Size() < numThreads && mtItemIndex < updateItems.Size())
650
771
  {
651
- const CUpdateItem &ui = updateItems[mtItemIndex++];
772
+ CUpdateItem &ui = updateItems[mtItemIndex++];
652
773
  if (!ui.NewData)
653
774
  continue;
654
- CItemEx item;
655
- if (ui.NewProperties)
775
+ CItemEx itemEx;
776
+ CItemOut item;
777
+
778
+ if (ui.NewProps)
656
779
  {
657
780
  if (ui.IsDir)
658
781
  continue;
659
782
  }
660
783
  else
661
784
  {
662
- item = inputItems[ui.IndexInArchive];
663
- if (inArchive->ReadLocalItemAfterCdItemFull(item) != S_OK)
785
+ itemEx = inputItems[ui.IndexInArc];
786
+ if (inArchive->ReadLocalItemAfterCdItemFull(itemEx) != S_OK)
664
787
  return E_NOTIMPL;
788
+ (CItem &)item = itemEx;
665
789
  if (item.IsDir())
666
790
  continue;
667
791
  }
792
+
668
793
  CMyComPtr<ISequentialInStream> fileInStream;
794
+
669
795
  {
670
796
  NWindows::NSynchronization::CCriticalSectionLock lock(mtProgressMixerSpec->Mixer2->CriticalSection);
671
797
  HRESULT res = updateCallback->GetStream(ui.IndexInClient, &fileInStream);
672
798
  if (res == S_FALSE)
673
799
  {
674
800
  complexity += ui.Size;
675
- complexity += NFileHeader::kLocalBlockSize;
801
+ complexity += kLocalHeaderSize;
676
802
  mtProgressMixerSpec->Mixer2->SetProgressOffset(complexity);
677
803
  RINOK(updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK));
678
804
  refs.Refs[mtItemIndex - 1].Skip = true;
679
805
  continue;
680
806
  }
681
807
  RINOK(res);
808
+ if (!fileInStream)
809
+ return E_INVALIDARG;
810
+ UpdatePropsFromStream(ui, fileInStream, updateCallback, totalComplexity);
682
811
  RINOK(updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK));
683
812
  }
684
813
 
685
- for (UInt32 i = 0; i < numThreads; i++)
814
+ for (UInt32 k = 0; k < numThreads; k++)
686
815
  {
687
- CThreadInfo &threadInfo = threads.Threads[i];
816
+ CThreadInfo &threadInfo = threads.Threads[k];
688
817
  if (threadInfo.IsFree)
689
818
  {
690
819
  threadInfo.IsFree = false;
@@ -700,10 +829,11 @@ static HRESULT Update2(
700
829
  threadInfo.UpdateIndex = mtItemIndex - 1;
701
830
 
702
831
  compressingCompletedEvents.Add(threadInfo.CompressionCompletedEvent);
703
- threadIndices.Add(i);
832
+ threadIndices.Add(k);
704
833
  break;
705
834
  }
706
835
  }
836
+
707
837
  continue;
708
838
  }
709
839
 
@@ -715,41 +845,49 @@ static HRESULT Update2(
715
845
 
716
846
  const CUpdateItem &ui = updateItems[itemIndex];
717
847
 
718
- CItemEx item;
719
- if (!ui.NewProperties || !ui.NewData)
848
+ CItemEx itemEx;
849
+ CItemOut item;
850
+
851
+ if (!ui.NewProps || !ui.NewData)
720
852
  {
721
- item = inputItems[ui.IndexInArchive];
722
- if (inArchive->ReadLocalItemAfterCdItemFull(item) != S_OK)
853
+ itemEx = inputItems[ui.IndexInArc];
854
+ if (inArchive->ReadLocalItemAfterCdItemFull(itemEx) != S_OK)
723
855
  return E_NOTIMPL;
856
+ (CItem &)item = itemEx;
724
857
  }
725
858
 
726
859
  if (ui.NewData)
727
860
  {
728
- bool isDir = ((ui.NewProperties) ? ui.IsDir : item.IsDir());
861
+ bool isDir = ((ui.NewProps) ? ui.IsDir : item.IsDir());
862
+
729
863
  if (isDir)
730
864
  {
731
865
  WriteDirHeader(archive, options, ui, item);
732
866
  }
733
867
  else
734
868
  {
735
- if (lastRealStreamItemIndex < itemIndex)
869
+ if (lastRealStreamItemIndex < (int)itemIndex)
736
870
  {
737
871
  lastRealStreamItemIndex = itemIndex;
738
872
  SetFileHeader(archive, *options, ui, item);
739
873
  // file Size can be 64-bit !!!
740
- archive.PrepareWriteCompressedData((UInt16)item.Name.Length(), ui.Size, options->IsAesMode);
874
+ archive.PrepareWriteCompressedData(item.Name.Len(), ui.Size, options->IsRealAesMode());
741
875
  }
742
876
 
743
877
  CMemBlocks2 &memRef = refs.Refs[itemIndex];
878
+
744
879
  if (memRef.Defined)
745
880
  {
746
881
  CMyComPtr<IOutStream> outStream;
747
882
  archive.CreateStreamForCompressing(&outStream);
748
883
  memRef.WriteToStream(memManager.GetBlockSize(), outStream);
749
- SetItemInfoFromCompressingResult(memRef.CompressingResult,
750
- options->IsAesMode, options->AesKeyMode, item);
751
884
  SetFileHeader(archive, *options, ui, item);
752
- archive.WriteLocalHeader(item);
885
+ // the BUG was fixed in 9.26:
886
+ // SetItemInfoFromCompressingResult must be after SetFileHeader
887
+ // to write correct Size.
888
+ SetItemInfoFromCompressingResult(memRef.CompressingResult,
889
+ options->IsRealAesMode(), options->AesKeyMode, item);
890
+ archive.WriteLocalHeader_And_SeekToNextFile(item);
753
891
  // RINOK(updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK));
754
892
  memRef.FreeOpt(&memManager);
755
893
  }
@@ -768,28 +906,39 @@ static HRESULT Update2(
768
906
 
769
907
  DWORD result = ::WaitForMultipleObjects(compressingCompletedEvents.Size(),
770
908
  &compressingCompletedEvents.Front(), FALSE, INFINITE);
771
- int t = (int)(result - WAIT_OBJECT_0);
909
+ #ifdef _WIN32 // FIXME
910
+ if (result == WAIT_FAILED)
911
+ {
912
+ DWORD lastError = GetLastError();
913
+ return lastError != 0 ? lastError : E_FAIL;
914
+ }
915
+ #endif
916
+ unsigned t = (unsigned)(result - WAIT_OBJECT_0);
917
+ if (t >= compressingCompletedEvents.Size())
918
+ return E_FAIL;
919
+
772
920
  CThreadInfo &threadInfo = threads.Threads[threadIndices[t]];
773
921
  threadInfo.InStream.Release();
774
922
  threadInfo.IsFree = true;
775
923
  RINOK(threadInfo.Result);
776
924
  threadIndices.Delete(t);
777
925
  compressingCompletedEvents.Delete(t);
926
+
778
927
  if (t == 0)
779
928
  {
780
929
  RINOK(threadInfo.OutStreamSpec->WriteToRealStream());
781
930
  threadInfo.OutStreamSpec->ReleaseOutStream();
782
- SetItemInfoFromCompressingResult(threadInfo.CompressingResult,
783
- options->IsAesMode, options->AesKeyMode, item);
784
931
  SetFileHeader(archive, *options, ui, item);
785
- archive.WriteLocalHeader(item);
932
+ SetItemInfoFromCompressingResult(threadInfo.CompressingResult,
933
+ options->IsRealAesMode(), options->AesKeyMode, item);
934
+ archive.WriteLocalHeader_And_SeekToNextFile(item);
786
935
  }
787
936
  else
788
937
  {
789
- CMemBlocks2 &memRef = refs.Refs[threadInfo.UpdateIndex];
790
- threadInfo.OutStreamSpec->DetachData(memRef);
791
- memRef.CompressingResult = threadInfo.CompressingResult;
792
- memRef.Defined = true;
938
+ CMemBlocks2 &memRef2 = refs.Refs[threadInfo.UpdateIndex];
939
+ threadInfo.OutStreamSpec->DetachData(memRef2);
940
+ memRef2.CompressingResult = threadInfo.CompressingResult;
941
+ memRef2.Defined = true;
793
942
  continue;
794
943
  }
795
944
  }
@@ -797,18 +946,22 @@ static HRESULT Update2(
797
946
  }
798
947
  else
799
948
  {
800
- RINOK(UpdateItemOldData(archive, inStream, ui, item, progress, complexity));
949
+ RINOK(UpdateItemOldData(archive, inArchive, itemEx, ui, item, progress, opCallback, complexity));
801
950
  }
951
+
802
952
  items.Add(item);
803
- complexity += NFileHeader::kLocalBlockSize;
953
+ complexity += kLocalHeaderSize;
804
954
  mtProgressMixerSpec->Mixer2->SetProgressOffset(complexity);
805
955
  itemIndex++;
806
956
  }
957
+
958
+ RINOK(mtCompressProgressMixer.SetRatioInfo(0, NULL, NULL));
807
959
  archive.WriteCentralDir(items, comment);
808
960
  return S_OK;
809
961
  #endif
810
962
  }
811
963
 
964
+
812
965
  static const size_t kCacheBlockSize = (1 << 20);
813
966
  static const size_t kCacheSize = (kCacheBlockSize << 2);
814
967
  static const size_t kCacheMask = (kCacheSize - 1);
@@ -988,15 +1141,18 @@ STDMETHODIMP CCacheOutStream::Write(const void *data, UInt32 size, UInt32 *proce
988
1141
 
989
1142
  STDMETHODIMP CCacheOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
990
1143
  {
991
- switch(seekOrigin)
1144
+ switch (seekOrigin)
992
1145
  {
993
- case STREAM_SEEK_SET: _virtPos = offset; break;
994
- case STREAM_SEEK_CUR: _virtPos += offset; break;
995
- case STREAM_SEEK_END: _virtPos = _virtSize + offset; break;
1146
+ case STREAM_SEEK_SET: break;
1147
+ case STREAM_SEEK_CUR: offset += _virtPos; break;
1148
+ case STREAM_SEEK_END: offset += _virtSize; break;
996
1149
  default: return STG_E_INVALIDFUNCTION;
997
1150
  }
1151
+ if (offset < 0)
1152
+ return HRESULT_WIN32_ERROR_NEGATIVE_SEEK;
1153
+ _virtPos = offset;
998
1154
  if (newPosition)
999
- *newPosition = _virtPos;
1155
+ *newPosition = offset;
1000
1156
  return S_OK;
1001
1157
  }
1002
1158
 
@@ -1022,18 +1178,36 @@ STDMETHODIMP CCacheOutStream::SetSize(UInt64 newSize)
1022
1178
  HRESULT Update(
1023
1179
  DECL_EXTERNAL_CODECS_LOC_VARS
1024
1180
  const CObjectVector<CItemEx> &inputItems,
1025
- const CObjectVector<CUpdateItem> &updateItems,
1181
+ CObjectVector<CUpdateItem> &updateItems,
1026
1182
  ISequentialOutStream *seqOutStream,
1027
- CInArchive *inArchive,
1183
+ CInArchive *inArchive, bool removeSfx,
1028
1184
  CCompressionMethodMode *compressionMethodMode,
1029
1185
  IArchiveUpdateCallback *updateCallback)
1030
1186
  {
1187
+ if (inArchive)
1188
+ {
1189
+ if (!inArchive->CanUpdate())
1190
+ return E_NOTIMPL;
1191
+ }
1192
+
1193
+
1031
1194
  CMyComPtr<IOutStream> outStream;
1032
1195
  {
1033
1196
  CMyComPtr<IOutStream> outStreamReal;
1034
1197
  seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStreamReal);
1035
1198
  if (!outStreamReal)
1036
1199
  return E_NOTIMPL;
1200
+
1201
+ if (inArchive)
1202
+ {
1203
+ if (!inArchive->IsMultiVol && inArchive->ArcInfo.Base > 0 && !removeSfx)
1204
+ {
1205
+ IInStream *baseStream = inArchive->GetBaseStream();
1206
+ RINOK(baseStream->Seek(0, STREAM_SEEK_SET, NULL));
1207
+ RINOK(NCompress::CopyStream_ExactSize(baseStream, outStreamReal, inArchive->ArcInfo.Base, NULL));
1208
+ }
1209
+ }
1210
+
1037
1211
  CCacheOutStream *cacheStream = new CCacheOutStream();
1038
1212
  outStream = cacheStream;
1039
1213
  if (!cacheStream->Allocate())
@@ -1041,32 +1215,24 @@ HRESULT Update(
1041
1215
  RINOK(cacheStream->Init(outStreamReal));
1042
1216
  }
1043
1217
 
1044
- if (inArchive)
1045
- {
1046
- if (inArchive->ArcInfo.Base != 0 ||
1047
- inArchive->ArcInfo.StartPosition != 0 ||
1048
- !inArchive->IsOkHeaders)
1049
- return E_NOTIMPL;
1050
- }
1051
-
1052
1218
  COutArchive outArchive;
1053
- outArchive.Create(outStream);
1054
- /*
1055
- if (inArchive && inArchive->ArcInfo.StartPosition > 0)
1219
+ RINOK(outArchive.Create(outStream));
1220
+
1221
+ if (inArchive)
1056
1222
  {
1057
- CMyComPtr<ISequentialInStream> inStream;
1058
- inStream.Attach(inArchive->CreateLimitedStream(0, inArchive->ArcInfo.StartPosition));
1059
- RINOK(CopyBlockToArchive(inStream, outArchive, NULL));
1060
- outArchive.MoveBasePosition(inArchive->ArcInfo.StartPosition);
1223
+ if (!inArchive->IsMultiVol && (Int64)inArchive->ArcInfo.MarkerPos2 > inArchive->ArcInfo.Base)
1224
+ {
1225
+ IInStream *baseStream = inArchive->GetBaseStream();
1226
+ RINOK(baseStream->Seek(inArchive->ArcInfo.Base, STREAM_SEEK_SET, NULL));
1227
+ UInt64 embStubSize = inArchive->ArcInfo.MarkerPos2 - inArchive->ArcInfo.Base;
1228
+ RINOK(NCompress::CopyStream_ExactSize(baseStream, outStream, embStubSize, NULL));
1229
+ outArchive.MoveCurPos(embStubSize);
1230
+ }
1061
1231
  }
1062
- */
1063
- CMyComPtr<IInStream> inStream;
1064
- if (inArchive)
1065
- inStream.Attach(inArchive->CreateStream());
1066
1232
 
1067
1233
  return Update2(
1068
1234
  EXTERNAL_CODECS_LOC_VARS
1069
- outArchive, inArchive, inStream,
1235
+ outArchive, inArchive,
1070
1236
  inputItems, updateItems,
1071
1237
  compressionMethodMode,
1072
1238
  inArchive ? &inArchive->ArcInfo.Comment : NULL,