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,45 +4,47 @@
4
4
 
5
5
  #include "../../../C/CpuArch.h"
6
6
 
7
- #include "Common/Buffer.h"
8
- #include "Common/ComTry.h"
9
- #include "Common/IntToString.h"
10
- #include "Common/MyString.h"
7
+ #include "../../Common/ComTry.h"
8
+ #include "../../Common/IntToString.h"
11
9
 
12
- #include "Windows/PropVariant.h"
10
+ #include "../../Windows/PropVariant.h"
13
11
 
14
12
  #include "../Common/LimitedStreams.h"
15
- #include "../Common/ProgressUtils.h"
16
13
  #include "../Common/RegisterArc.h"
17
14
  #include "../Common/StreamUtils.h"
18
15
 
19
- #include "../Compress/CopyCoder.h"
16
+ #include "HandlerCont.h"
20
17
 
21
18
  #define Get16(p) GetBe16(p)
22
19
  #define Get32(p) GetBe32(p)
23
20
  #define Get64(p) GetBe64(p)
24
21
 
25
- #define G32(p, dest) dest = Get32(p);
26
- #define G64(p, dest) dest = Get64(p);
22
+ #define G32(_offs_, dest) dest = Get32(p + (_offs_));
23
+ #define G64(_offs_, dest) dest = Get64(p + (_offs_));
27
24
 
28
25
  using namespace NWindows;
29
26
 
