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,13 +4,10 @@
4
4
 
5
5
  #include "../../../../C/CpuArch.h"
6
6
 
7
- #include "Common/ComTry.h"
8
- #include "Common/IntToString.h"
9
- #include "Common/StringToInt.h"
10
- #include "Common/UTFConvert.h"
11
-
12
- #include "Windows/PropVariant.h"
7
+ #include "../../../Common/ComTry.h"
8
+ #include "../../../Common/IntToString.h"
13
9
 
10
+ #include "../../Common/MethodProps.h"
14
11
  #include "../../Common/ProgressUtils.h"
15
12
  #include "../../Common/StreamUtils.h"
16
13
 
@@ -25,170 +22,117 @@ using namespace NWindows;
25
22
  namespace NArchive {
26
23
  namespace NWim {
27
24
 
28
- #define WIM_DETAILS
25
+ #define FILES_DIR_NAME "[DELETED]"
26
+
27
+ // #define WIM_DETAILS
29
28
 
30
- static STATPROPSTG kProps[] =
29
+ static const Byte kProps[] =
31
30
  {
32
- { NULL, kpidPath, VT_BSTR},
33
- { NULL, kpidIsDir, VT_BOOL},
34
- { NULL, kpidSize, VT_UI8},
35
- { NULL, kpidPackSize, VT_UI8},
36
- { NULL, kpidMTime, VT_FILETIME},
37
- { NULL, kpidCTime, VT_FILETIME},
38
- { NULL, kpidATime, VT_FILETIME},
39
- { NULL, kpidAttrib, VT_UI4},
40
- { NULL, kpidMethod, VT_BSTR},
41
- { NULL, kpidShortName, VT_BSTR}
31
+ kpidPath,
32
+ kpidIsDir,
33
+ kpidSize,
34
+ kpidPackSize,
35
+ kpidMTime,
36
+ kpidCTime,
37
+ kpidATime,
38
+ kpidAttrib,
39
+ kpidMethod,
40
+ kpidSolid,
41
+ kpidShortName,
42
+ kpidINode,
43
+ kpidLinks,
44
+ kpidIsAltStream,
45
+ kpidNumAltStreams,
42
46
 
43
47
  #ifdef WIM_DETAILS
44
- , { NULL, kpidVolume, VT_UI4}
45
- , { NULL, kpidOffset, VT_UI8}
46
- , { NULL, kpidLinks, VT_UI4}
48
+ , kpidVolume
49
+ , kpidOffset
47
50
  #endif
48
51
  };
49
52
 
50
- static STATPROPSTG kArcProps[] =
53
+ enum
54
+ {
55
+ kpidNumImages = kpidUserDefined,
56
+ kpidBootImage
57
+ };
58
+
59
+ static const CStatProp kArcProps[] =
51
60
  {
52
61
  { NULL, kpidSize, VT_UI8},
53
62
  { NULL, kpidPackSize, VT_UI8},
54
63
  { NULL, kpidMethod, VT_BSTR},
64
+ { NULL, kpidClusterSize, VT_UI4},
55
65
  { NULL, kpidCTime, VT_FILETIME},
56
66
  { NULL, kpidMTime, VT_FILETIME},
57
67
  { NULL, kpidComment, VT_BSTR},
58
68
  { NULL, kpidUnpackVer, VT_BSTR},
59
69
  { NULL, kpidIsVolume, VT_BOOL},
60
70
  { NULL, kpidVolume, VT_UI4},
61
- { NULL, kpidNumVolumes, VT_UI4}
71
+ { NULL, kpidNumVolumes, VT_UI4},
72
+ { "Images", kpidNumImages, VT_UI4},
73
+ { "Boot Image", kpidBootImage, VT_UI4}
62
74
  };
63
75
 
64
- static bool ParseNumber64(const AString &s, UInt64 &res)
65
- {
66
- const char *end;
67
- if (s.Left(2) == "0x")
68
- {
69
- if (s.Length() == 2)
70
- return false;
71
- res = ConvertHexStringToUInt64((const char *)s + 2, &end);
72
- }
73
- else
74
- {
75
- if (s.IsEmpty())
76
- return false;
77
- res = ConvertStringToUInt64(s, &end);
78
- }
79
- return *end == 0;
80
- }
81
76
 
82
- static bool ParseNumber32(const AString &s, UInt32 &res)
77
+ static const char * const k_Methods[] =
83
78
  {
84
- UInt64 res64;
85
- if (!ParseNumber64(s, res64) || res64 >= ((UInt64)1 << 32))
86
- return false;
87
- res = (UInt32)res64;
88
- return true;
89
- }
79
+ "Copy"
80
+ , "XPress"
81
+ , "LZX"
82
+ , "LZMS"
83
+ };
90
84
 
91
- bool ParseTime(const CXmlItem &item, FILETIME &ft, const char *tag)
92
- {
93
- int index = item.FindSubTag(tag);
94
- if (index >= 0)
95
- {
96
- const CXmlItem &timeItem = item.SubItems[index];
97
- UInt32 low = 0, high = 0;
98
- if (ParseNumber32(timeItem.GetSubStringForTag("LOWPART"), low) &&
99
- ParseNumber32(timeItem.GetSubStringForTag("HIGHPART"), high))
100
- {
101
- ft.dwLowDateTime = low;
102
- ft.dwHighDateTime = high;
103
- return true;
104
- }
105
- }
106
- return false;
107
- }
108
85
 
109
- void CImageInfo::Parse(const CXmlItem &item)
110
- {
111
- CTimeDefined = ParseTime(item, CTime, "CREATIONTIME");
112
- MTimeDefined = ParseTime(item, MTime, "LASTMODIFICATIONTIME");
113
- NameDefined = ConvertUTF8ToUnicode(item.GetSubStringForTag("NAME"), Name);
114
- // IndexDefined = ParseNumber32(item.GetPropertyValue("INDEX"), Index);
115
- }
116
86
 
117
- void CXml::ToUnicode(UString &s)
87
+ IMP_IInArchive_Props
88
+ IMP_IInArchive_ArcProps_WITH_NAME
89
+
90
+ static void AddErrorMessage(AString &s, const char *message)
118
91
  {
119
- size_t size = Data.GetCapacity();
120
- if (size < 2 || (size & 1) != 0 || size > (1 << 24))
121
- return;
122
- const Byte *p = Data;
123
- if (Get16(p) != 0xFEFF)
124
- return;
125
- wchar_t *chars = s.GetBuffer((int)size / 2);
126
- for (size_t i = 2; i < size; i += 2)
127
- *chars++ = (wchar_t)Get16(p + i);
128
- *chars = 0;
129
- s.ReleaseBuffer();
92
+ if (!s.IsEmpty())
93
+ s += ". ";
94
+ s += message;
130
95
  }
131
96
 
132
- void CXml::Parse()
97
+ static void ConvertByteToHex(unsigned value, char *s)
133
98
  {
134
- UString s;
135
- ToUnicode(s);
136
- AString utf;
137
- if (!ConvertUnicodeToUTF8(s, utf))
138
- return;
139
- ::CXml xml;
140
- if (!xml.Parse(utf))
141
- return;
142
- if (xml.Root.Name != "WIM")
143
- return;
144
-
145
- for (int i = 0; i < xml.Root.SubItems.Size(); i++)
99
+ for (int i = 0; i < 2; i++)
146
100
  {
147
- const CXmlItem &item = xml.Root.SubItems[i];
148
- if (item.IsTagged("IMAGE"))
149
- {
150
- CImageInfo imageInfo;
151
- imageInfo.Parse(item);
152
- Images.Add(imageInfo);
153
- }
101
+ unsigned t = value & 0xF;
102
+ value >>= 4;
103
+ s[1 - i] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
154
104
  }
155
105
  }
156
106
 
157
- static const char *kMethodLZX = "LZX";
158
- static const char *kMethodXpress = "XPress";
159
- static const char *kMethodCopy = "Copy";
160
-
161
- IMP_IInArchive_Props
162
- IMP_IInArchive_ArcProps
163
-
164
107
  STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
165
108
  {
166
109
  COM_TRY_BEGIN
167
- NWindows::NCOM::CPropVariant prop;
110
+ NCOM::CPropVariant prop;
168
111
 
169
112
  const CImageInfo *image = NULL;
170
113
  if (_xmls.Size() == 1)
171
114
  {
172
- const CXml &xml = _xmls[0];
115
+ const CWimXml &xml = _xmls[0];
173
116
  if (xml.Images.Size() == 1)
174
117
  image = &xml.Images[0];
175
118
  }
176
119
 
177
- switch(propID)
120
+ switch (propID)
178
121
  {
122
+ case kpidPhySize: prop = _phySize; break;
179
123
  case kpidSize: prop = _db.GetUnpackSize(); break;
180
124
  case kpidPackSize: prop = _db.GetPackSize(); break;
181
125
 
182
126
  case kpidCTime:
183
127
  if (_xmls.Size() == 1)
184
128
  {
185
- const CXml &xml = _xmls[0];
129
+ const CWimXml &xml = _xmls[0];
186
130
  int index = -1;
187
- for (int i = 0; i < xml.Images.Size(); i++)
131
+ FOR_VECTOR (i, xml.Images)
188
132
  {
189
- const CImageInfo &image = xml.Images[i];
190
- if (image.CTimeDefined)
191
- if (index < 0 || ::CompareFileTime(&image.CTime, &xml.Images[index].CTime) < 0)
133
+ const CImageInfo &image2 = xml.Images[i];
134
+ if (image2.CTimeDefined)
135
+ if (index < 0 || ::CompareFileTime(&image2.CTime, &xml.Images[index].CTime) < 0)
192
136
  index = i;
193
137
  }
194
138
  if (index >= 0)
@@ -199,13 +143,13 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
199
143
  case kpidMTime:
200
144
  if (_xmls.Size() == 1)
201
145
  {
202
- const CXml &xml = _xmls[0];
146
+ const CWimXml &xml = _xmls[0];
203
147
  int index = -1;
204
- for (int i = 0; i < xml.Images.Size(); i++)
148
+ FOR_VECTOR (i, xml.Images)
205
149
  {
206
- const CImageInfo &image = xml.Images[i];
207
- if (image.MTimeDefined)
208
- if (index < 0 || ::CompareFileTime(&image.MTime, &xml.Images[index].MTime) > 0)
150
+ const CImageInfo &image2 = xml.Images[i];
151
+ if (image2.MTimeDefined)
152
+ if (index < 0 || ::CompareFileTime(&image2.MTime, &xml.Images[index].MTime) > 0)
209
153
  index = i;
210
154
  }
211
155
  if (index >= 0)
@@ -214,7 +158,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
214
158
  break;
215
159
 
216
160
  case kpidComment:
217
- if (image != NULL)
161
+ if (image)
218
162
  {
219
163
  if (_xmlInComments)
220
164
  {
@@ -266,114 +210,432 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
266
210
  }
267
211
  break;
268
212
  case kpidNumVolumes: if (_volumes.Size() > 0) prop = (UInt32)(_volumes.Size() - 1); break;
213
+
214
+ case kpidClusterSize:
215
+ if (_xmls.Size() > 0)
216
+ {
217
+ UInt16 volIndex = _xmls[0].VolIndex;
218
+ if (volIndex < _volumes.Size())
219
+ {
220
+ const CHeader &h = _volumes[volIndex].Header;
221
+ prop = (UInt32)1 << h.ChunkSizeBits;
222
+ }
223
+ }
224
+ break;
225
+
226
+ case kpidName:
227
+ if (_firstVolumeIndex >= 0)
228
+ {
229
+ const CHeader &h = _volumes[_firstVolumeIndex].Header;
230
+ if (GetUi32(h.Guid) != 0)
231
+ {
232
+ char temp[16 * 2 + 4];
233
+ int i;
234
+ for (i = 0; i < 4; i++)
235
+ ConvertByteToHex(h.Guid[i], temp + i * 2);
236
+ temp[i * 2] = 0;
237
+ AString s = temp;
238
+ const char *ext = ".wim";
239
+ if (h.NumParts != 1)
240
+ {
241
+ s += '_';
242
+ if (h.PartNumber != 1)
243
+ {
244
+ char sz[16];
245
+ ConvertUInt32ToString(h.PartNumber, sz);
246
+ s += sz;
247
+ }
248
+ ext = ".swm";
249
+ }
250
+ s += ext;
251
+ prop = s;
252
+ }
253
+ }
254
+ break;
255
+
256
+ case kpidExtension:
257
+ if (_firstVolumeIndex >= 0)
258
+ {
259
+ const CHeader &h = _volumes[_firstVolumeIndex].Header;
260
+ if (h.NumParts > 1)
261
+ {
262
+ AString s;
263
+ if (h.PartNumber != 1)
264
+ {
265
+ char sz[16];
266
+ ConvertUInt32ToString(h.PartNumber, sz);
267
+ s = sz;
268
+ s += '.';
269
+ }
270
+ s += "swm";
271
+ prop = s;
272
+ }
273
+ }
274
+ break;
275
+
276
+ case kpidNumImages: prop = (UInt32)_db.Images.Size(); break;
277
+ case kpidBootImage: if (_bootIndex != 0) prop = (UInt32)_bootIndex; break;
278
+
269
279
  case kpidMethod:
270
280
  {
271
- bool lzx = false, xpress = false, copy = false;
272
- for (int i = 0; i < _xmls.Size(); i++)
281
+ UInt32 methodUnknown = 0;
282
+ UInt32 methodMask = 0;
283
+ unsigned chunkSizeBits = 0;
284
+
273
285
  {
274
- const CHeader &header = _volumes[_xmls[i].VolIndex].Header;
275
- if (header.IsCompressed())
276
- if (header.IsLzxMode())
277
- lzx = true;
286
+ FOR_VECTOR (i, _xmls)
287
+ {
288
+ const CHeader &header = _volumes[_xmls[i].VolIndex].Header;
289
+ unsigned method = header.GetMethod();
290
+ if (method < ARRAY_SIZE(k_Methods))
291
+ methodMask |= ((UInt32)1 << method);
278
292
  else
279
- xpress = true;
280
- else
281
- copy = true;
293
+ methodUnknown = method;
294
+ if (chunkSizeBits < header.ChunkSizeBits)
295
+ chunkSizeBits = header.ChunkSizeBits;
296
+ }
282
297
  }
298
+
283
299
  AString res;
284
- if (lzx)
285
- res = kMethodLZX;
286
- if (xpress)
300
+
301
+ unsigned numMethods = 0;
302
+ for (unsigned i = 0; i < ARRAY_SIZE(k_Methods); i++)
303
+ {
304
+ if (methodMask & ((UInt32)1 << i))
305
+ {
306
+ res.Add_Space_if_NotEmpty();
307
+ res += k_Methods[i];
308
+ numMethods++;
309
+ }
310
+ }
311
+
312
+ if (methodUnknown != 0)
287
313
  {
288
- if (!res.IsEmpty())
289
- res += ' ';
290
- res += kMethodXpress;
314
+ char temp[32];
315
+ ConvertUInt32ToString(methodUnknown, temp);
316
+ res.Add_Space_if_NotEmpty();
317
+ res += temp;
318
+ numMethods++;
291
319
  }
292
- if (copy)
320
+
321
+ if (numMethods == 1 && chunkSizeBits != 0)
293
322
  {
294
- if (!res.IsEmpty())
295
- res += ' ';
296
- res += kMethodCopy;
323
+ char temp[32];
324
+ temp[0] = ':';
325
+ ConvertUInt32ToString((UInt32)chunkSizeBits, temp + 1);
326
+ res += temp;
297
327
  }
328
+
298
329
  prop = res;
330
+ break;
331
+ }
332
+
333
+ case kpidIsTree: prop = true; break;
334
+ case kpidIsAltStream: prop = _db.ThereAreAltStreams; break;
335
+ case kpidIsAux: prop = true; break;
336
+ // WIM uses special prefix to represent deleted items
337
+ // case kpidIsDeleted: prop = _db.ThereAreDeletedStreams; break;
338
+ case kpidINode: prop = true; break;
339
+
340
+ case kpidErrorFlags:
341
+ {
342
+ UInt32 flags = 0;
343
+ if (!_isArc) flags |= kpv_ErrorFlags_IsNotArc;
344
+ if (_db.HeadersError) flags |= kpv_ErrorFlags_HeadersError;
345
+ if (_unsupported) flags |= kpv_ErrorFlags_UnsupportedMethod;
346
+ prop = flags;
347
+ break;
348
+ }
349
+
350
+ case kpidWarning:
351
+ {
352
+ AString s;
353
+ if (_xmlError)
354
+ AddErrorMessage(s, "XML error");
355
+ if (_db.RefCountError)
356
+ AddErrorMessage(s, "Some files have incorrect reference count");
357
+ if (!s.IsEmpty())
358
+ prop = s;
359
+ break;
360
+ }
361
+
362
+ case kpidReadOnly:
363
+ {
364
+ bool readOnly = !IsUpdateSupported();
365
+ if (readOnly)
366
+ prop = readOnly;
367
+ break;
299
368
  }
300
369
  }
370
+
301
371
  prop.Detach(value);
302
372
  return S_OK;
303
373
  COM_TRY_END
304
374
  }
305
375
 
376
+ void GetFileTime(const Byte *p, NCOM::CPropVariant &prop)
377
+ {
378
+ prop.vt = VT_FILETIME;
379
+ prop.filetime.dwLowDateTime = Get32(p);
380
+ prop.filetime.dwHighDateTime = Get32(p + 4);
381
+ }
382
+
383
+
384
+ static void MethodToProp(int method, int chunksSizeBits, NCOM::CPropVariant &prop)
385
+ {
386
+ if (method >= 0)
387
+ {
388
+ char temp[32];
389
+
390
+ if ((unsigned)method < ARRAY_SIZE(k_Methods))
391
+ strcpy(temp, k_Methods[(unsigned)method]);
392
+ else
393
+ ConvertUInt32ToString((unsigned)method, temp);
394
+
395
+ if (chunksSizeBits >= 0)
396
+ {
397
+ size_t pos = strlen(temp);
398
+ temp[pos++] = ':';
399
+ ConvertUInt32ToString((unsigned)chunksSizeBits, temp + pos);
400
+ }
401
+
402
+ prop = temp;
403
+ }
404
+ }
405
+
406
+
306
407
  STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
307
408
  {
308
409
  COM_TRY_BEGIN
309
- NWindows::NCOM::CPropVariant prop;
310
- if (index < (UInt32)_db.SortedItems.Size())
410
+ NCOM::CPropVariant prop;
411
+
412
+ if (index < _db.SortedItems.Size())
311
413
  {
312
- int realIndex = _db.SortedItems[index];
414
+ unsigned realIndex = _db.SortedItems[index];
313
415
  const CItem &item = _db.Items[realIndex];
314
416
  const CStreamInfo *si = NULL;
315
417
  const CVolume *vol = NULL;
316
418
  if (item.StreamIndex >= 0)
317
419
  {
318
- si = &_db.Streams[item.StreamIndex];
420
+ si = &_db.DataStreams[item.StreamIndex];
319
421
  vol = &_volumes[si->PartNumber];
320
422
  }
321
423
 
322
- switch(propID)
424
+ const CItem *mainItem = &item;
425
+ if (item.IsAltStream)
426
+ mainItem = &_db.Items[item.Parent];
427
+ const Byte *metadata = NULL;
428
+ if (mainItem->ImageIndex >= 0)
429
+ metadata = _db.Images[mainItem->ImageIndex].Meta + mainItem->Offset;
430
+
431
+ switch (propID)
323
432
  {
324
433
  case kpidPath:
325
- if (item.HasMetadata)
326
- prop = _db.GetItemPath(realIndex);
434
+ if (item.ImageIndex >= 0)
435
+ _db.GetItemPath(realIndex, _showImageNumber, prop);
327
436
  else
328
437
  {
329
438
  char sz[16];
330
439
  ConvertUInt32ToString(item.StreamIndex, sz);
331
440
  AString s = sz;
332
- while (s.Length() < _nameLenForStreams)
441
+ /*
442
+ while (s.Len() < _nameLenForStreams)
333
443
  s = '0' + s;
444
+ */
334
445
  /*
335
446
  if (si->Resource.IsFree())
336
- prefix = "[Free]";
447
+ s = (AString)("[Free]" STRING_PATH_SEPARATOR) + sz;
448
+ else
337
449
  */
338
- s = "[Files]" STRING_PATH_SEPARATOR + s;
450
+ s = (AString)(FILES_DIR_NAME STRING_PATH_SEPARATOR) + sz;
339
451
  prop = s;
340
452
  }
341
453
  break;
342
- case kpidShortName: if (item.HasMetadata) prop = item.ShortName; break;
343
-
344
- case kpidIsDir: prop = item.IsDir(); break;
345
- case kpidAttrib: if (item.HasMetadata) prop = item.Attrib; break;
346
- case kpidCTime: if (item.HasMetadata) prop = item.CTime; break;
347
- case kpidATime: if (item.HasMetadata) prop = item.ATime; break;
348
- case kpidMTime: if (item.HasMetadata) prop = item.MTime; break;
349
- case kpidPackSize: prop = si ? si->Resource.PackSize : (UInt64)0; break;
350
- case kpidSize: prop = si ? si->Resource.UnpackSize : (UInt64)0; break;
351
- case kpidMethod: if (si) prop = si->Resource.IsCompressed() ?
352
- (vol->Header.IsLzxMode() ? kMethodLZX : kMethodXpress) : kMethodCopy; break;
454
+
455
+ case kpidName:
456
+ if (item.ImageIndex >= 0)
457
+ _db.GetItemName(realIndex, prop);
458
+ else
459
+ {
460
+ char sz[16];
461
+ ConvertUInt32ToString(item.StreamIndex, sz);
462
+ /*
463
+ AString s = sz;
464
+ while (s.Len() < _nameLenForStreams)
465
+ s = '0' + s;
466
+ */
467
+ prop = sz;
468
+ }
469
+ break;
470
+
471
+ case kpidShortName:
472
+ if (item.ImageIndex >= 0 && !item.IsAltStream)
473
+ _db.GetShortName(realIndex, prop);
474
+ break;
475
+
476
+ case kpidPackSize:
477
+ {
478
+ if (si)
479
+ {
480
+ if (!si->Resource.IsSolidSmall())
481
+ prop = si->Resource.PackSize;
482
+ else
483
+ {
484
+ if (si->Resource.SolidIndex >= 0)
485
+ {
486
+ const CSolid &ss = _db.Solids[(unsigned)si->Resource.SolidIndex];
487
+ if (ss.FirstSmallStream == item.StreamIndex)
488
+ prop = _db.DataStreams[ss.StreamIndex].Resource.PackSize;
489
+ }
490
+ }
491
+ }
492
+ else if (!item.IsDir)
493
+ prop = (UInt64)0;
494
+
495
+ break;
496
+ }
497
+
498
+ case kpidSize:
499
+ {
500
+ if (si)
501
+ {
502
+ if (si->Resource.IsSolid())
503
+ {
504
+ if (si->Resource.IsSolidBig())
505
+ {
506
+ if (si->Resource.SolidIndex >= 0)
507
+ {
508
+ const CSolid &ss = _db.Solids[(unsigned)si->Resource.SolidIndex];
509
+ prop = ss.UnpackSize;
510
+ }
511
+ }
512
+ else
513
+ prop = si->Resource.PackSize;
514
+ }
515
+ else
516
+ prop = si->Resource.UnpackSize;
517
+ }
518
+ else if (!item.IsDir)
519
+ prop = (UInt64)0;
520
+
521
+ break;
522
+ }
523
+
524
+ case kpidIsDir: prop = item.IsDir; break;
525
+ case kpidIsAltStream: prop = item.IsAltStream; break;
526
+ case kpidNumAltStreams:
527
+ {
528
+ if (!item.IsAltStream && mainItem->HasMetadata())
529
+ {
530
+ UInt32 dirRecordSize = _db.IsOldVersion ? kDirRecordSizeOld : kDirRecordSize;
531
+ UInt32 numAltStreams = Get16(metadata + dirRecordSize - 6);
532
+ if (numAltStreams != 0)
533
+ {
534
+ if (!item.IsDir)
535
+ numAltStreams--;
536
+ prop = numAltStreams;
537
+ }
538
+ }
539
+ break;
540
+ }
541
+
542
+ case kpidAttrib:
543
+ if (!item.IsAltStream && mainItem->ImageIndex >= 0)
544
+ {
545
+ /*
546
+ if (fileNameLen == 0 && isDir && !item.HasStream())
547
+ item.Attrib = 0x10; // some swm archives have system/hidden attributes for root
548
+ */
549
+ prop = (UInt32)Get32(metadata + 8);
550
+ }
551
+ break;
552
+ case kpidCTime: if (mainItem->HasMetadata()) GetFileTime(metadata + (_db.IsOldVersion ? 0x18: 0x28), prop); break;
553
+ case kpidATime: if (mainItem->HasMetadata()) GetFileTime(metadata + (_db.IsOldVersion ? 0x20: 0x30), prop); break;
554
+ case kpidMTime: if (mainItem->HasMetadata()) GetFileTime(metadata + (_db.IsOldVersion ? 0x28: 0x38), prop); break;
555
+
556
+ case kpidINode:
557
+ if (mainItem->HasMetadata() && !_isOldVersion)
558
+ {
559
+ UInt32 attrib = (UInt32)Get32(metadata + 8);
560
+ if ((attrib & FILE_ATTRIBUTE_REPARSE_POINT) == 0)
561
+ {
562
+ // we don't know about that field in OLD WIM format
563
+ unsigned offset = 0x58; // (_db.IsOldVersion ? 0x30: 0x58);
564
+ UInt64 val = Get64(metadata + offset);
565
+ if (val != 0)
566
+ prop = val;
567
+ }
568
+ }
569
+ break;
570
+
571
+ case kpidStreamId:
572
+ if (item.StreamIndex >= 0)
573
+ prop = (UInt32)item.StreamIndex;
574
+ break;
575
+
576
+ case kpidMethod:
577
+ if (si)
578
+ {
579
+ const CResource &r = si->Resource;
580
+ if (r.IsSolid())
581
+ {
582
+ if (r.SolidIndex >= 0)
583
+ {
584
+ CSolid &ss = _db.Solids[r.SolidIndex];
585
+ MethodToProp(ss.Method, ss.ChunkSizeBits, prop);
586
+ }
587
+ }
588
+ else
589
+ {
590
+ int method = 0;
591
+ int chunkSizeBits = -1;
592
+ if (r.IsCompressed())
593
+ {
594
+ method = vol->Header.GetMethod();
595
+ chunkSizeBits = vol->Header.ChunkSizeBits;
596
+ }
597
+ MethodToProp(method, chunkSizeBits, prop);
598
+ }
599
+ }
600
+ break;
601
+
602
+ case kpidSolid: if (si) prop = si->Resource.IsSolid(); break;
603
+ case kpidLinks: if (si) prop = (UInt32)si->RefCount; break;
353
604
  #ifdef WIM_DETAILS
354
605
  case kpidVolume: if (si) prop = (UInt32)si->PartNumber; break;
355
606
  case kpidOffset: if (si) prop = (UInt64)si->Resource.Offset; break;
356
- case kpidLinks: prop = si ? (UInt32)si->RefCount : (UInt32)0; break;
357
607
  #endif
358
608
  }
359
609
  }
360
610
  else
361
611
  {
362
612
  index -= _db.SortedItems.Size();
613
+ if (index < _numXmlItems)
363
614
  {
364
- switch(propID)
615
+ switch (propID)
365
616
  {
366
617
  case kpidPath:
367
- {
368
- char sz[16];
369
- ConvertUInt32ToString(_xmls[index].VolIndex, sz);
370
- prop = (AString)"[" + (AString)sz + "].xml";
371
- break;
372
- }
618
+ case kpidName: prop = _xmls[index].FileName; break;
373
619
  case kpidIsDir: prop = false; break;
374
620
  case kpidPackSize:
375
- case kpidSize: prop = (UInt64)_xmls[index].Data.GetCapacity(); break;
376
- case kpidMethod: prop = kMethodCopy; break;
621
+ case kpidSize: prop = (UInt64)_xmls[index].Data.Size(); break;
622
+ case kpidMethod: /* prop = k_Method_Copy; */ break;
623
+ }
624
+ }
625
+ else
626
+ {
627
+ index -= _numXmlItems;
628
+ switch (propID)
629
+ {
630
+ case kpidPath:
631
+ case kpidName:
632
+ if (index < (UInt32)_db.VirtualRoots.Size())
633
+ prop = _db.Images[_db.VirtualRoots[index]].RootName;
634
+ else
635
+ prop = FILES_DIR_NAME;
636
+ break;
637
+ case kpidIsDir: prop = true; break;
638
+ case kpidIsAux: prop = true; break;
377
639
  }
378
640
  }
379
641
  }
@@ -382,25 +644,234 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
382
644
  COM_TRY_END
383
645
  }
384
646
 
647
+ STDMETHODIMP CHandler::GetRootProp(PROPID propID, PROPVARIANT *value)
648
+ {
649
+ // COM_TRY_BEGIN
650
+ NCOM::CPropVariant prop;
651
+ if (_db.Images.Size() != 0 && _db.NumExcludededItems != 0)
652
+ {
653
+ const CImage &image = _db.Images[_db.IndexOfUserImage];
654
+ const CItem &item = _db.Items[image.StartItem];
655
+ if (!item.IsDir || item.ImageIndex != _db.IndexOfUserImage)
656
+ return E_FAIL;
657
+ const Byte *metadata = image.Meta + item.Offset;
658
+
659
+ switch (propID)
660
+ {
661
+ case kpidIsDir: prop = true; break;
662
+ case kpidAttrib: prop = (UInt32)Get32(metadata + 8); break;
663
+ case kpidCTime: GetFileTime(metadata + (_db.IsOldVersion ? 0x18: 0x28), prop); break;
664
+ case kpidATime: GetFileTime(metadata + (_db.IsOldVersion ? 0x20: 0x30), prop); break;
665
+ case kpidMTime: GetFileTime(metadata + (_db.IsOldVersion ? 0x28: 0x38), prop); break;
666
+ }
667
+ }
668
+ prop.Detach(value);
669
+ return S_OK;
670
+ // COM_TRY_END
671
+ }
672
+
673
+ HRESULT CHandler::GetSecurity(UInt32 realIndex, const void **data, UInt32 *dataSize, UInt32 *propType)
674
+ {
675
+ const CItem &item = _db.Items[realIndex];
676
+ if (item.IsAltStream || item.ImageIndex < 0)
677
+ return S_OK;
678
+ const CImage &image = _db.Images[item.ImageIndex];
679
+ const Byte *metadata = image.Meta + item.Offset;
680
+ UInt32 securityId = Get32(metadata + 0xC);
681
+ if (securityId == (UInt32)(Int32)-1)
682
+ return S_OK;
683
+ if (securityId >= (UInt32)image.SecurOffsets.Size())
684
+ return E_FAIL;
685
+ UInt32 offs = image.SecurOffsets[securityId];
686
+ UInt32 len = image.SecurOffsets[securityId + 1] - offs;
687
+ const CByteBuffer &buf = image.Meta;
688
+ if (offs <= buf.Size() && buf.Size() - offs >= len)
689
+ {
690
+ *data = buf + offs;
691
+ *dataSize = len;
692
+ *propType = NPropDataType::kRaw;
693
+ }
694
+ return S_OK;
695
+ }
696
+
697
+ STDMETHODIMP CHandler::GetRootRawProp(PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)
698
+ {
699
+ *data = 0;
700
+ *dataSize = 0;
701
+ *propType = 0;
702
+ if (propID == kpidNtSecure && _db.Images.Size() != 0 && _db.NumExcludededItems != 0)
703
+ {
704
+ const CImage &image = _db.Images[_db.IndexOfUserImage];
705
+ const CItem &item = _db.Items[image.StartItem];
706
+ if (!item.IsDir || item.ImageIndex != _db.IndexOfUserImage)
707
+ return E_FAIL;
708
+ return GetSecurity(image.StartItem, data, dataSize, propType);
709
+ }
710
+ return S_OK;
711
+ }
712
+
713
+ static const Byte kRawProps[] =
714
+ {
715
+ kpidSha1,
716
+ kpidNtReparse,
717
+ kpidNtSecure
718
+ };
719
+
720
+
721
+ STDMETHODIMP CHandler::GetNumRawProps(UInt32 *numProps)
722
+ {
723
+ *numProps = ARRAY_SIZE(kRawProps);
724
+ return S_OK;
725
+ }
726
+
727
+ STDMETHODIMP CHandler::GetRawPropInfo(UInt32 index, BSTR *name, PROPID *propID)
728
+ {
729
+ *propID = kRawProps[index];
730
+ *name = 0;
731
+ return S_OK;
732
+ }
733
+
734
+ STDMETHODIMP CHandler::GetParent(UInt32 index, UInt32 *parent, UInt32 *parentType)
735
+ {
736
+ *parentType = NParentType::kDir;
737
+ *parent = (UInt32)(Int32)-1;
738
+ if (index >= _db.SortedItems.Size())
739
+ return S_OK;
740
+
741
+ const CItem &item = _db.Items[_db.SortedItems[index]];
742
+
743
+ if (item.ImageIndex >= 0)
744
+ {
745
+ *parentType = item.IsAltStream ? NParentType::kAltStream : NParentType::kDir;
746
+ if (item.Parent >= 0)
747
+ {
748
+ if (_db.ExludedItem != item.Parent)
749
+ *parent = _db.Items[item.Parent].IndexInSorted;
750
+ }
751
+ else
752
+ {
753
+ CImage &image = _db.Images[item.ImageIndex];
754
+ if (image.VirtualRootIndex >= 0)
755
+ *parent = _db.SortedItems.Size() + _numXmlItems + image.VirtualRootIndex;
756
+ }
757
+ }
758
+ else
759
+ *parent = _db.SortedItems.Size() + _numXmlItems + _db.VirtualRoots.Size();
760
+ return S_OK;
761
+ }
762
+
763
+ STDMETHODIMP CHandler::GetRawProp(UInt32 index, PROPID propID, const void **data, UInt32 *dataSize, UInt32 *propType)
764
+ {
765
+ *data = NULL;
766
+ *dataSize = 0;
767
+ *propType = 0;
768
+
769
+ if (propID == kpidName)
770
+ {
771
+ if (index < _db.SortedItems.Size())
772
+ {
773
+ const CItem &item = _db.Items[_db.SortedItems[index]];
774
+ if (item.ImageIndex < 0)
775
+ return S_OK;
776
+ const CImage &image = _db.Images[item.ImageIndex];
777
+ *propType = NPropDataType::kUtf16z;
778
+ if (image.NumEmptyRootItems != 0 && item.Parent < 0)
779
+ {
780
+ const CByteBuffer &buf = _db.Images[item.ImageIndex].RootNameBuf;
781
+ *data = (void *)(const Byte *)buf;
782
+ *dataSize = (UInt32)buf.Size();
783
+ return S_OK;
784
+ }
785
+ const Byte *meta = image.Meta + item.Offset +
786
+ (item.IsAltStream ?
787
+ (_isOldVersion ? 0x10 : 0x24) :
788
+ (_isOldVersion ? kDirRecordSizeOld - 2 : kDirRecordSize - 2));
789
+ *data = (const void *)(meta + 2);
790
+ *dataSize = (UInt32)Get16(meta) + 2;
791
+ return S_OK;
792
+ }
793
+ {
794
+ index -= _db.SortedItems.Size();
795
+ if (index < _numXmlItems)
796
+ return S_OK;
797
+ index -= _numXmlItems;
798
+ if (index >= (UInt32)_db.VirtualRoots.Size())
799
+ return S_OK;
800
+ const CByteBuffer &buf = _db.Images[_db.VirtualRoots[index]].RootNameBuf;
801
+ *data = (void *)(const Byte *)buf;
802
+ *dataSize = (UInt32)buf.Size();
803
+ *propType = NPropDataType::kUtf16z;
804
+ return S_OK;
805
+ }
806
+ }
807
+
808
+ if (index >= _db.SortedItems.Size())
809
+ return S_OK;
810
+
811
+ unsigned index2 = _db.SortedItems[index];
812
+
813
+ if (propID == kpidNtSecure)
814
+ {
815
+ return GetSecurity(index2, data, dataSize, propType);
816
+ }
817
+
818
+ const CItem &item = _db.Items[index2];
819
+ if (propID == kpidSha1)
820
+ {
821
+ if (item.StreamIndex >= 0)
822
+ *data = _db.DataStreams[item.StreamIndex].Hash;
823
+ else
824
+ {
825
+ if (_isOldVersion)
826
+ return S_OK;
827
+ const Byte *sha1 = _db.Images[item.ImageIndex].Meta + item.Offset + (item.IsAltStream ? 0x10 : 0x40);
828
+ if (IsEmptySha(sha1))
829
+ return S_OK;
830
+ *data = sha1;
831
+ }
832
+ *dataSize = kHashSize;
833
+ *propType = NPropDataType::kRaw;
834
+ return S_OK;
835
+ }
836
+
837
+ if (propID == kpidNtReparse && !_isOldVersion)
838
+ {
839
+ // we don't know about Reparse field in OLD WIM format
840
+
841
+ if (item.StreamIndex < 0)
842
+ return S_OK;
843
+ if (index2 >= _db.ItemToReparse.Size())
844
+ return S_OK;
845
+ int reparseIndex = _db.ItemToReparse[index2];
846
+ if (reparseIndex < 0)
847
+ return S_OK;
848
+ const CByteBuffer &buf = _db.ReparseItems[reparseIndex];
849
+ if (buf.Size() == 0)
850
+ return S_OK;
851
+ *data = buf;
852
+ *dataSize = (UInt32)buf.Size();
853
+ *propType = NPropDataType::kRaw;
854
+ return S_OK;
855
+ }
856
+
857
+ return S_OK;
858
+ }
859
+
385
860
  class CVolumeName
386
861
  {
387
- // UInt32 _volIndex;
388
862
  UString _before;
389
863
  UString _after;
390
864
  public:
391
- CVolumeName() {};
392
-
393
865
  void InitName(const UString &name)
394
866
  {
395
- // _volIndex = 1;
396
- int dotPos = name.ReverseFind('.');
867
+ int dotPos = name.ReverseFind_Dot();
397
868
  if (dotPos < 0)
398
- dotPos = name.Length();
869
+ dotPos = name.Len();
399
870
  _before = name.Left(dotPos);
400
- _after = name.Mid(dotPos);
871
+ _after = name.Ptr(dotPos);
401
872
  }
402
873
 
403
- UString GetNextName(UInt32 index)
874
+ UString GetNextName(UInt32 index) const
404
875
  {
405
876
  wchar_t s[16];
406
877
  ConvertUInt32ToString(index, s);
@@ -408,25 +879,27 @@ public:
408
879
  }
409
880
  };
410
881
 
411
- STDMETHODIMP CHandler::Open(IInStream *inStream,
412
- const UInt64 * /* maxCheckStartPosition */,
413
- IArchiveOpenCallback *openArchiveCallback)
882
+ STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 *, IArchiveOpenCallback *callback)
414
883
  {
415
884
  COM_TRY_BEGIN
885
+
416
886
  Close();
417
887
  {
418
888
  CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
419
889
 
420
890
  CVolumeName seqName;
421
- if (openArchiveCallback != NULL)
422
- openArchiveCallback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback);
891
+ if (callback)
892
+ callback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback);
423
893
 
424
894
  UInt32 numVolumes = 1;
425
- int firstVolumeIndex = -1;
895
+
426
896
  for (UInt32 i = 1; i <= numVolumes; i++)
427
897
  {
428
898
  CMyComPtr<IInStream> curStream;
429
- if (i != 1)
899
+
900
+ if (i == 1)
901
+ curStream = inStream;
902
+ else
430
903
  {
431
904
  UString fullName = seqName.GetNextName(i);
432
905
  HRESULT result = openVolumeCallback->GetStream(fullName, &curStream);
@@ -437,52 +910,70 @@ STDMETHODIMP CHandler::Open(IInStream *inStream,
437
910
  if (!curStream)
438
911
  break;
439
912
  }
440
- else
441
- curStream = inStream;
913
+
442
914
  CHeader header;
443
- HRESULT res = NWim::ReadHeader(curStream, header);
915
+ HRESULT res = NWim::ReadHeader(curStream, header, _phySize);
916
+
444
917
  if (res != S_OK)
445
918
  {
446
- if (i == 1)
447
- return res;
448
- if (res == S_FALSE)
919
+ if (i != 1 && res == S_FALSE)
449
920
  continue;
450
921
  return res;
451
922
  }
923
+
924
+ _isArc = true;
925
+ _bootIndex = header.BootIndex;
452
926
  _version = header.Version;
453
927
  _isOldVersion = header.IsOldVersion();
454
- if (firstVolumeIndex >= 0)
455
- if (!header.AreFromOnArchive(_volumes[firstVolumeIndex].Header))
928
+ if (_firstVolumeIndex >= 0)
929
+ if (!header.AreFromOnArchive(_volumes[_firstVolumeIndex].Header))
456
930
  break;
457
931
  if (_volumes.Size() > header.PartNumber && _volumes[header.PartNumber].Stream)
458
932
  break;
459
- CXml xml;
933
+ CWimXml xml;
460
934
  xml.VolIndex = header.PartNumber;
461
- res = _db.Open(curStream, header, xml.Data, openArchiveCallback);
935
+ res = _db.OpenXml(curStream, header, xml.Data);
936
+
937
+ if (res == S_OK)
938
+ {
939
+ if (!xml.Parse())
940
+ _xmlError = true;
941
+
942
+ if (xml.IsEncrypted)
943
+ {
944
+ _unsupported = true;
945
+ return S_FALSE;
946
+ }
947
+
948
+ UInt64 totalFiles = xml.GetTotalFilesAndDirs() + xml.Images.Size();
949
+ totalFiles += 16 + xml.Images.Size() * 4; // we reserve some additional items
950
+ if (totalFiles >= ((UInt32)1 << 30))
951
+ totalFiles = 0;
952
+ res = _db.Open(curStream, header, (unsigned)totalFiles, callback);
953
+ }
954
+
462
955
  if (res != S_OK)
463
956
  {
464
- if (i == 1)
465
- return res;
466
- if (res == S_FALSE)
957
+ if (i != 1 && res == S_FALSE)
467
958
  continue;
468
959
  return res;
469
960
  }
470
961
 
471
962
  while (_volumes.Size() <= header.PartNumber)
472
- _volumes.Add(CVolume());
963
+ _volumes.AddNew();
473
964
  CVolume &volume = _volumes[header.PartNumber];
474
965
  volume.Header = header;
475
966
  volume.Stream = curStream;
476
967
 
477
- firstVolumeIndex = header.PartNumber;
968
+ _firstVolumeIndex = header.PartNumber;
478
969
 
479
- bool needAddXml = true;
480
- if (_xmls.Size() != 0)
481
- if (xml.Data == _xmls[0].Data)
482
- needAddXml = false;
483
- if (needAddXml)
970
+ if (_xmls.IsEmpty() || xml.Data != _xmls[0].Data)
484
971
  {
485
- xml.Parse();
972
+ char sz[16];
973
+ ConvertUInt32ToString(xml.VolIndex, sz);
974
+ xml.FileName = L'[';
975
+ xml.FileName.AddAscii(sz);
976
+ xml.FileName.AddAscii("].xml");
486
977
  _xmls.Add(xml);
487
978
  }
488
979
 
@@ -503,62 +994,92 @@ STDMETHODIMP CHandler::Open(IInStream *inStream,
503
994
  }
504
995
  }
505
996
 
506
- _db.DetectPathMode();
507
- RINOK(_db.Sort(_db.SkipRoot));
997
+ RINOK(_db.FillAndCheck(_volumes));
998
+ int defaultImageIndex = (int)_defaultImageNumber - 1;
999
+
1000
+ bool showImageNumber = (_db.Images.Size() != 1 && defaultImageIndex < 0);
1001
+ if (!showImageNumber && _set_use_ShowImageNumber)
1002
+ showImageNumber = _set_showImageNumber;
1003
+
1004
+ if (!showImageNumber && _keepMode_ShowImageNumber)
1005
+ showImageNumber = true;
508
1006
 
1007
+ _showImageNumber = showImageNumber;
1008
+
1009
+ RINOK(_db.GenerateSortedItems(defaultImageIndex, showImageNumber));
1010
+ RINOK(_db.ExtractReparseStreams(_volumes, callback));
1011
+
1012
+ /*
509
1013
  wchar_t sz[16];
510
- ConvertUInt32ToString(_db.Streams.Size(), sz);
1014
+ ConvertUInt32ToString(_db.DataStreams.Size(), sz);
511
1015
  _nameLenForStreams = MyStringLen(sz);
1016
+ */
512
1017
 
513
- _xmlInComments = (_xmls.Size() == 1 && !_db.ShowImageNumber);
1018
+ _xmlInComments = !_showImageNumber;
1019
+ _numXmlItems = (_xmlInComments ? 0 : _xmls.Size());
1020
+ _numIgnoreItems = _db.ThereAreDeletedStreams ? 1 : 0;
514
1021
  }
515
1022
  return S_OK;
516
1023
  COM_TRY_END
517
1024
  }
518
1025
 
1026
+
519
1027
  STDMETHODIMP CHandler::Close()
520
1028
  {
1029
+ _firstVolumeIndex = -1;
1030
+ _phySize = 0;
521
1031
  _db.Clear();
522
1032
  _volumes.Clear();
523
1033
  _xmls.Clear();
524
- _nameLenForStreams = 0;
1034
+ // _nameLenForStreams = 0;
1035
+ _xmlInComments = false;
1036
+ _numXmlItems = 0;
1037
+ _numIgnoreItems = 0;
1038
+ _xmlError = false;
1039
+ _isArc = false;
1040
+ _unsupported = false;
525
1041
  return S_OK;
526
1042
  }
527
1043
 
1044
+
528
1045
  STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
529
1046
  Int32 testMode, IArchiveExtractCallback *extractCallback)
530
1047
  {
531
1048
  COM_TRY_BEGIN
532
- bool allFilesMode = (numItems == (UInt32)-1);
1049
+ bool allFilesMode = (numItems == (UInt32)(Int32)-1);
533
1050
 
534
1051
  if (allFilesMode)
535
- numItems = _db.SortedItems.Size() + _xmls.Size();
1052
+ numItems = _db.SortedItems.Size() + _numXmlItems + _db.VirtualRoots.Size() + _numIgnoreItems;
536
1053
  if (numItems == 0)
537
1054
  return S_OK;
538
1055
 
539
1056
  UInt32 i;
540
1057
  UInt64 totalSize = 0;
1058
+
541
1059
  for (i = 0; i < numItems; i++)
542
1060
  {
543
1061
  UInt32 index = allFilesMode ? i : indices[i];
544
- if (index < (UInt32)_db.SortedItems.Size())
1062
+ if (index < _db.SortedItems.Size())
545
1063
  {
546
1064
  int streamIndex = _db.Items[_db.SortedItems[index]].StreamIndex;
547
1065
  if (streamIndex >= 0)
548
1066
  {
549
- const CStreamInfo &si = _db.Streams[streamIndex];
550
- totalSize += si.Resource.UnpackSize;
1067
+ const CStreamInfo &si = _db.DataStreams[streamIndex];
1068
+ totalSize += _db.Get_UnpackSize_of_Resource(si.Resource);
551
1069
  }
552
1070
  }
553
1071
  else
554
- totalSize += _xmls[index - (UInt32)_db.SortedItems.Size()].Data.GetCapacity();
1072
+ {
1073
+ index -= _db.SortedItems.Size();
1074
+ if (index < (UInt32)_numXmlItems)
1075
+ totalSize += _xmls[index].Data.Size();
1076
+ }
555
1077
  }
556
1078
 
557
1079
  RINOK(extractCallback->SetTotal(totalSize));
558
1080
 
559
- UInt64 currentTotalPacked = 0;
560
1081
  UInt64 currentTotalUnPacked = 0;
561
- UInt64 currentItemUnPacked, currentItemPacked;
1082
+ UInt64 currentItemUnPacked;
562
1083
 
563
1084
  int prevSuccessStreamIndex = -1;
564
1085
 
@@ -568,35 +1089,42 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
568
1089
  CMyComPtr<ICompressProgressInfo> progress = lps;
569
1090
  lps->Init(extractCallback, false);
570
1091
 
571
- for (i = 0; i < numItems; currentTotalUnPacked += currentItemUnPacked,
572
- currentTotalPacked += currentItemPacked)
1092
+ for (i = 0;; i++,
1093
+ currentTotalUnPacked += currentItemUnPacked)
573
1094
  {
574
1095
  currentItemUnPacked = 0;
575
- currentItemPacked = 0;
576
1096
 
577
- lps->InSize = currentTotalPacked;
1097
+ lps->InSize = unpacker.TotalPacked;
578
1098
  lps->OutSize = currentTotalUnPacked;
579
1099
 
580
1100
  RINOK(lps->SetCur());
1101
+
1102
+ if (i >= numItems)
1103
+ break;
1104
+
581
1105
  UInt32 index = allFilesMode ? i : indices[i];
582
- i++;
583
1106
  Int32 askMode = testMode ?
584
1107
  NExtract::NAskMode::kTest :
585
1108
  NExtract::NAskMode::kExtract;
586
1109
 
587
1110
  CMyComPtr<ISequentialOutStream> realOutStream;
588
1111
  RINOK(extractCallback->GetStream(index, &realOutStream, askMode));
589
- if (index >= (UInt32)_db.SortedItems.Size())
1112
+
1113
+ if (index >= _db.SortedItems.Size())
590
1114
  {
591
1115
  if (!testMode && !realOutStream)
592
1116
  continue;
593
1117
  RINOK(extractCallback->PrepareOperation(askMode));
594
- const CByteBuffer &data = _xmls[index - (UInt32)_db.SortedItems.Size()].Data;
595
- currentItemUnPacked = data.GetCapacity();
596
- if (realOutStream)
1118
+ index -= _db.SortedItems.Size();
1119
+ if (index < (UInt32)_numXmlItems)
597
1120
  {
598
- RINOK(WriteStream(realOutStream, (const Byte *)data, data.GetCapacity()));
599
- realOutStream.Release();
1121
+ const CByteBuffer &data = _xmls[index].Data;
1122
+ currentItemUnPacked = data.Size();
1123
+ if (realOutStream)
1124
+ {
1125
+ RINOK(WriteStream(realOutStream, (const Byte *)data, data.Size()));
1126
+ realOutStream.Release();
1127
+ }
600
1128
  }
601
1129
  RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK));
602
1130
  continue;
@@ -606,54 +1134,114 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
606
1134
  int streamIndex = item.StreamIndex;
607
1135
  if (streamIndex < 0)
608
1136
  {
609
- if (!testMode && !realOutStream)
610
- continue;
1137
+ if (!item.IsDir)
1138
+ if (!testMode && !realOutStream)
1139
+ continue;
611
1140
  RINOK(extractCallback->PrepareOperation(askMode));
612
1141
  realOutStream.Release();
613
- RINOK(extractCallback->SetOperationResult(item.HasStream() ?
614
- NExtract::NOperationResult::kDataError :
615
- NExtract::NOperationResult::kOK));
1142
+ RINOK(extractCallback->SetOperationResult(!item.IsDir && _db.ItemHasStream(item) ?
1143
+ NExtract::NOperationResult::kDataError :
1144
+ NExtract::NOperationResult::kOK));
616
1145
  continue;
617
1146
  }
618
1147
 
619
- const CStreamInfo &si = _db.Streams[streamIndex];
620
- currentItemUnPacked = si.Resource.UnpackSize;
621
- currentItemPacked = si.Resource.PackSize;
1148
+ const CStreamInfo &si = _db.DataStreams[streamIndex];
1149
+ currentItemUnPacked = _db.Get_UnpackSize_of_Resource(si.Resource);
1150
+ // currentItemPacked = _db.Get_PackSize_of_Resource(streamIndex);
622
1151
 
623
1152
  if (!testMode && !realOutStream)
624
1153
  continue;
625
1154
  RINOK(extractCallback->PrepareOperation(askMode));
626
1155
  Int32 opRes = NExtract::NOperationResult::kOK;
1156
+
627
1157
  if (streamIndex != prevSuccessStreamIndex || realOutStream)
628
1158
  {
629
- Byte digest[20];
1159
+ Byte digest[kHashSize];
630
1160
  const CVolume &vol = _volumes[si.PartNumber];
631
- HRESULT res = unpacker.Unpack(vol.Stream, si.Resource, vol.Header.IsLzxMode(),
632
- realOutStream, progress, digest);
1161
+ bool needDigest = !si.IsEmptyHash();
1162
+
1163
+ HRESULT res = unpacker.Unpack(vol.Stream, si.Resource, vol.Header, &_db,
1164
+ realOutStream, progress, needDigest ? digest : NULL);
1165
+
633
1166
  if (res == S_OK)
634
1167
  {
635
- if (memcmp(digest, si.Hash, kHashSize) == 0)
1168
+ if (!needDigest || memcmp(digest, si.Hash, kHashSize) == 0)
636
1169
  prevSuccessStreamIndex = streamIndex;
637
1170
  else
638
1171
  opRes = NExtract::NOperationResult::kCRCError;
639
1172
  }
640
1173
  else if (res == S_FALSE)
641
1174
  opRes = NExtract::NOperationResult::kDataError;
1175
+ else if (res == E_NOTIMPL)
1176
+ opRes = NExtract::NOperationResult::kUnsupportedMethod;
642
1177
  else
643
1178
  return res;
644
1179
  }
1180
+
645
1181
  realOutStream.Release();
646
1182
  RINOK(extractCallback->SetOperationResult(opRes));
647
1183
  }
1184
+
648
1185
  return S_OK;
649
1186
  COM_TRY_END
650
1187
  }
