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,11 +4,12 @@
4
4
 
5
5
  #include "../../../C/CpuArch.h"
6
6
 
7
- #include "Common/ComTry.h"
8
- #include "Common/StringConvert.h"
7
+ #include "../../Common/ComTry.h"
8
+ #include "../../Common/IntToString.h"
9
+ #include "../../Common/StringConvert.h"
9
10
 
10
- #include "Windows/PropVariant.h"
11
- #include "Windows/Time.h"
11
+ #include "../../Windows/PropVariant.h"
12
+ #include "../../Windows/TimeUtils.h"
12
13
 
13
14
  #include "../Common/LimitedStreams.h"
14
15
  #include "../Common/ProgressUtils.h"
@@ -16,89 +17,267 @@
16
17
  #include "../Common/StreamObjects.h"
17
18
  #include "../Common/StreamUtils.h"
18
19
 
19
- #include "../Compress/ArjDecoder1.h"
20
- #include "../Compress/ArjDecoder2.h"
21
20
  #include "../Compress/CopyCoder.h"
21
+ #include "../Compress/LzhDecoder.h"
22
22
 
23
23
  #include "Common/ItemNameUtils.h"
24
24
  #include "Common/OutStreamWithCRC.h"
25
25
 
26
- using namespace NWindows;
27
-
28
- #define Get16(p) GetUi16(p)
29
- #define Get32(p) GetUi32(p)
30
-
31
- namespace NArchive {
26
+ namespace NCompress {
32
27
  namespace NArj {
28
+ namespace NDecoder {
29
+
30
+ static const unsigned kMatchMinLen = 3;
33
31
 
34
- const int kBlockSizeMin = 30;
35
- const int kBlockSizeMax = 2600;
32
+ static const UInt32 kWindowSize = 1 << 15; // must be >= (1 << 14)
36
33
 
37
- namespace NSignature
34
+ class CCoder:
35
+ public ICompressCoder,
36
+ public CMyUnknownImp
38
37
  {
39
- const Byte kSig0 = 0x60;
40
- const Byte kSig1 = 0xEA;
41
- }
38
+ CLzOutWindow _outWindow;
39
+ NBitm::CDecoder<CInBuffer> _inBitStream;
40
+
41
+ class CCoderReleaser
42
+ {
43
+ CCoder *_coder;
44
+ public:
45
+ CCoderReleaser(CCoder *coder): _coder(coder) {}
46
+ void Disable() { _coder = NULL; }
47
+ ~CCoderReleaser() { if (_coder) _coder->_outWindow.Flush(); }
48
+ };
49
+ friend class CCoderReleaser;
50
+
51
+ HRESULT CodeReal(UInt64 outSize, ICompressProgressInfo *progress);
52
+ public:
53
+ MY_UNKNOWN_IMP
54
+
55
+ bool FinishMode;
56
+ CCoder(): FinishMode(false) {}
42
57
 
43
- namespace NFileHeader
58
+ STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
59
+ const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
60
+ UInt64 GetInputProcessedSize() const { return _inBitStream.GetProcessedSize(); }
61
+ };
62
+
63
+ HRESULT CCoder::CodeReal(UInt64 rem, ICompressProgressInfo *progress)
44
64
  {
45
- namespace NCompressionMethod
65
+ const UInt32 kStep = 1 << 20;
66
+ UInt64 next = 0;
67
+ if (rem > kStep && progress)
68
+ next = rem - kStep;
69
+
70
+ while (rem != 0)
46
71
  {
47
- enum
72
+ if (rem <= next)
48
73
  {
49
- kStored = 0,
50
- kCompressed1a = 1,
51
- kCompressed1b = 2,
52
- kCompressed1c = 3,
53
- kCompressed2 = 4,
54
- kNoDataNoCRC = 8,
55
- kNoData = 9
56
- };
57
- }
74
+ if (_inBitStream.ExtraBitsWereRead())
75
+ return S_FALSE;
58
76
 
59
- namespace NFileType
60
- {
61
- enum
77
+ UInt64 packSize = _inBitStream.GetProcessedSize();
78
+ UInt64 pos = _outWindow.GetProcessedSize();
79
+ RINOK(progress->SetRatioInfo(&packSize, &pos));
80
+ next = 0;
81
+ if (rem > kStep)
82
+ next = rem - kStep;
83
+ }
84
+
85
+ UInt32 len;
86
+
87
+ {
88
+ const unsigned kNumBits = 7 + 7;
89
+ UInt32 val = _inBitStream.GetValue(kNumBits);
90
+
91
+ if ((val & (1 << (kNumBits - 1))) == 0)
92
+ {
93
+ _outWindow.PutByte((Byte)(val >> 5));
94
+ _inBitStream.MovePos(1 + 8);
95
+ rem--;
96
+ continue;
97
+ }
98
+
99
+ UInt32 mask = 1 << (kNumBits - 2);
100
+ unsigned w;
101
+
102
+ for (w = 1; w < 7; w++, mask >>= 1)
103
+ if ((val & mask) == 0)
104
+ break;
105
+
106
+ unsigned readBits = (w != 7 ? 1 : 0);
107
+ readBits += w + w;
108
+ len = (1 << w) - 1 + kMatchMinLen - 1 +
109
+ (((val >> (kNumBits - readBits)) & ((1 << w) - 1)));
110
+ _inBitStream.MovePos(readBits);
111
+ }
112
+
62
113
  {
63
- kBinary = 0,
64
- k7BitText = 1,
65
- kArchiveHeader = 2,
66
- kDirectory = 3,
67
- kVolumeLablel = 4,
68
- kChapterLabel = 5
69
- };
114
+ const unsigned kNumBits = 4 + 13;
115
+ UInt32 val = _inBitStream.GetValue(kNumBits);
116
+
117
+ unsigned readBits = 1;
118
+ unsigned w;
119
+
120
+ if ((val & ((UInt32)1 << 16)) == 0) w = 9;
121
+ else if ((val & ((UInt32)1 << 15)) == 0) w = 10;
122
+ else if ((val & ((UInt32)1 << 14)) == 0) w = 11;
123
+ else if ((val & ((UInt32)1 << 13)) == 0) w = 12;
124
+ else { w = 13; readBits = 0; }
125
+
126
+ readBits += w + w - 9;
127
+
128
+ UInt32 dist = ((UInt32)1 << w) - (1 << 9) +
129
+ (((val >> (kNumBits - readBits)) & ((1 << w) - 1)));
130
+ _inBitStream.MovePos(readBits);
131
+
132
+ if (len > rem)
133
+ len = (UInt32)rem;
134
+
135
+ if (!_outWindow.CopyBlock(dist, len))
136
+ return S_FALSE;
137
+ rem -= len;
138
+ }
70
139
  }
71
-
72
- namespace NFlags
140
+
141
+ if (FinishMode)
73
142
  {
74
- const Byte kGarbled = 1;
75
- const Byte kVolume = 4;
76
- const Byte kExtFile = 8;
77
- const Byte kPathSym = 0x10;
78
- const Byte kBackup = 0x20;
143
+ if (_inBitStream.ReadAlignBits() != 0)
144
+ return S_FALSE;
79
145
  }
80
146
 
81
- namespace NHostOS
147
+ if (_inBitStream.ExtraBitsWereRead())
148
+ return S_FALSE;
149
+
150
+ return S_OK;
151
+ }
152
+
153
+
154
+
155
+ STDMETHODIMP CCoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
156
+ const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress)
157
+ {
158
+ try
82
159
  {
83
- enum EEnum
160
+ if (!outSize)
161
+ return E_INVALIDARG;
162
+
163
+ if (!_outWindow.Create(kWindowSize))
164
+ return E_OUTOFMEMORY;
165
+ if (!_inBitStream.Create(1 << 17))
166
+ return E_OUTOFMEMORY;
167
+
168
+ _outWindow.SetStream(outStream);
169
+ _outWindow.Init(false);
170
+ _inBitStream.SetStream(inStream);
171
+ _inBitStream.Init();
172
+
173
+ CCoderReleaser coderReleaser(this);
174
+ HRESULT res;
84
175
  {
85
- kMSDOS = 0, // filesystem used by MS-DOS, OS/2, Win32
86
- // pkarj 2.50 (FAT / VFAT / FAT32 file systems)
87
- kPRIMOS,
88
- kUnix,
89
- kAMIGA,
90
- kMac,
91
- kOS_2,
92
- kAPPLE_GS,
93
- kAtari_ST,
94
- kNext,
95
- kVAX_VMS,
96
- kWIN95
97
- };
176
+ res = CodeReal(*outSize, progress);
177
+ if (res != S_OK)
178
+ return res;
179
+ }
180
+
181
+ coderReleaser.Disable();
182
+ return _outWindow.Flush();
98
183
  }