30
27
  namespace NArchive {
31
28
  namespace NVhd {
32
29
 
30
+ #define SIGNATURE { 'c', 'o', 'n', 'e', 'c', 't', 'i', 'x', 0, 0 }
31
+
32
+ static const unsigned kSignatureSize = 10;
33
+ static const Byte kSignature[kSignatureSize] = SIGNATURE;
34
+
33
35
  static const UInt32 kUnusedBlock = 0xFFFFFFFF;
34
36
 
35
37
  static const UInt32 kDiskType_Fixed = 2;
36
38
  static const UInt32 kDiskType_Dynamic = 3;
37
39
  static const UInt32 kDiskType_Diff = 4;
38
40
 
39
- static const char *kDiskTypes[] =
41
+ static const char * const kDiskTypes[] =
40
42
  {
41
- "0",
42
- "1",
43
- "Fixed",
44
- "Dynamic",
45
- "Differencing"
43
+ "0"
44
+ , "1"
45
+ , "Fixed"
46
+ , "Dynamic"
47
+ , "Differencing"
46
48
  };
47
49
 
48
50
  struct CFooter
@@ -73,7 +75,7 @@ struct CFooter
73
75
 
74
76
  AString CFooter::GetTypeString() const
75
77
  {
76
- if (Type < sizeof(kDiskTypes) / sizeof(kDiskTypes[0]))
78
+ if (Type < ARRAY_SIZE(kDiskTypes))
77
79
  return kDiskTypes[Type];
78
80
  char s[16];
79
81
  ConvertUInt32ToString(Type, s);
@@ -96,27 +98,35 @@ static bool CheckBlock(const Byte *p, unsigned size, unsigned checkSumOffset, un
96
98
  return true;
97
99
  }
98
100
 
101
+ static const unsigned kSectorSize_Log = 9;
102
+ static const unsigned kSectorSize = 1 << kSectorSize_Log;
103
+ static const unsigned kHeaderSize = 512;
104
+
99
105
  bool CFooter::Parse(const Byte *p)
100
106
  {
101
- if (memcmp(p, "conectix", 8) != 0)
107
+ if (memcmp(p, kSignature, kSignatureSize) != 0)
108
+ return false;
109
+ // G32(0x08, Features);
110
+ // G32(0x0C, FormatVersion);
111
+ G64(0x10, DataOffset);
112
+ G32(0x18, CTime);
113
+ G32(0x1C, CreatorApp);
114
+ G32(0x20, CreatorVersion);
115
+ G32(0x24, CreatorHostOS);
116
+ // G64(0x28, OriginalSize);
117
+ G64(0x30, CurrentSize);
118
+ G32(0x38, DiskGeometry);
119
+ G32(0x3C, Type);
120
+ if (Type < kDiskType_Fixed ||
121
+ Type > kDiskType_Diff)
102
122
  return false;
103
- // G32(p + 0x08, Features);
104
- // G32(p + 0x0C, FormatVersion);
105
- G64(p + 0x10, DataOffset);
106
- G32(p + 0x18, CTime);
107
- G32(p + 0x1C, CreatorApp);
108
- G32(p + 0x20, CreatorVersion);
109
- G32(p + 0x24, CreatorHostOS);
110
- // G64(p + 0x28, OriginalSize);
111
- G64(p + 0x30, CurrentSize);
112
- G32(p + 0x38, DiskGeometry);
113
- G32(p + 0x3C, Type);
114
123
  memcpy(Id, p + 0x44, 16);
115
124
  SavedState = p[0x54];
116
- return CheckBlock(p, 512, 0x40, 0x55);
125
+ // if (DataOffset > ((UInt64)1 << 62)) return false;
126
+ // if (CurrentSize > ((UInt64)1 << 62)) return false;
127
+ return CheckBlock(p, kHeaderSize, 0x40, 0x55);
117
128
  }
118
129
 
119
- /*
120
130
  struct CParentLocatorEntry
121
131
  {
122
132
  UInt32 Code;
@@ -124,17 +134,15 @@ struct CParentLocatorEntry
124
134
  UInt32 DataLen;
125
135
  UInt64 DataOffset;
126
136
 
127
- bool Parse(const Byte *p);
137
+ bool Parse(const Byte *p)
138
+ {
139
+ G32(0x00, Code);
140
+ G32(0x04, DataSpace);
141
+ G32(0x08, DataLen);
142
+ G64(0x10, DataOffset);
143
+ return Get32(p + 0x0C) == 0; // Reserved
144
+ }
128
145
  };
129
- bool CParentLocatorEntry::Parse(const Byte *p)
130
- {
131
- G32(p + 0x00, Code);
132
- G32(p + 0x04, DataSpace);
133
- G32(p + 0x08, DataLen);
134
- G32(p + 0x10, DataOffset);
135
- return (Get32(p + 0x0C) == 0); // Resrved
136
- }
137
- */
138
146
 
139
147
  struct CDynHeader
140
148
  {
@@ -142,68 +150,77 @@ struct CDynHeader
142
150
  UInt64 TableOffset;
143
151
  // UInt32 HeaderVersion;
144
152
  UInt32 NumBlocks;
145
- int BlockSizeLog;
153
+ unsigned BlockSizeLog;
146
154
  UInt32 ParentTime;
147
155
  Byte ParentId[16];
156
+ bool RelativeNameWasUsed;
148
157
  UString ParentName;
149
- // CParentLocatorEntry ParentLocators[8];
158
+ UString RelativeParentNameFromLocator;
159
+ CParentLocatorEntry ParentLocators[8];
150
160
 
151
161
  bool Parse(const Byte *p);
152
162
  UInt32 NumBitMapSectors() const
153
163
  {
154
- UInt32 numSectorsInBlock = (1 << (BlockSizeLog - 9));
155
- return (numSectorsInBlock + 512 * 8 - 1) / (512 * 8);
164
+ UInt32 numSectorsInBlock = (1 << (BlockSizeLog - kSectorSize_Log));
165
+ return (numSectorsInBlock + kSectorSize * 8 - 1) / (kSectorSize * 8);
166
+ }
167
+ void Clear()
168
+ {
169
+ RelativeNameWasUsed = false;
170
+ ParentName.Empty();
171
+ RelativeParentNameFromLocator.Empty();
156
172
  }
157
173
  };
158
174
 
159
- static int GetLog(UInt32 num)
160
- {
161
- for (int i = 0; i < 31; i++)
162
- if (((UInt32)1 << i) == num)
163
- return i;
164
- return -1;
165
- }
166
-
167
175
  bool CDynHeader::Parse(const Byte *p)
168
176
  {
169
177
  if (memcmp(p, "cxsparse", 8) != 0)
170
178
  return false;
171
- // G64(p + 0x08, DataOffset);
172
- G64(p + 0x10, TableOffset);
173
- // G32(p + 0x18, HeaderVersion);
174
- G32(p + 0x1C, NumBlocks);
175
- BlockSizeLog = GetLog(Get32(p + 0x20));
176
- if (BlockSizeLog < 9 || BlockSizeLog > 30)
177
- return false;
178
- G32(p + 0x38, ParentTime);
179
+ // G64(0x08, DataOffset);
180
+ G64(0x10, TableOffset);
181
+ // G32(0x18, HeaderVersion);
182
+ G32(0x1C, NumBlocks);
183
+ {
184
+ UInt32 blockSize = Get32(p + 0x20);
185
+ unsigned i;
186
+ for (i = kSectorSize_Log;; i++)
187
+ {
188
+ if (i > 31)
189
+ return false;
190
+ if (((UInt32)1 << i) == blockSize)
191
+ break;
192
+ }
193
+ BlockSizeLog = i;
194
+ }
195
+ G32(0x38, ParentTime);
179
196
  if (Get32(p + 0x3C) != 0) // reserved
180
197
  return false;
181
198
  memcpy(ParentId, p + 0x28, 16);
182
199
  {
183
- const int kNameLength = 256;
184
- wchar_t *s = ParentName.GetBuffer(kNameLength);
185
- for (unsigned i = 0; i < kNameLength; i++)
186
- s[i] = Get16(p + 0x40 + i * 2);
187
- s[kNameLength] = 0;
188
- ParentName.ReleaseBuffer();
200
+ const unsigned kNameLen = 256;
201
+ wchar_t *s = ParentName.GetBuf(kNameLen);
202
+ unsigned i;
203
+ for (i = 0; i < kNameLen; i++)
204
+ {
205
+ wchar_t c = Get16(p + 0x40 + i * 2);
206
+ if (c == 0)
207
+ break;
208
+ s[i] = c;
209
+ }
210
+ s[i] = 0;
211
+ ParentName.ReleaseBuf_SetLen(i);
189
212
  }
190
- /*
191
- for (int i = 0; i < 8; i++)
213
+ for (unsigned i = 0; i < 8; i++)
192
214
  if (!ParentLocators[i].Parse(p + 0x240 + i * 24))
193
215
  return false;
194
- */
195
216
  return CheckBlock(p, 1024, 0x24, 0x240 + 8 * 24);
196
217
  }
197
218
 
198
- class CHandler:
199
- public IInStream,
200
- public IInArchive,
201
- public IInArchiveGetStream,
202
- public CMyUnknownImp
219
+ class CHandler: public CHandlerImg
203
220
  {
204
- UInt64 _virtPos;
205
- UInt64 _phyPos;
206
- UInt64 _phyLimit;
221
+ UInt64 _posInArcLimit;
222
+ UInt64 _startOffset;
223
+ UInt64 _phySize;
207
224
 
208
225
  CFooter Footer;
209
226
  CDynHeader Dyn;
@@ -211,10 +228,25 @@ class CHandler:
211
228
  CByteBuffer BitMap;
212
229
  UInt32 BitMapTag;
213
230
  UInt32 NumUsedBlocks;
214
- CMyComPtr<IInStream> Stream;
231
+ // CMyComPtr<IInStream> Stream;
215
232
  CMyComPtr<IInStream> ParentStream;
216
233
  CHandler *Parent;
234
+ UString _errorMessage;
235
+ // bool _unexpectedEnd;
217
236
 
237
+ void AddErrorMessage(const wchar_t *s)
238
+ {
239
+ if (!_errorMessage.IsEmpty())
240
+ _errorMessage.Add_LF();
241
+ _errorMessage += s;
242
+ }
243
+ void UpdatePhySize(UInt64 value)
244
+ {
245
+ if (_phySize < value)
246
+ _phySize = value;
247
+ }
248
+
249
+ void Reset_PosInArc() { _posInArc = (UInt64)0 - 1; }
218
250
  HRESULT Seek(UInt64 offset);
219
251
  HRESULT InitAndSeek();
220
252
  HRESULT ReadPhy(UInt64 offset, void *data, UInt32 size);
@@ -223,45 +255,67 @@ class CHandler:
223
255
  UInt64 GetPackSize() const
224
256
  { return Footer.ThereIsDynamic() ? ((UInt64)NumUsedBlocks << Dyn.BlockSizeLog) : Footer.CurrentSize; }
225
257
 
226
- UString GetParentName() const
258
+ UString GetParentSequence() const
227
259
  {
228
260
  const CHandler *p = this;
229
261
  UString res;
230
262
  while (p && p->NeedParent())
231
263
  {
232
264
  if (!res.IsEmpty())
233
- res += L" -> ";
234
- res += p->Dyn.ParentName;
265
+ res.AddAscii(" -> ");
266
+ UString mainName;
267
+ UString anotherName;
268
+ if (Dyn.RelativeNameWasUsed)
269
+ {
270
+ mainName = p->Dyn.RelativeParentNameFromLocator;
271
+ anotherName = p->Dyn.ParentName;
272
+ }
273
+ else
274
+ {
275
+ mainName = p->Dyn.ParentName;
276
+ anotherName = p->Dyn.RelativeParentNameFromLocator;
277
+ }
278
+ res += mainName;
279
+ if (mainName != anotherName && !anotherName.IsEmpty())
280
+ {
281
+ res.Add_Space();
282
+ res += L'(';
283
+ res += anotherName;
284
+ res += L')';
285
+ }
235
286
  p = p->Parent;
236
287
  }
237
288
  return res;
238
289
  }
239
290
 
240
- bool IsOK() const
291
+ bool AreParentsOK() const
241
292
  {
242
293
  const CHandler *p = this;
243
294
  while (p->NeedParent())
244
295
  {
245
296
  p = p->Parent;
246
- if (p == 0)
297
+ if (!p)
247
298
  return false;
248
299
  }
249
300
  return true;
250
301
  }
251
302
 
252
303
  HRESULT Open3();
253
- HRESULT Open2(IInStream *stream, CHandler *child, IArchiveOpenCallback *openArchiveCallback, int level);
304
+ HRESULT Open2(IInStream *stream, CHandler *child, IArchiveOpenCallback *openArchiveCallback, unsigned level);
305
+ HRESULT Open2(IInStream *stream, IArchiveOpenCallback *openArchiveCallback)
306
+ {
307
+ return Open2(stream, NULL, openArchiveCallback, 0);
308
+ }
309
+ void CloseAtError();
254
310
 
255
311
  public:
256
- MY_UNKNOWN_IMP3(IInArchive, IInArchiveGetStream, IInStream)
312
+ INTERFACE_IInArchive_Img(;)
257
313
 
258
- INTERFACE_IInArchive(;)
259
314
  STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
260
315
  STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
261
- STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
262
316
  };
263
317
 
264
- HRESULT CHandler::Seek(UInt64 offset) { return Stream->Seek(offset, STREAM_SEEK_SET, NULL); }
318
+ HRESULT CHandler::Seek(UInt64 offset) { return Stream->Seek(_startOffset + offset, STREAM_SEEK_SET, NULL); }
265
319
 
266
320
  HRESULT CHandler::InitAndSeek()
267
321
  {
@@ -269,50 +323,132 @@ HRESULT CHandler::InitAndSeek()
269
323
  {
270
324
  RINOK(Parent->InitAndSeek());
271
325
  }
272
- _virtPos = _phyPos = 0;
326
+ _virtPos = _posInArc = 0;
273
327
  BitMapTag = kUnusedBlock;
274
- BitMap.SetCapacity(Dyn.NumBitMapSectors() << 9);
328
+ BitMap.Alloc(Dyn.NumBitMapSectors() << kSectorSize_Log);
275
329
  return Seek(0);
276
330
  }
277
331
 
278
332
  HRESULT CHandler::ReadPhy(UInt64 offset, void *data, UInt32 size)
279
333
  {
280
- if (offset + size > _phyLimit)
334
+ if (offset + size > _posInArcLimit)
281
335
  return S_FALSE;
282
- if (offset != _phyPos)
336
+ if (offset != _posInArc)
283
337
  {
284
- _phyPos = offset;
338
+ _posInArc = offset;
285
339
  RINOK(Seek(offset));
286
340
  }
287
341
  HRESULT res = ReadStream_FALSE(Stream, data, size);
288
- _phyPos += size;
342
+ if (res == S_OK)
343
+ _posInArc += size;
344
+ else
345
+ Reset_PosInArc();
289
346
  return res;
290
347
  }
291
348
 
292
349
  HRESULT CHandler::Open3()
293
350
  {
294
- RINOK(Stream->Seek(0, STREAM_SEEK_END, &_phyPos));
295
- if (_phyPos < 512)
351
+ // Fixed archive uses only footer
352
+
353
+ UInt64 startPos;
354
+ RINOK(Stream->Seek(0, STREAM_SEEK_CUR, &startPos));
355
+ _startOffset = startPos;
356
+ Byte header[kHeaderSize];
357
+ RINOK(ReadStream_FALSE(Stream, header, kHeaderSize));
358
+ bool headerIsOK = Footer.Parse(header);
359
+ _size = Footer.CurrentSize;
360
+
361
+ if (headerIsOK && !Footer.ThereIsDynamic())
362
+ {
363
+ // fixed archive
364
+ if (startPos < Footer.CurrentSize)
365
+ return S_FALSE;
366
+ _posInArcLimit = Footer.CurrentSize;
367
+ _phySize = Footer.CurrentSize + kHeaderSize;
368
+ _startOffset = startPos - Footer.CurrentSize;
369
+ _posInArc = _phySize;
370
+ return S_OK;
371
+ }
372
+
373
+ UInt64 fileSize;
374
+ RINOK(Stream->Seek(0, STREAM_SEEK_END, &fileSize));
375
+ if (fileSize < kHeaderSize)
296
376
  return S_FALSE;
377
+
297
378
  const UInt32 kDynSize = 1024;
298
379
  Byte buf[kDynSize];
299
380
 
300
- _phyLimit = _phyPos;
301
- RINOK(ReadPhy(_phyLimit - 512, buf, 512));
302
- if (!Footer.Parse(buf))
303
- return S_FALSE;
304
- _phyLimit -= 512;
381
+ RINOK(Stream->Seek(fileSize - kHeaderSize, STREAM_SEEK_SET, NULL));
382
+ RINOK(ReadStream_FALSE(Stream, buf, kHeaderSize));
305
383
 
306
- if (!Footer.ThereIsDynamic())
384
+ if (!headerIsOK)
385
+ {
386
+ if (!Footer.Parse(buf))
387
+ return S_FALSE;
388
+ _size = Footer.CurrentSize;
389
+ if (Footer.ThereIsDynamic())
390
+ return S_FALSE; // we can't open Dynamic Archive backward.
391
+ _posInArcLimit = Footer.CurrentSize;
392
+ _phySize = Footer.CurrentSize + kHeaderSize;
393
+ _startOffset = fileSize - kHeaderSize - Footer.CurrentSize;
394
+ _posInArc = _phySize;
307
395
  return S_OK;
396
+ }
308
397
 
309
- RINOK(ReadPhy(0, buf + 512, 512));
310
- if (memcmp(buf, buf + 512, 512) != 0)
311
- return S_FALSE;
398
+ _phySize = kHeaderSize;
399
+ _posInArc = fileSize - startPos;
400
+ _posInArcLimit = _posInArc - kHeaderSize;
401
+
402
+ bool headerAndFooterAreEqual = false;
403
+ if (memcmp(header, buf, kHeaderSize) == 0)
404
+ {
405
+ headerAndFooterAreEqual = true;
406
+ _phySize = fileSize - _startOffset;
407
+ }
312
408
 
313
409
  RINOK(ReadPhy(Footer.DataOffset, buf, kDynSize));
314
410
  if (!Dyn.Parse(buf))
315
411
  return S_FALSE;
412
+
413
+ UpdatePhySize(Footer.DataOffset + kDynSize);
414
+
415
+ for (int i = 0; i < 8; i++)
416
+ {
417
+ const CParentLocatorEntry &locator = Dyn.ParentLocators[i];
418
+ const UInt32 kNameBufSizeMax = 1024;
419
+ if (locator.DataLen < kNameBufSizeMax &&
420
+ locator.DataOffset < _posInArcLimit &&
421
+ locator.DataOffset + locator.DataLen <= _posInArcLimit)
422
+ {
423
+ if (locator.Code == 0x57327275 && (locator.DataLen & 1) == 0)
424
+ {
425
+ // "W2ru" locator
426
+ // Path is encoded as little-endian UTF-16
427
+ Byte nameBuf[kNameBufSizeMax];
428
+ UString tempString;
429
+ unsigned len = (locator.DataLen >> 1);
430
+ {
431
+ wchar_t *s = tempString.GetBuf(len);
432
+ RINOK(ReadPhy(locator.DataOffset, nameBuf, locator.DataLen));
433
+ unsigned j;
434
+ for (j = 0; j < len; j++)
435
+ {
436
+ wchar_t c = GetUi16(nameBuf + j * 2);
437
+ if (c == 0)
438
+ break;
439
+ s[j] = c;
440
+ }
441
+ s[j] = 0;
442
+ tempString.ReleaseBuf_SetLen(j);
443
+ }
444
+ if (tempString[0] == L'.' && tempString[1] == L'\\')
445
+ tempString.DeleteFrontal(2);
446
+ Dyn.RelativeParentNameFromLocator = tempString;
447
+ }
448
+ }
449
+ if (locator.DataLen != 0)
450
+ UpdatePhySize(locator.DataOffset + locator.DataLen);
451
+ }
316
452
 
317
453
  if (Dyn.NumBlocks >= (UInt32)1 << 31)
318
454
  return S_FALSE;
@@ -324,32 +460,83 @@ HRESULT CHandler::Open3()
324
460
  else if (((Footer.CurrentSize - 1) >> Dyn.BlockSizeLog) + 1 != Dyn.NumBlocks)
325
461
  return S_FALSE;
326
462
 
327
- Bat.Reserve(Dyn.NumBlocks);
463
+ Bat.ClearAndReserve(Dyn.NumBlocks);
464
+
465
+ UInt32 bitmapSize = Dyn.NumBitMapSectors() << kSectorSize_Log;
466
+
328
467
  while ((UInt32)Bat.Size() < Dyn.NumBlocks)
329
468
  {
330
- RINOK(ReadPhy(Dyn.TableOffset + (UInt64)Bat.Size() * 4, buf, 512));
331
- for (UInt32 j = 0; j < 512; j += 4)
469
+ RINOK(ReadPhy(Dyn.TableOffset + (UInt64)Bat.Size() * 4, buf, kSectorSize));
470
+ UpdatePhySize(Dyn.TableOffset + kSectorSize);
471
+ for (UInt32 j = 0; j < kSectorSize; j += 4)
332
472
  {
333
473
  UInt32 v = Get32(buf + j);
334
474
  if (v != kUnusedBlock)
475
+ {
476
+ UInt32 blockSize = (UInt32)1 << Dyn.BlockSizeLog;
477
+ UpdatePhySize(((UInt64)v << kSectorSize_Log) + bitmapSize + blockSize);
335
478
  NumUsedBlocks++;
336
- Bat.Add(v);
479
+ }
480
+ Bat.AddInReserved(v);
337
481
  if ((UInt32)Bat.Size() >= Dyn.NumBlocks)
338
482
  break;
339
483
  }
340
484
  }
485
+
486
+ if (headerAndFooterAreEqual)
487
+ return S_OK;
488
+
489
+ if (_startOffset + _phySize + kHeaderSize > fileSize)
490
+ {
491
+ // _unexpectedEnd = true;
492
+ _posInArcLimit = _phySize;
493
+ _phySize += kHeaderSize;
494
+ return S_OK;
495
+ }
496
+
497
+ RINOK(ReadPhy(_phySize, buf, kHeaderSize));
498
+ if (memcmp(header, buf, kHeaderSize) == 0)
499
+ {
500
+ _posInArcLimit = _phySize;
501
+ _phySize += kHeaderSize;
502
+ return S_OK;
503
+ }
504
+
505
+ if (_phySize == 0x800)
506
+ {
507
+ /* WHY does empty archive contain additional empty sector?
508
+ We skip that sector and check footer again. */
509
+ unsigned i;
510
+ for (i = 0; i < kSectorSize && buf[i] == 0; i++);
511
+ if (i == kSectorSize)
512
+ {
513
+ RINOK(ReadPhy(_phySize + kSectorSize, buf, kHeaderSize));
514
+ if (memcmp(header, buf, kHeaderSize) == 0)
515
+ {
516
+ _phySize += kSectorSize;
517
+ _posInArcLimit = _phySize;
518
+ _phySize += kHeaderSize;
519
+ return S_OK;
520
+ }
521
+ }
522
+ }
523
+ _posInArcLimit = _phySize;
524
+ _phySize += kHeaderSize;
525
+ AddErrorMessage(L"Can't find footer");
341
526
  return S_OK;
342
527
  }
343
528
 
344
529
  STDMETHODIMP CHandler::Read(void *data, UInt32 size, UInt32 *processedSize)
345
530
  {
346
- if (processedSize != NULL)
531
+ if (processedSize)
347
532
  *processedSize = 0;
348
533
  if (_virtPos >= Footer.CurrentSize)
349
- return (Footer.CurrentSize == _virtPos) ? S_OK: E_FAIL;
350
- UInt64 rem = Footer.CurrentSize - _virtPos;
351
- if (size > rem)
352
- size = (UInt32)rem;
534
+ return S_OK;
535
+ {
536
+ const UInt64 rem = Footer.CurrentSize - _virtPos;
537
+ if (size > rem)
538
+ size = (UInt32)rem;
539
+ }
353
540
  if (size == 0)
354
541
  return S_OK;
355
542
  UInt32 blockIndex = (UInt32)(_virtPos >> Dyn.BlockSizeLog);
@@ -371,17 +558,17 @@ STDMETHODIMP CHandler::Read(void *data, UInt32 size, UInt32 *processedSize)
371
558
  }
372
559
  else
373
560
  {
374
- UInt64 newPos = (UInt64)blockSectIndex << 9;
561
+ UInt64 newPos = (UInt64)blockSectIndex << kSectorSize_Log;
375
562
  if (BitMapTag != blockIndex)
376
563
  {
377
- RINOK(ReadPhy(newPos, BitMap, (UInt32)BitMap.GetCapacity()));
564
+ RINOK(ReadPhy(newPos, BitMap, (UInt32)BitMap.Size()));
378
565
  BitMapTag = blockIndex;
379
566
  }
380
- RINOK(ReadPhy(newPos + BitMap.GetCapacity() + offsetInBlock, data, size));
567
+ RINOK(ReadPhy(newPos + BitMap.Size() + offsetInBlock, data, size));
381
568
  for (UInt32 cur = 0; cur < size;)
382
569
  {
383
- UInt32 rem = MyMin(0x200 - (offsetInBlock & 0x1FF), size - cur);
384
- UInt32 bmi = offsetInBlock >> 9;
570
+ const UInt32 rem = MyMin(0x200 - (offsetInBlock & 0x1FF), size - cur);
571
+ UInt32 bmi = offsetInBlock >> kSectorSize_Log;
385
572
  if (((BitMap[bmi >> 3] >> (7 - (bmi & 7))) & 1) == 0)
386
573
  {
387
574
  if (ParentStream)
@@ -401,25 +588,12 @@ STDMETHODIMP CHandler::Read(void *data, UInt32 size, UInt32 *processedSize)
401
588
  cur += rem;
402
589
  }
403
590
  }
404
- if (processedSize != NULL)
591
+ if (processedSize)
405
592
  *processedSize = size;
406
593
  _virtPos += size;
407
594
  return res;
408
595
  }
409
596
 
410
- STDMETHODIMP CHandler::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
411
- {
412
- switch(seekOrigin)
413
- {
414
- case STREAM_SEEK_SET: _virtPos = offset; break;
415
- case STREAM_SEEK_CUR: _virtPos += offset; break;
416
- case STREAM_SEEK_END: _virtPos = Footer.CurrentSize + offset; break;
417
- default: return STG_E_INVALIDFUNCTION;
418
- }
419
- if (newPosition)
420
- *newPosition = _virtPos;
421
- return S_OK;
422
- }
423
597
 
424
598
  enum
425
599
  {
@@ -427,29 +601,30 @@ enum
427
601
  kpidSavedState
428
602
  };
429
603
 
430
- STATPROPSTG kArcProps[] =
604
+ static const CStatProp kArcProps[] =
431
605
  {
432
606
  { NULL, kpidSize, VT_UI8},
607
+ { NULL, kpidOffset, VT_UI8},
433
608
  { NULL, kpidCTime, VT_FILETIME},
434
609
  { NULL, kpidClusterSize, VT_UI8},
435
610
  { NULL, kpidMethod, VT_BSTR},
436
- { L"Parent", kpidParent, VT_BSTR},
611
+ { "Parent", kpidParent, VT_BSTR},
437
612
  { NULL, kpidCreatorApp, VT_BSTR},
438
613
  { NULL, kpidHostOS, VT_BSTR},
439
- { L"Saved State", kpidSavedState, VT_BOOL},
614
+ { "Saved State", kpidSavedState, VT_BOOL},
440
615
  { NULL, kpidId, VT_BSTR}
441
616
  };
442
617
 
443
- STATPROPSTG kProps[] =
618
+ static const Byte kProps[] =
444
619
  {
445
- { NULL, kpidSize, VT_UI8},
446
- { NULL, kpidPackSize, VT_UI8},
447
- { NULL, kpidCTime, VT_FILETIME}
620
+ kpidSize,
621
+ kpidPackSize,
622
+ kpidCTime
448
623
 
449
624
  /*
450
- { NULL, kpidNumCyls, VT_UI4},
451
- { NULL, kpidNumHeads, VT_UI4},
452
- { NULL, kpidSectorsPerTrack, VT_UI4}
625
+ { kpidNumCyls, VT_UI4},
626
+ { kpidNumHeads, VT_UI4},
627
+ { kpidSectorsPerTrack, VT_UI4}
453
628
  */
454
629
  };
455
630
 
@@ -470,11 +645,11 @@ static void VhdTimeToFileTime(UInt32 vhdTime, NCOM::CPropVariant &prop)
470
645
  prop = utc;
471
646
  }
472
647
 
473
- static void StringToAString(char *dest, UInt32 s)
648
+ static void StringToAString(char *dest, UInt32 val)
474
649
  {
475
650
  for (int i = 24; i >= 0; i -= 8)
476
651
  {
477
- Byte b = (Byte)((s >> i) & 0xFF);
652
+ Byte b = (Byte)((val >> i) & 0xFF);
478
653
  if (b < 0x20 || b > 0x7F)
479
654
  break;
480
655
  *dest++ = b;
@@ -496,11 +671,12 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
496
671
  {
497
672
  COM_TRY_BEGIN
498
673
  NCOM::CPropVariant prop;
499
- switch(propID)
674
+ switch (propID)
500
675
  {
501
676
  case kpidMainSubfile: prop = (UInt32)0; break;
502
677
  case kpidCTime: VhdTimeToFileTime(Footer.CTime, prop); break;
503
678
  case kpidClusterSize: if (Footer.ThereIsDynamic()) prop = (UInt32)1 << Dyn.BlockSizeLog; break;
679
+ case kpidShortComment:
504
680
  case kpidMethod:
505
681
  {
506
682
  AString s = Footer.GetTypeString();
@@ -508,9 +684,9 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
508
684
  {
509
685
  s += " -> ";
510
686
  const CHandler *p = this;
511
- while (p != 0 && p->NeedParent())
687
+ while (p && p->NeedParent())
512
688
  p = p->Parent;
513
- if (p == 0)
689
+ if (!p)
514
690
  s += '?';
515
691
  else
516
692
  s += p->Footer.GetTypeString();
@@ -525,7 +701,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
525
701
  AString res = s;
526
702
  res.Trim();
527
703
  ConvertUInt32ToString(Footer.CreatorVersion >> 16, s);
528
- res += ' ';
704
+ res.Add_Space();
529
705
  res += s;
530
706
  res += '.';
531
707
  ConvertUInt32ToString(Footer.CreatorVersion & 0xFFFF, s);
@@ -535,7 +711,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
535
711
  }
536
712
  case kpidHostOS:
537
713
  {
538
- if (Footer.CreatorHostOS == 0x5769326b)
714
+ if (Footer.CreatorHostOS == 0x5769326B)
539
715
  prop = "Windows";
540
716
  else
541
717
  {
@@ -555,151 +731,166 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
555
731
  break;
556
732
  }
557
733
  case kpidSavedState: prop = Footer.SavedState ? true : false; break;
558
- case kpidParent: if (NeedParent()) prop = GetParentName(); break;
734
+ case kpidParent: if (NeedParent()) prop = GetParentSequence(); break;
735
+ case kpidOffset: prop = _startOffset; break;
736
+ case kpidPhySize: prop = _phySize; break;
737
+ /*
738
+ case kpidErrorFlags:
739
+ {
740
+ UInt32 flags = 0;
741
+ if (_unexpectedEnd)
742
+ flags |= kpv_ErrorFlags_UnexpectedEndOfArc;
743
+ if (flags != 0)
744
+ prop = flags;
745
+ break;
746
+ }
747
+ */
748
+ case kpidError: if (!_errorMessage.IsEmpty()) prop = _errorMessage; break;
559
749
  }
560
750
  prop.Detach(value);
561
751
  return S_OK;
562
752
  COM_TRY_END
563
753
  }
564
754
 
565
- HRESULT CHandler::Open2(IInStream *stream, CHandler *child, IArchiveOpenCallback *openArchiveCallback, int level)
755
+
756
+ HRESULT CHandler::Open2(IInStream *stream, CHandler *child, IArchiveOpenCallback *openArchiveCallback, unsigned level)
566
757
  {
567
758
  Close();
568
759
  Stream = stream;
569
- if (level > 32)
760
+ if (level > (1 << 12)) // Maybe we need to increase that limit
570
761
  return S_FALSE;
762
+
571
763
  RINOK(Open3());
764
+
572
765
  if (child && memcmp(child->Dyn.ParentId, Footer.Id, 16) != 0)
573
766
  return S_FALSE;
574
767
  if (Footer.Type != kDiskType_Diff)
575
768
  return S_OK;
576
- CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
577
- if (openArchiveCallback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback) != S_OK)
578
- return S_FALSE;
579
- CMyComPtr<IInStream> nextStream;
580
- HRESULT res = openVolumeCallback->GetStream(Dyn.ParentName, &nextStream);
581
- if (res == S_FALSE)
582
- return S_OK;
583
- RINOK(res);
584
769
 
585
- Parent = new CHandler;
586
- ParentStream = Parent;
587
- return Parent->Open2(nextStream, this, openArchiveCallback, level + 1);
588
- }
770
+ bool useRelative;
771
+ UString name;
772
+
773
+ if (!Dyn.RelativeParentNameFromLocator.IsEmpty())
774
+ {
775
+ useRelative = true;
776
+ name = Dyn.RelativeParentNameFromLocator;
777
+ }
778
+ else
779
+ {
780
+ useRelative = false;
781
+ name = Dyn.ParentName;
782
+ }
783
+
784
+ Dyn.RelativeNameWasUsed = useRelative;
589
785
 
590
- STDMETHODIMP CHandler::Open(IInStream *stream,
591
- const UInt64 * /* maxCheckStartPosition */,
592
- IArchiveOpenCallback * openArchiveCallback)
593
- {
594
- COM_TRY_BEGIN
786
+ CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
787
+ openArchiveCallback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback);
788
+
789
+ if (openVolumeCallback)
595
790
  {
596
- HRESULT res;
597
- try
791
+ CMyComPtr<IInStream> nextStream;
792
+ HRESULT res = openVolumeCallback->GetStream(name, &nextStream);
793
+
794
+ if (res == S_FALSE)
598
795
  {
599
- res = Open2(stream, NULL, openArchiveCallback, 0);
600
- if (res == S_OK)
601
- return S_OK;
796
+ if (useRelative && Dyn.ParentName != Dyn.RelativeParentNameFromLocator)
797
+ {
798
+ res = openVolumeCallback->GetStream(Dyn.ParentName, &nextStream);
799
+ if (res == S_OK)
800
+ Dyn.RelativeNameWasUsed = false;
801
+ }
602
802
  }
603
- catch(...)
803
+
804
+ if (res != S_OK && res != S_FALSE)
805
+ return res;
806
+
807
+ if (res == S_FALSE || !nextStream)
604
808
  {
605
- Close();
606
- throw;
809
+ UString s;
810
+ s.SetFromAscii("Missing volume : ");
811
+ s += name;
812
+ AddErrorMessage(s);
813
+ return S_OK;
814
+ }
815
+
816
+ Parent = new CHandler;
817
+ ParentStream = Parent;
818
+
819
+ res = Parent->Open2(nextStream, this, openArchiveCallback, level + 1);
820
+
821
+ if (res != S_OK)
822
+ {
823
+ Parent = NULL;
824
+ ParentStream.Release();
825
+ if (res == E_ABORT)
826
+ return res;
827
+ if (res != S_FALSE)
828
+ {
829
+ // we must show that error code
830
+ }
607
831
  }
608
- Close();
609
- return res;
610
832
  }
611
- COM_TRY_END
833
+ {
834
+ const CHandler *p = this;
835
+ while (p->NeedParent())
836
+ {
837
+ p = p->Parent;
838
+ if (!p)
839
+ {
840
+ AddErrorMessage(L"Can't open parent VHD file:");
841
+ AddErrorMessage(Dyn.ParentName);
842
+ break;
843
+ }
844
+ }
845
+ }
846
+ return S_OK;
612
847
  }
613
848
 
614
- STDMETHODIMP CHandler::Close()
849
+
850
+ void CHandler::CloseAtError()
615
851
  {
852
+ _phySize = 0;
616
853
  Bat.Clear();
617
854
  NumUsedBlocks = 0;
618
- Parent = 0;
855
+ Parent = NULL;
619
856
  Stream.Release();
620
857
  ParentStream.Release();
621
- return S_OK;
858
+ Dyn.Clear();
859
+ _errorMessage.Empty();
860
+ // _unexpectedEnd = false;
861
+ _imgExt = NULL;
622
862
  }
623
863
 
624
- STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
864
+ STDMETHODIMP CHandler::Close()
625
865
  {
626
- *numItems = 1;
866
+ CloseAtError();
627
867
  return S_OK;
628
868
  }
629
869
 
630
870
  STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value)
631
871
  {
632
872
  COM_TRY_BEGIN
633
- NWindows::NCOM::CPropVariant prop;
873
+ NCOM::CPropVariant prop;
634
874
 
635
- switch(propID)
875
+ switch (propID)
636
876
  {
637
877
  case kpidSize: prop = Footer.CurrentSize; break;
638
878
  case kpidPackSize: prop = GetPackSize(); break;
639
879
  case kpidCTime: VhdTimeToFileTime(Footer.CTime, prop); break;
880
+ case kpidExtension: prop = (_imgExt ? _imgExt : "img"); break;
881
+
640
882
  /*
641
883
  case kpidNumCyls: prop = Footer.NumCyls(); break;
642
884
  case kpidNumHeads: prop = Footer.NumHeads(); break;
643
885
  case kpidSectorsPerTrack: prop = Footer.NumSectorsPerTrack(); break;
644
886
  */
645
887
  }
888
+
646
889
  prop.Detach(value);
647
890
  return S_OK;
648
891
  COM_TRY_END
649
892
  }
650
893
 
651
- STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
652
- Int32 testMode, IArchiveExtractCallback *extractCallback)
653
- {
654
- COM_TRY_BEGIN
655
- if (numItems == 0)
656
- return S_OK;
657
- if (numItems != (UInt32)-1 && (numItems != 1 || indices[0] != 0))
658
- return E_INVALIDARG;
659
-
660
- RINOK(extractCallback->SetTotal(Footer.CurrentSize));
661
- CMyComPtr<ISequentialOutStream> outStream;
662
- Int32 askMode = testMode ?
663
- NExtract::NAskMode::kTest :
664
- NExtract::NAskMode::kExtract;
665
- RINOK(extractCallback->GetStream(0, &outStream, askMode));
666
- if (!testMode && !outStream)
667
- return S_OK;
668
- RINOK(extractCallback->PrepareOperation(askMode));
669
-
670
- NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder();
671
- CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
672
-
673
- CLocalProgress *lps = new CLocalProgress;
674
- CMyComPtr<ICompressProgressInfo> progress = lps;
675
- lps->Init(extractCallback, false);
676
-
677
- int res = NExtract::NOperationResult::kDataError;
678
- CMyComPtr<ISequentialInStream> inStream;
679
- HRESULT hres = GetStream(0, &inStream);
680
- if (hres == S_FALSE)
681
- res = NExtract::NOperationResult::kUnSupportedMethod;
682
- else
683
- {
684
- RINOK(hres);
685
- HRESULT hres = copyCoder->Code(inStream, outStream, NULL, NULL, progress);
686
- if (hres == S_OK)
687
- {
688
- if (copyCoderSpec->TotalSize == Footer.CurrentSize)
689
- res = NExtract::NOperationResult::kOK;
690
- }
691
- else
692
- {
693
- if (hres != S_FALSE)
694
- {
695
- RINOK(hres);
696
- }
697
- }
698
- }
699
- outStream.Release();
700
- return extractCallback->SetOperationResult(res);
701
- COM_TRY_END
702
- }
703
894
 
704
895
  STDMETHODIMP CHandler::GetStream(UInt32 /* index */, ISequentialInStream **stream)
705
896
  {
@@ -715,7 +906,7 @@ STDMETHODIMP CHandler::GetStream(UInt32 /* index */, ISequentialInStream **strea
715
906
  *stream = streamTemp.Detach();
716
907
  return S_OK;
717
908
  }
718
- if (!Footer.ThereIsDynamic() || !IsOK())
909
+ if (!Footer.ThereIsDynamic() || !AreParentsOK())
719
910
  return S_FALSE;
720
911
  CMyComPtr<ISequentialInStream> streamTemp = this;
721
912
  RINOK(InitAndSeek());
@@ -724,11 +915,11 @@ STDMETHODIMP CHandler::GetStream(UInt32 /* index */, ISequentialInStream **strea
724
915
  COM_TRY_END
725
916
  }
726
917
 
727
- static IInArchive *CreateArc() { return new CHandler; }
728
-
729
- static CArcInfo g_ArcInfo =
730
- { L"VHD", L"vhd", L".mbr", 0xDC, { 'c', 'o', 'n', 'e', 'c', 't', 'i', 'x', 0, 0 }, 10, false, CreateArc, 0 };
731
-
732
- REGISTER_ARC(Vhd)
918
+ REGISTER_ARC_I(
919
+ "VHD", "vhd", NULL, 0xDC,
920
+ kSignature,
921
+ 0,
922
+ NArcInfoFlags::kUseGlobalOffset,
923
+ NULL)
733
924
 
734
925
  }}