651
1188
 
1189
+
652
1190
  STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
653
1191
  {
654
- *numItems = _db.SortedItems.Size();
655
- if (!_xmlInComments)
656
- *numItems += _xmls.Size();
1192
+ *numItems = _db.SortedItems.Size() +
1193
+ _numXmlItems +
1194
+ _db.VirtualRoots.Size() +
1195
+ _numIgnoreItems;
1196
+ return S_OK;
1197
+ }
1198
+
1199
+ CHandler::CHandler()
1200
+ {
1201
+ _keepMode_ShowImageNumber = false;
1202
+ InitDefaults();
1203
+ _xmlError = false;
1204
+ }
1205
+
1206
+ STDMETHODIMP CHandler::SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps)
1207
+ {
1208
+ InitDefaults();
1209
+
1210
+ for (UInt32 i = 0; i < numProps; i++)
1211
+ {
1212
+ UString name = names[i];
1213
+ name.MakeLower_Ascii();
1214
+ if (name.IsEmpty())
1215
+ return E_INVALIDARG;
1216
+
1217
+ const PROPVARIANT &prop = values[i];
1218
+
1219
+ if (name[0] == L'x')
1220
+ {
1221
+ // some clients write 'x' property. So we support it
1222
+ UInt32 level = 0;
1223
+ RINOK(ParsePropToUInt32(name.Ptr(1), prop, level));
1224
+ }
1225
+ else if (name.IsEqualTo("is"))
1226
+ {
1227
+ RINOK(PROPVARIANT_to_bool(prop, _set_showImageNumber));
1228
+ _set_use_ShowImageNumber = true;
1229
+ }
1230
+ else if (name.IsEqualTo("im"))
1231
+ {
1232
+ UInt32 image = 9;
1233
+ RINOK(ParsePropToUInt32(L"", prop, image));
1234
+ _defaultImageNumber = image;
1235
+ }
1236
+ else
1237
+ return E_INVALIDARG;
1238
+ }
1239
+ return S_OK;
1240
+ }
1241
+
1242
+ STDMETHODIMP CHandler::KeepModeForNextOpen()
1243
+ {
1244
+ _keepMode_ShowImageNumber = _showImageNumber;
657
1245
  return S_OK;
658
1246
  }
659
1247