184
+ catch(const CInBufferException &e) { return e.ErrorCode; }
185
+ catch(const CLzOutWindowException &e) { return e.ErrorCode; }
186
+ catch(...) { return S_FALSE; }
99
187
  }
100
188
 
101
- struct CArchiveHeader
189
+ }}}
190
+
191
+
192
+
193
+
194
+ using namespace NWindows;
195
+
196
+ #define Get16(p) GetUi16(p)
197
+ #define Get32(p) GetUi32(p)
198
+
199
+ namespace NArchive {
200
+ namespace NArj {
201
+
202
+ static const unsigned kBlockSizeMin = 30;
203
+ static const unsigned kBlockSizeMax = 2600;
204
+
205
+ static const Byte kSig0 = 0x60;
206
+ static const Byte kSig1 = 0xEA;
207
+
208
+ namespace NCompressionMethod
209
+ {
210
+ enum
211
+ {
212
+ kStored = 0,
213
+ kCompressed1a = 1,
214
+ kCompressed1b = 2,
215
+ kCompressed1c = 3,
216
+ kCompressed2 = 4,
217
+ kNoDataNoCRC = 8,
218
+ kNoData = 9
219
+ };
220
+ }
221
+
222
+ namespace NFileType
223
+ {
224
+ enum
225
+ {
226
+ kBinary = 0,
227
+ k7BitText,
228
+ kArchiveHeader,
229
+ kDirectory,
230
+ kVolumeLablel,
231
+ kChapterLabel
232
+ };
233
+ }
234
+
235
+ namespace NFlags
236
+ {
237
+ const Byte kGarbled = 1 << 0;
238
+ const Byte kAnsiPage = 1 << 1; // or (OLD_SECURED_FLAG) obsolete
239
+ const Byte kVolume = 1 << 2;
240
+ const Byte kExtFile = 1 << 3;
241
+ const Byte kPathSym = 1 << 4;
242
+ const Byte kBackup = 1 << 5; // obsolete
243
+ const Byte kSecured = 1 << 6;
244
+ const Byte kDualName = 1 << 7;
245
+ }
246
+
247
+ namespace NHostOS
248
+ {
249
+ enum EEnum
250
+ {
251
+ kMSDOS = 0, // MS-DOS, OS/2, Win32, pkarj 2.50 (FAT / VFAT / FAT32)
252
+ kPRIMOS,
253
+ kUnix,
254
+ kAMIGA,
255
+ kMac,
256
+ kOS_2,
257
+ kAPPLE_GS,
258
+ kAtari_ST,
259
+ kNext,
260
+ kVAX_VMS,
261
+ kWIN95
262
+ };
263
+ }
264
+
265
+ static const char * const kHostOS[] =
266
+ {
267
+ "MSDOS"
268
+ , "PRIMOS"
269
+ , "UNIX"
270
+ , "AMIGA"
271
+ , "MAC"
272
+ , "OS/2"
273
+ , "APPLE GS"
274
+ , "ATARI ST"
275
+ , "NEXT"
276
+ , "VAX VMS"
277
+ , "WIN95"
278
+ };
279
+
280
+ struct CArcHeader
102
281
  {
103
282
  // Byte ArchiverVersion;
104
283
  // Byte ExtractVersion;
@@ -110,9 +289,9 @@ struct CArchiveHeader
110
289
  UInt32 CTime;
111
290
  UInt32 MTime;
112
291
  UInt32 ArchiveSize;
113
- // UInt32 SecurityEnvelopeFilePosition;
114
- // UInt16 FilespecPositionInFilename;
115
- // UInt16 LengthOfSecurityEnvelopeSata;
292
+ // UInt32 SecurPos;
293
+ // UInt16 FilespecPosInFilename;
294
+ UInt16 SecurSize;
116
295
  // Byte EncryptionVersion;
117
296
  // Byte LastChapter;
118
297
  AString Name;
@@ -121,47 +300,72 @@ struct CArchiveHeader
121
300
  HRESULT Parse(const Byte *p, unsigned size);
122
301
  };
123
302
 
303
+ API_FUNC_static_IsArc IsArc_Arj(const Byte *p, size_t size)
304
+ {
305
+ if (size < kBlockSizeMin + 4)
306
+ return k_IsArc_Res_NEED_MORE;
307
+ if (p[0] != kSig0 || p[1] != kSig1)
308
+ return k_IsArc_Res_NO;
309
+ UInt32 blockSize = Get16(p + 2);
310
+ if (blockSize < kBlockSizeMin ||
311
+ blockSize > kBlockSizeMax)
312
+ return k_IsArc_Res_NO;
313
+
314
+ p += 4;
315
+ size -= 4;
316
+
317
+ Byte headerSize = p[0];
318
+ if (headerSize < kBlockSizeMin ||
319
+ headerSize > blockSize ||
320
+ p[6] != NFileType::kArchiveHeader ||
321
+ p[28] > 8) // EncryptionVersion
322
+ return k_IsArc_Res_NO;
323
+
324
+ if (blockSize + 4 <= size)
325
+ if (Get32(p + blockSize) != CrcCalc(p, blockSize))
326
+ return k_IsArc_Res_NO;
327
+
328
+ return k_IsArc_Res_YES;
329
+ }
330
+ }
331
+
124
332
  static HRESULT ReadString(const Byte *p, unsigned &size, AString &res)
125
333
  {
126
- AString s;
127
- for (unsigned i = 0; i < size;)
334
+ unsigned num = size;
335
+ for (unsigned i = 0; i < num;)
128
336
  {
129
- char c = (char)p[i++];
130
- if (c == 0)
337
+ if (p[i++] == 0)
131
338
  {
132
339
  size = i;
133
- res = s;
340
+ res = (const char *)p;
134
341
  return S_OK;
135
342
  }
136
- s += c;
137
343
  }
138
344
  return S_FALSE;
139
345
  }
140
346
 
141
- HRESULT CArchiveHeader::Parse(const Byte *p, unsigned size)
347
+ HRESULT CArcHeader::Parse(const Byte *p, unsigned size)
142
348
  {
143
- if (size < kBlockSizeMin)
144
- return S_FALSE;
145
- Byte firstHeaderSize = p[0];
146
- if (firstHeaderSize > size)
349
+ Byte headerSize = p[0];
350
+ if (headerSize < kBlockSizeMin || headerSize > size)
147
351
  return S_FALSE;
148
352
  // ArchiverVersion = p[1];
149
353
  // ExtractVersion = p[2];
150
354
  HostOS = p[3];
151
355
  // Flags = p[4];
152
356
  // SecuryVersion = p[5];
153
- if (p[6] != NFileHeader::NFileType::kArchiveHeader)
357
+ if (p[6] != NFileType::kArchiveHeader)
154
358
  return S_FALSE;
155
359
  // Reserved = p[7];
156
360
  CTime = Get32(p + 8);
157
361
  MTime = Get32(p + 12);
158
- ArchiveSize = Get32(p + 16);
159
- // SecurityEnvelopeFilePosition = Get32(p + 20);
362
+ ArchiveSize = Get32(p + 16); // it can be zero. (currently used only for secured archives)
363
+ // SecurPos = Get32(p + 20);
160
364
  // UInt16 filespecPositionInFilename = Get16(p + 24);
161
- // LengthOfSecurityEnvelopeSata = Get16(p + 26);
365
+ SecurSize = Get16(p + 26);
162
366
  // EncryptionVersion = p[28];
163
367
  // LastChapter = p[29];
164
- unsigned pos = firstHeaderSize;
368
+ unsigned pos = headerSize;
165
369
  unsigned size1 = size - pos;
166
370
  RINOK(ReadString(p + pos, size1, Name));
167
371
  pos += size1;
@@ -189,32 +393,30 @@ struct CItem
189
393
  Byte Method;
190
394
  Byte FileType;
191
395
 
192
- // UInt16 FilespecPositionInFilename;
396
+ // UInt16 FilespecPosInFilename;
193
397
  UInt16 FileAccessMode;
194
398
  // Byte FirstChapter;
195
399
  // Byte LastChapter;
196
400
 
197
401
  UInt64 DataPosition;
198
402
 
199
- bool IsEncrypted() const { return (Flags & NFileHeader::NFlags::kGarbled) != 0; }
200
- bool IsDir() const { return (FileType == NFileHeader::NFileType::kDirectory); }
201
- bool IsSplitAfter() const { return (Flags & NFileHeader::NFlags::kVolume) != 0; }
202
- bool IsSplitBefore() const { return (Flags & NFileHeader::NFlags::kExtFile) != 0; }
203
- UInt32 GetWinAttributes() const
403
+ bool IsEncrypted() const { return (Flags & NFlags::kGarbled) != 0; }
404
+ bool IsDir() const { return (FileType == NFileType::kDirectory); }
405
+ bool IsSplitAfter() const { return (Flags & NFlags::kVolume) != 0; }
406
+ bool IsSplitBefore() const { return (Flags & NFlags::kExtFile) != 0; }
407
+ UInt32 GetWinAttrib() const
204
408
  {
205
- UInt32 winAtrributes;
206
- switch(HostOS)
409
+ UInt32 atrrib = 0;
410
+ switch (HostOS)
207
411
  {
208
- case NFileHeader::NHostOS::kMSDOS:
209
- case NFileHeader::NHostOS::kWIN95:
210
- winAtrributes = FileAccessMode;
412
+ case NHostOS::kMSDOS:
413
+ case NHostOS::kWIN95:
414
+ atrrib = FileAccessMode;
211
415
  break;
212
- default:
213
- winAtrributes = 0;
214
416
  }
215
417
  if (IsDir())
216
- winAtrributes |= FILE_ATTRIBUTE_DIRECTORY;
217
- return winAtrributes;
418
+ atrrib |= FILE_ATTRIBUTE_DIRECTORY;
419
+ return atrrib;
218
420
  }
219
421
 
220
422
  HRESULT Parse(const Byte *p, unsigned size);
@@ -222,11 +424,9 @@ struct CItem
222
424
 
223
425
  HRESULT CItem::Parse(const Byte *p, unsigned size)
224
426
  {
225
- if (size < kBlockSizeMin)
427
+ Byte headerSize = p[0];
428
+ if (headerSize < kBlockSizeMin || headerSize > size)
226
429
  return S_FALSE;
227
-
228
- Byte firstHeaderSize = p[0];
229
-
230
430
  Version = p[1];
231
431
  ExtractVersion = p[2];
232
432
  HostOS = p[3];
@@ -238,16 +438,16 @@ HRESULT CItem::Parse(const Byte *p, unsigned size)
238
438
  PackSize = Get32(p + 12);
239
439
  Size = Get32(p + 16);
240
440
  FileCRC = Get32(p + 20);
241
- // FilespecPositionInFilename = Get16(p + 24);
441
+ // FilespecPosInFilename = Get16(p + 24);
242
442
  FileAccessMode = Get16(p + 26);
243
443
  // FirstChapter = p[28];
244
444
  // FirstChapter = p[29];
245
445
 
246
446
  SplitPos = 0;
247
- if (IsSplitBefore() && firstHeaderSize >= 34)
447
+ if (IsSplitBefore() && headerSize >= 34)
248
448
  SplitPos = Get32(p + 30);
249
449
 
250
- unsigned pos = firstHeaderSize;
450
+ unsigned pos = headerSize;
251
451
  unsigned size1 = size - pos;
252
452
  RINOK(ReadString(p + pos, size1, Name));
253
453
  pos += size1;
@@ -258,180 +458,121 @@ HRESULT CItem::Parse(const Byte *p, unsigned size)
258
458
  return S_OK;
259
459
  }
260
460
 
261
- struct CInArchiveException
461
+ enum EErrorType
262
462
  {
263
- enum CCauseType
264
- {
265
- kUnexpectedEndOfArchive = 0,
266
- kCRCError,
267
- kIncorrectArchive
268
- }
269
- Cause;
270
- CInArchiveException(CCauseType cause): Cause(cause) {};
463
+ k_ErrorType_OK,
464
+ k_ErrorType_Corrupted,
465
+ k_ErrorType_UnexpectedEnd,
271
466
  };
272
467
 
273
- class CInArchive
468
+ class CArc
274
469
  {
275
- UInt32 _blockSize;
276
- Byte _block[kBlockSizeMax + 4];
277
-
278
- HRESULT ReadBlock(bool &filled);
279
- HRESULT ReadSignatureAndBlock(bool &filled);
280
- HRESULT SkipExtendedHeaders();
281
-
282
- HRESULT SafeReadBytes(void *data, UInt32 size);
283
-
284
470
  public:
285
- CArchiveHeader Header;
286
-
471
+ UInt64 Processed;
472
+ EErrorType Error;
473
+ bool IsArc;
287
474
  IInStream *Stream;
288
475
  IArchiveOpenCallback *Callback;
289
476
  UInt64 NumFiles;
290
- UInt64 NumBytes;
291
-
292
- HRESULT Open(const UInt64 *searchHeaderSizeLimit);
293
- HRESULT GetNextItem(bool &filled, CItem &item);
294
- };
477
+ CArcHeader Header;
295
478
 
296
- static inline bool TestMarkerCandidate(const Byte *p, unsigned maxSize)
297
- {
298
- if (p[0] != NSignature::kSig0 || p[1] != NSignature::kSig1)
299
- return false;
300
- UInt32 blockSize = Get16(p + 2);
301
- p += 4;
302
- if (p[6] != NFileHeader::NFileType::kArchiveHeader ||
303
- p[0] > blockSize ||
304
- maxSize < 2 + 2 + blockSize + 4 ||
305
- blockSize < kBlockSizeMin || blockSize > kBlockSizeMax ||
306
- p[28] > 8) // EncryptionVersion
307
- return false;
308
- // return (Get32(p + blockSize) == CrcCalc(p, blockSize));
309
- return true;
310
- }
311
-
312
- static HRESULT FindAndReadMarker(ISequentialInStream *stream, const UInt64 *searchHeaderSizeLimit, UInt64 &position)
313
- {
314
- position = 0;
315
-
316
- const int kMarkerSizeMin = 2 + 2 + kBlockSizeMin + 4;
317
- const int kMarkerSizeMax = 2 + 2 + kBlockSizeMax + 4;
318
-
319
- CByteBuffer byteBuffer;
320
- const UInt32 kBufSize = 1 << 16;
321
- byteBuffer.SetCapacity(kBufSize);
322
- Byte *buf = byteBuffer;
323
-
324
- size_t processedSize = kMarkerSizeMax;
325
- RINOK(ReadStream(stream, buf, &processedSize));
326
- if (processedSize < kMarkerSizeMin)
327
- return S_FALSE;
328
- if (TestMarkerCandidate(buf, (unsigned)processedSize))
329
- return S_OK;
330
-
331
- UInt32 numBytesPrev = (UInt32)processedSize - 1;
332
- memmove(buf, buf + 1, numBytesPrev);
333
- UInt64 curTestPos = 1;
334
- for (;;)
479
+ HRESULT Open();
480
+ HRESULT GetNextItem(CItem &item, bool &filled);
481
+ void Close()
335
482
  {
336
- if (searchHeaderSizeLimit != NULL)
337
- if (curTestPos > *searchHeaderSizeLimit)
338
- return S_FALSE;
339
- processedSize = kBufSize - numBytesPrev;
340
- RINOK(ReadStream(stream, buf + numBytesPrev, &processedSize));
341
- UInt32 numBytesInBuffer = numBytesPrev + (UInt32)processedSize;
342
- if (numBytesInBuffer < kMarkerSizeMin)
343
- return S_FALSE;
344
- UInt32 numTests = numBytesInBuffer - kMarkerSizeMin + 1;
345
- UInt32 pos;
346
- for (pos = 0; pos < numTests; pos++)
347
- {
348
- for (; buf[pos] != NSignature::kSig0 && pos < numTests; pos++);
349
- if (pos == numTests)
350
- break;
351
- if (TestMarkerCandidate(buf + pos, numBytesInBuffer - pos))
352
- {
353
- position = curTestPos + pos;
354
- return S_OK;
355
- }
356
- }
357
- curTestPos += pos;
358
- numBytesPrev = numBytesInBuffer - numTests;
359
- memmove(buf, buf + numTests, numBytesPrev);
483
+ IsArc = false;
484
+ Error = k_ErrorType_OK;
360
485
  }
361
- }
486
+ private:
487
+ UInt32 _blockSize;
488
+ Byte _block[kBlockSizeMax + 4];
489
+
490
+ HRESULT ReadBlock(bool &filled, bool readSignature);
491
+ HRESULT SkipExtendedHeaders();
492
+ HRESULT Read(void *data, size_t *size);
493
+ };
362
494
 
363
- HRESULT CInArchive::SafeReadBytes(void *data, UInt32 size)
495
+ HRESULT CArc::Read(void *data, size_t *size)
364
496
  {
365
- size_t processed = size;
366
- RINOK(ReadStream(Stream, data, &processed));
367
- if (processed != size)
368
- throw CInArchiveException(CInArchiveException::kUnexpectedEndOfArchive);
369
- return S_OK;
497
+ HRESULT res = ReadStream(Stream, data, size);
498
+ Processed += *size;
499
+ return res;
370
500
  }
371
501
 
372
- HRESULT CInArchive::ReadBlock(bool &filled)
502
+ #define READ_STREAM(_dest_, _size_) \
503
+ { size_t _processed_ = (_size_); RINOK(Read(_dest_, &_processed_)); \
504
+ if (_processed_ != (_size_)) { Error = k_ErrorType_UnexpectedEnd; return S_OK; } }
505
+
506
+ HRESULT CArc::ReadBlock(bool &filled, bool readSignature)
373
507
  {
508
+ Error = k_ErrorType_OK;
374
509
  filled = false;
375
- Byte buf[2];
376
- RINOK(SafeReadBytes(buf, 2));
377
- _blockSize = Get16(buf);
378
- if (_blockSize == 0)
510
+ Byte buf[4];
511
+ unsigned signSize = readSignature ? 2 : 0;
512
+ READ_STREAM(buf, signSize + 2)
513
+ if (readSignature)
514
+ if (buf[0] != kSig0 || buf[1] != kSig1)
515
+ {
516
+ Error = k_ErrorType_Corrupted;
517
+ return S_OK;
518
+ }
519
+ _blockSize = Get16(buf + signSize);
520
+ if (_blockSize == 0) // end of archive
521
+ return S_OK;
522
+ if (_blockSize < kBlockSizeMin ||
523
+ _blockSize > kBlockSizeMax)
524
+ {
525
+ Error = k_ErrorType_Corrupted;
379
526
  return S_OK;
380
- if (_blockSize > kBlockSizeMax)
381
- throw CInArchiveException(CInArchiveException::kIncorrectArchive);
382
- RINOK(SafeReadBytes(_block, _blockSize + 4));
383
- NumBytes += _blockSize + 6;
527
+ }
528
+ READ_STREAM(_block, _blockSize + 4);
384
529
  if (Get32(_block + _blockSize) != CrcCalc(_block, _blockSize))
385
- throw CInArchiveException(CInArchiveException::kCRCError);
530
+ {
531
+ Error = k_ErrorType_Corrupted;
532
+ return S_OK;
533
+ }
386
534
  filled = true;
387
535
  return S_OK;
388
536
  }
389
537
 
390
- HRESULT CInArchive::ReadSignatureAndBlock(bool &filled)
391
- {
392
- Byte id[2];
393
- RINOK(SafeReadBytes(id, 2));
394
- if (id[0] != NSignature::kSig0 || id[1] != NSignature::kSig1)
395
- throw CInArchiveException(CInArchiveException::kIncorrectArchive);
396
- return ReadBlock(filled);
397
- }
398
-
399
- HRESULT CInArchive::SkipExtendedHeaders()
538
+ HRESULT CArc::SkipExtendedHeaders()
400
539
  {
401
540
  for (UInt32 i = 0;; i++)
402
541
  {
403
542
  bool filled;
404
- RINOK(ReadBlock(filled));
543
+ RINOK(ReadBlock(filled, false));
405
544
  if (!filled)
406
545
  return S_OK;
407
546
  if (Callback && (i & 0xFF) == 0)
408
- RINOK(Callback->SetCompleted(&NumFiles, &NumBytes));
547
+ RINOK(Callback->SetCompleted(&NumFiles, &Processed));
409
548
  }
410
549
  }
411
550
 
412
- HRESULT CInArchive::Open(const UInt64 *searchHeaderSizeLimit)
551
+ HRESULT CArc::Open()
413
552
  {
414
- UInt64 position = 0;
415
- RINOK(FindAndReadMarker(Stream, searchHeaderSizeLimit, position));
416
- RINOK(Stream->Seek(position, STREAM_SEEK_SET, NULL));
417
553
  bool filled;
418
- RINOK(ReadSignatureAndBlock(filled));
554
+ RINOK(ReadBlock(filled, true));
419
555
  if (!filled)
420
556
  return S_FALSE;
421
557
  RINOK(Header.Parse(_block, _blockSize));
558
+ IsArc = true;
422
559
  return SkipExtendedHeaders();
423
560
  }
424
561
 
425
- HRESULT CInArchive::GetNextItem(bool &filled, CItem &item)
562
+ HRESULT CArc::GetNextItem(CItem &item, bool &filled)
426
563
  {
427
- RINOK(ReadSignatureAndBlock(filled));
564
+ RINOK(ReadBlock(filled, true));
428
565
  if (!filled)
429
566
  return S_OK;
430
567
  filled = false;
431
- RINOK(item.Parse(_block, _blockSize));
568
+ if (item.Parse(_block, _blockSize) != S_OK)
569
+ {
570
+ Error = k_ErrorType_Corrupted;
571
+ return S_OK;
572
+ }
432
573
  /*
433
574
  UInt32 extraData;
434
- if ((header.Flags & NFileHeader::NFlags::kExtFile) != 0)
575
+ if ((header.Flags & NFlags::kExtFile) != 0)
435
576
  extraData = GetUi32(_block + pos);
436
577
  */
437
578
 
@@ -444,67 +585,47 @@ class CHandler:
444
585
  public IInArchive,
445
586
  public CMyUnknownImp
446
587
  {
588
+ CObjectVector<CItem> _items;
589
+ CMyComPtr<IInStream> _stream;
590
+ UInt64 _phySize;
591
+ CArc _arc;
447
592
  public:
448
593
  MY_UNKNOWN_IMP1(IInArchive)
449
594
 
450
595
  INTERFACE_IInArchive(;)
451
596
 
452
- HRESULT Open2(IInStream *inStream, const UInt64 *maxCheckStartPosition,
453
- IArchiveOpenCallback *callback);
454
- private:
455
- CInArchive _archive;
456
- CObjectVector<CItem> _items;
457
- CMyComPtr<IInStream> _stream;
458
- };
459
-
460
- const wchar_t *kHostOS[] =
461
- {
462
- L"MSDOS",
463
- L"PRIMOS",
464
- L"UNIX",
465
- L"AMIGA",
466
- L"MAC",
467
- L"OS/2",
468
- L"APPLE GS",
469
- L"ATARI ST",
470
- L"NEXT",
471
- L"VAX VMS",
472
- L"WIN95"
597
+ HRESULT Open2(IInStream *inStream, IArchiveOpenCallback *callback);
473
598
  };
474
599
 
475
- const wchar_t *kUnknownOS = L"Unknown";
476
-
477
- const int kNumHostOSes = sizeof(kHostOS) / sizeof(kHostOS[0]);
478
-
479
- STATPROPSTG kArcProps[] =
600
+ static const Byte kArcProps[] =
480
601
  {
481
- { NULL, kpidName, VT_BSTR},
482
- { NULL, kpidCTime, VT_BSTR},
483
- { NULL, kpidMTime, VT_BSTR},
484
- { NULL, kpidHostOS, VT_BSTR},
485
- { NULL, kpidComment, VT_BSTR}
602
+ kpidName,
603
+ kpidCTime,
604
+ kpidMTime,
605
+ kpidHostOS,
606
+ kpidComment
486
607
  };
487
608
 
488
- STATPROPSTG kProps[] =
489
- {
490
- { NULL, kpidPath, VT_BSTR},
491
- { NULL, kpidIsDir, VT_BOOL},
492
- { NULL, kpidSize, VT_UI4},
493
- { NULL, kpidPosition, VT_UI8},
494
- { NULL, kpidPackSize, VT_UI4},
495
- { NULL, kpidMTime, VT_FILETIME},
496
- { NULL, kpidAttrib, VT_UI4},
497
- { NULL, kpidEncrypted, VT_BOOL},
498
- { NULL, kpidCRC, VT_UI4},
499
- { NULL, kpidMethod, VT_UI1},
500
- { NULL, kpidHostOS, VT_BSTR},
501
- { NULL, kpidComment, VT_BSTR}
609
+ static const Byte kProps[] =
610
+ {
611
+ kpidPath,
612
+ kpidIsDir,
613
+ kpidSize,
614
+ kpidPosition,
615
+ kpidPackSize,
616
+ kpidMTime,
617
+ kpidAttrib,
618
+ kpidEncrypted,
619
+ kpidCRC,
620
+ kpidMethod,
621
+ kpidHostOS,
622
+ kpidComment
502
623
  };
503
624
 
504
625
  IMP_IInArchive_Props
505
626
  IMP_IInArchive_ArcProps
506
627
 
507
- static void SetTime(UInt32 dosTime, NWindows::NCOM::CPropVariant &prop)
628
+ static void SetTime(UInt32 dosTime, NCOM::CPropVariant &prop)
508
629
  {
509
630
  if (dosTime == 0)
510
631
  return;
@@ -519,12 +640,21 @@ static void SetTime(UInt32 dosTime, NWindows::NCOM::CPropVariant &prop)
519
640
  prop = utc;
520
641
  }
521
642
 
522
- static void SetHostOS(Byte hostOS, NWindows::NCOM::CPropVariant &prop)
643
+ static void SetHostOS(Byte hostOS, NCOM::CPropVariant &prop)
523
644
  {
524
- prop = hostOS < kNumHostOSes ? kHostOS[hostOS] : kUnknownOS;
645
+ char temp[16];
646
+ const char *s = NULL;
647
+ if (hostOS < ARRAY_SIZE(kHostOS))
648
+ s = kHostOS[hostOS];
649
+ else
650
+ {
651
+ ConvertUInt32ToString(hostOS, temp);
652
+ s = temp;
653
+ }
654
+ prop = s;
525
655
  }
526
656
 
527
- static void SetUnicodeString(const AString &s, NWindows::NCOM::CPropVariant &prop)
657
+ static void SetUnicodeString(const AString &s, NCOM::CPropVariant &prop)
528
658
  {
529
659
  if (!s.IsEmpty())
530
660
  prop = MultiByteToUnicodeString(s, CP_OEMCP);
@@ -533,14 +663,27 @@ static void SetUnicodeString(const AString &s, NWindows::NCOM::CPropVariant &pro
533
663
  STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
534
664
  {
535
665
  COM_TRY_BEGIN
536
- NWindows::NCOM::CPropVariant prop;
537
- switch(propID)
666
+ NCOM::CPropVariant prop;
667
+ switch (propID)
538
668
  {
539
- case kpidName: SetUnicodeString(_archive.Header.Name, prop); break;
540
- case kpidCTime: SetTime(_archive.Header.CTime, prop); break;
541
- case kpidMTime: SetTime(_archive.Header.MTime, prop); break;
542
- case kpidHostOS: SetHostOS(_archive.Header.HostOS, prop); break;
543
- case kpidComment: SetUnicodeString(_archive.Header.Comment, prop); break;
669
+ case kpidPhySize: prop = _phySize; break;
670
+ case kpidName: SetUnicodeString(_arc.Header.Name, prop); break;
671
+ case kpidCTime: SetTime(_arc.Header.CTime, prop); break;
672
+ case kpidMTime: SetTime(_arc.Header.MTime, prop); break;
673
+ case kpidHostOS: SetHostOS(_arc.Header.HostOS, prop); break;
674
+ case kpidComment: SetUnicodeString(_arc.Header.Comment, prop); break;
675
+ case kpidErrorFlags:
676
+ {
677
+ UInt32 v = 0;
678
+ if (!_arc.IsArc) v |= kpv_ErrorFlags_IsNotArc;
679
+ switch (_arc.Error)
680
+ {
681
+ case k_ErrorType_UnexpectedEnd: v |= kpv_ErrorFlags_UnexpectedEnd; break;
682
+ case k_ErrorType_Corrupted: v |= kpv_ErrorFlags_HeadersError; break;
683
+ }
684
+ prop = v;
685
+ break;
686
+ }
544
687
  }
545
688
  prop.Detach(value);
546
689
  return S_OK;
@@ -556,16 +699,16 @@ STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
556
699
  STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
557
700
  {
558
701
  COM_TRY_BEGIN
559
- NWindows::NCOM::CPropVariant prop;
702
+ NCOM::CPropVariant prop;
560
703
  const CItem &item = _items[index];
561
- switch(propID)
704
+ switch (propID)
562
705
  {
563
706
  case kpidPath: prop = NItemName::GetOSName(MultiByteToUnicodeString(item.Name, CP_OEMCP)); break;
564
707
  case kpidIsDir: prop = item.IsDir(); break;
565
708
  case kpidSize: prop = item.Size; break;
566
709
  case kpidPackSize: prop = item.PackSize; break;
567
710
  case kpidPosition: if (item.IsSplitBefore() || item.IsSplitAfter()) prop = (UInt64)item.SplitPos; break;
568
- case kpidAttrib: prop = item.GetWinAttributes(); break;
711
+ case kpidAttrib: prop = item.GetWinAttrib(); break;
569
712
  case kpidEncrypted: prop = item.IsEncrypted(); break;
570
713
  case kpidCRC: prop = item.FileCRC; break;
571
714
  case kpidMethod: prop = item.Method; break;
@@ -578,75 +721,88 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
578
721
  COM_TRY_END
579
722
  }
580
723
 
581
- HRESULT CHandler::Open2(IInStream *inStream, const UInt64 *maxCheckStartPosition,
582
- IArchiveOpenCallback *callback)
724
+ HRESULT CHandler::Open2(IInStream *inStream, IArchiveOpenCallback *callback)
583
725
  {
584
726
  Close();
585
727
 
586
728
  UInt64 endPos = 0;
587
- if (callback != NULL)
588
- {
589
- RINOK(inStream->Seek(0, STREAM_SEEK_END, &endPos));
590
- RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL));
591
- }
729
+ RINOK(inStream->Seek(0, STREAM_SEEK_END, &endPos));
730
+ RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL));
592
731
 
593
- _archive.Stream = inStream;
594
- _archive.Callback = callback;
595
- _archive.NumFiles = _archive.NumBytes = 0;
732
+ _arc.Stream = inStream;
733
+ _arc.Callback = callback;
734
+ _arc.NumFiles = 0;
735
+ _arc.Processed = 0;
736
+
737
+ RINOK(_arc.Open());
738
+
739
+ _phySize = _arc.Processed;
740
+ if (_arc.Header.ArchiveSize != 0)
741
+ _phySize = (UInt64)_arc.Header.ArchiveSize + _arc.Header.SecurSize;
596
742
 
597
- RINOK(_archive.Open(maxCheckStartPosition));
598
- if (callback != NULL)
599
- RINOK(callback->SetTotal(NULL, &endPos));
600
743
  for (;;)
601
744
  {
602
745
  CItem item;
603
746
  bool filled;
604
747
 
748
+ _arc.Error = k_ErrorType_OK;
749
+ RINOK(_arc.GetNextItem(item, filled));
605
750
 
606
- RINOK(_archive.GetNextItem(filled, item));
607
-
608
- RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &item.DataPosition));
751
+ if (_arc.Error != k_ErrorType_OK)
752
+ break;
609
753
 
610
754
  if (!filled)
755
+ {
756
+ if (_arc.Error == k_ErrorType_OK)
757
+ if (_arc.Header.ArchiveSize == 0)
758
+ _phySize = _arc.Processed;
611
759
  break;
760
+ }
761
+ item.DataPosition = _arc.Processed;
612
762
  _items.Add(item);
613
763
 
614
- if (inStream->Seek(item.PackSize, STREAM_SEEK_CUR, NULL) != S_OK)
615
- throw CInArchiveException(CInArchiveException::kUnexpectedEndOfArchive);
764
+ UInt64 pos = item.DataPosition + item.PackSize;
765
+ if (_arc.Header.ArchiveSize == 0)
766
+ _phySize = pos;
767
+ if (pos > endPos)
768
+ {
769
+ _arc.Error = k_ErrorType_UnexpectedEnd;
770
+ break;
771
+ }
616
772
 
617
- _archive.NumFiles = _items.Size();
618
- _archive.NumBytes = item.DataPosition;
773
+ RINOK(inStream->Seek(pos, STREAM_SEEK_SET, NULL));
774
+ _arc.NumFiles = _items.Size();
775
+ _arc.Processed = pos;
619
776
 
620
- if (callback != NULL && _items.Size() % 100 == 0)
777
+ if (callback && (_items.Size() & 0xFF) == 0)
621
778
  {
622
- RINOK(callback->SetCompleted(&_archive.NumFiles, &_archive.NumBytes));
779
+ RINOK(callback->SetCompleted(&_arc.NumFiles, &_arc.Processed));
623
780
  }
624
781
  }
625
782
  return S_OK;
626
783
  }
627
784
 
628
785
  STDMETHODIMP CHandler::Open(IInStream *inStream,
629
- const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *callback)
786
+ const UInt64 * /* maxCheckStartPosition */, IArchiveOpenCallback *callback)
630
787
  {
631
788
  COM_TRY_BEGIN
632
789
  HRESULT res;
633
- try
634
790
  {
635
- res = Open2(inStream, maxCheckStartPosition, callback);
791
+ res = Open2(inStream, callback);
636
792
  if (res == S_OK)
637
793
  {
638
794
  _stream = inStream;
639
795
  return S_OK;
640
796
  }
641
797
  }
642
- catch(const CInArchiveException &) { res = S_FALSE; }
643
- Close();
644
798
  return res;
645
799
  COM_TRY_END
646
800
  }
647
801
 
648
802
  STDMETHODIMP CHandler::Close()
649
803
  {
804
+ _arc.Close();
805
+ _phySize = 0;
650
806
  _items.Clear();
651
807
  _stream.Release();
652
808
  return S_OK;
@@ -657,7 +813,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
657
813
  {
658
814
  COM_TRY_BEGIN
659
815
  UInt64 totalUnpacked = 0, totalPacked = 0;
660
- bool allFilesMode = (numItems == (UInt32)-1);
816
+ bool allFilesMode = (numItems == (UInt32)(Int32)-1);
661
817
  if (allFilesMode)
662
818
  numItems = _items.Size();
663
819
  if (numItems == 0)
@@ -667,15 +823,19 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
667
823
  {
668
824
  const CItem &item = _items[allFilesMode ? i : indices[i]];
669
825
  totalUnpacked += item.Size;
670
- totalPacked += item.PackSize;
826
+ // totalPacked += item.PackSize;
671
827
  }
672
828
  extractCallback->SetTotal(totalUnpacked);
673
829
 
674
830
  totalUnpacked = totalPacked = 0;
675
831
  UInt64 curUnpacked, curPacked;
676
832
 
677
- CMyComPtr<ICompressCoder> arj1Decoder;
678
- CMyComPtr<ICompressCoder> arj2Decoder;
833
+ NCompress::NLzh::NDecoder::CCoder *lzhDecoderSpec = NULL;
834
+ CMyComPtr<ICompressCoder> lzhDecoder;
835
+
836
+ NCompress::NArj::NDecoder::CCoder *arjDecoderSpec = NULL;
837
+ CMyComPtr<ICompressCoder> arjDecoder;
838
+
679
839
  NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder();
680
840
  CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
681
841
 
@@ -736,38 +896,53 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
736
896
  Int32 opRes = NExtract::NOperationResult::kOK;
737
897
 
738
898
  if (item.IsEncrypted())
739
- opRes = NExtract::NOperationResult::kUnSupportedMethod;
899
+ opRes = NExtract::NOperationResult::kUnsupportedMethod;
740
900
  else
741
901
  {
742
- switch(item.Method)
902
+ switch (item.Method)
743
903
  {
744
- case NFileHeader::NCompressionMethod::kStored:
904
+ case NCompressionMethod::kStored:
745
905
  {
746
906
  result = copyCoder->Code(inStream, outStream, NULL, NULL, progress);
747
907
  if (result == S_OK && copyCoderSpec->TotalSize != item.PackSize)
748
908
  result = S_FALSE;
749
909
  break;
750
910
  }
751
- case NFileHeader::NCompressionMethod::kCompressed1a:
752
- case NFileHeader::NCompressionMethod::kCompressed1b:
753
- case NFileHeader::NCompressionMethod::kCompressed1c:
911
+ case NCompressionMethod::kCompressed1a:
912
+ case NCompressionMethod::kCompressed1b:
913
+ case NCompressionMethod::kCompressed1c:
754
914
  {
755
- if (!arj1Decoder)
756
- arj1Decoder = new NCompress::NArj::NDecoder1::CCoder;
757
- result = arj1Decoder->Code(inStream, outStream, NULL, &curUnpacked, progress);
915
+ if (!lzhDecoder)
916
+ {
917
+ lzhDecoderSpec = new NCompress::NLzh::NDecoder::CCoder;
918
+ lzhDecoder = lzhDecoderSpec;
919
+ }
920
+ lzhDecoderSpec->FinishMode = true;
921
+ const UInt32 kHistorySize = 26624;
922
+ lzhDecoderSpec->SetDictSize(kHistorySize);
923
+ result = lzhDecoder->Code(inStream, outStream, NULL, &curUnpacked, progress);
924
+ if (result == S_OK && lzhDecoderSpec->GetInputProcessedSize() != item.PackSize)
925
+ result = S_FALSE;
758
926
  break;
759
927
  }
760
- case NFileHeader::NCompressionMethod::kCompressed2:
928
+ case NCompressionMethod::kCompressed2:
761
929
  {
762
- if (!arj2Decoder)
763
- arj2Decoder = new NCompress::NArj::NDecoder2::CCoder;
764
- result = arj2Decoder->Code(inStream, outStream, NULL, &curUnpacked, progress);
930
+ if (!arjDecoder)
931
+ {
932
+ arjDecoderSpec = new NCompress::NArj::NDecoder::CCoder;
933
+ arjDecoder = arjDecoderSpec;
934
+ }
935
+ arjDecoderSpec->FinishMode = true;
936
+ result = arjDecoder->Code(inStream, outStream, NULL, &curUnpacked, progress);
937
+ if (result == S_OK && arjDecoderSpec->GetInputProcessedSize() != item.PackSize)
938
+ result = S_FALSE;
765
939
  break;
766
940
  }
767
941
  default:
768
- opRes = NExtract::NOperationResult::kUnSupportedMethod;
942
+ opRes = NExtract::NOperationResult::kUnsupportedMethod;
769
943
  }
770
944
  }
945
+
771
946
  if (opRes == NExtract::NOperationResult::kOK)
772
947
  {
773
948
  if (result == S_FALSE)
@@ -780,19 +955,23 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
780
955
  NExtract::NOperationResult::kCRCError;
781
956
  }
782
957
  }
958
+
783
959
  outStream.Release();
784
960
  RINOK(extractCallback->SetOperationResult(opRes));
785
961
  }
786
962
  }
963
+
787
964
  return S_OK;
788
965
  COM_TRY_END
789
966
  }
790
967
 
791
- static IInArchive *CreateArc() { return new CHandler; }
792
-
793
- static CArcInfo g_ArcInfo =
794
- { L"Arj", L"arj", 0, 4, { 0x60, 0xEA }, 2, false, CreateArc, 0 };
968
+ static const Byte k_Signature[] = { kSig0, kSig1 };
795
969
 
796
- REGISTER_ARC(Arj)
970
+ REGISTER_ARC_I(
971
+ "Arj", "arj", 0, 4,
972
+ k_Signature,
973
+ 0,
974
+ 0,
975
+ IsArc_Arj)
797
976
 
798
977
  }}