seven-zip 1.4.1 → 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 +15 -30
  4. data/README.md +16 -3
  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 +42 -19
  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 +266 -219
  733. data/.github/workflows/ci.yml +0 -31
  734. data/ext/C/Types.h +0 -254
  735. data/ext/CPP/7zip/Archive/IArchive.h +0 -234
  736. data/ext/CPP/7zip/IDecl.h +0 -15
  737. data/ext/CPP/7zip/IPassword.h +0 -24
  738. data/ext/CPP/7zip/IProgress.h +0 -33
  739. data/ext/CPP/7zip/IStream.h +0 -58
  740. data/ext/CPP/7zip/PropID.h +0 -76
  741. data/ext/CPP/Common/MyCom.h +0 -225
  742. data/ext/CPP/Common/MyGuidDef.h +0 -54
  743. data/ext/CPP/Common/MyInitGuid.h +0 -22
  744. data/ext/CPP/Common/MyUnknown.h +0 -13
  745. data/ext/CPP/Common/MyWindows.h +0 -204
  746. data/ext/CPP/Common/Types.h +0 -11
  747. data/ext/CPP/Windows/PropVariant.h +0 -56
  748. data/ext/CPP/include_windows/basetyps.h +0 -19
  749. data/ext/CPP/include_windows/tchar.h +0 -89
  750. data/ext/CPP/include_windows/windows.h +0 -194
  751. data/ext/p7zip/Asm/x64/7zCrcT8U.asm +0 -103
  752. data/ext/p7zip/Asm/x86/7zCrcT8U.asm +0 -101
  753. data/ext/p7zip/C/7zCrcT8.c +0 -43
  754. data/ext/p7zip/C/Alloc.back3 +0 -238
  755. data/ext/p7zip/C/Alloc.c.back +0 -243
  756. data/ext/p7zip/C/Alloc.c.back2 +0 -222
  757. data/ext/p7zip/C/LzmaUtil/Lzma86Dec.h +0 -51
  758. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +0 -149
  759. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.h +0 -58
  760. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.cpp +0 -24
  761. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.h +0 -28
  762. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmRegister.cpp +0 -13
  763. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.cpp +0 -239
  764. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.h +0 -28
  765. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.cpp +0 -389
  766. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.h +0 -119
  767. data/ext/p7zip/CPP/7zip/Archive/Com/ComRegister.cpp +0 -13
  768. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +0 -240
  769. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.h +0 -80
  770. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.cpp +0 -239
  771. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.h +0 -88
  772. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +0 -15
  773. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.h +0 -37
  774. data/ext/p7zip/CPP/7zip/Archive/DebHandler.cpp +0 -413
  775. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.cpp +0 -243
  776. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.h +0 -26
  777. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.cpp +0 -480
  778. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.h +0 -154
  779. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsRegister.cpp +0 -13
  780. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.cpp +0 -21
  781. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.cpp +0 -478
  782. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.h +0 -123
  783. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.cpp +0 -55
  784. data/ext/p7zip/CPP/7zip/Archive/Rar/RarRegister.cpp +0 -13
  785. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.cpp +0 -78
  786. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.h +0 -49
  787. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfRegister.cpp +0 -13
  788. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.cpp +0 -36
  789. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItemEx.h +0 -34
  790. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zFM.txt +0 -163
  791. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zG.txt +0 -131
  792. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7za.txt +0 -253
  793. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_ALL.txt +0 -32
  794. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_Format7zFree.txt +0 -290
  795. data/ext/p7zip/CPP/7zip/CMAKE/generate.sh +0 -37
  796. data/ext/p7zip/CPP/7zip/CMAKE/generate_xcode.sh +0 -32
  797. data/ext/p7zip/CPP/7zip/Common/LockedStream.cpp +0 -23
  798. data/ext/p7zip/CPP/7zip/Common/LockedStream.h +0 -38
  799. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.cpp +0 -309
  800. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.h +0 -98
  801. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.cpp +0 -90
  802. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.h +0 -59
  803. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.cpp +0 -19
  804. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.h +0 -44
  805. data/ext/p7zip/CPP/7zip/Compress/DllExports.cpp +0 -39
  806. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +0 -531
  807. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +0 -1018
  808. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +0 -48
  809. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +0 -311
  810. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +0 -20
  811. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/makefile +0 -173
  812. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.cpp +0 -90
  813. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.h +0 -46
  814. data/ext/p7zip/CPP/7zip/Compress/RangeCoder.h +0 -205
  815. data/ext/p7zip/CPP/7zip/Compress/RangeCoderBit.h +0 -114
  816. data/ext/p7zip/CPP/7zip/Crypto/Sha1.cpp +0 -229
  817. data/ext/p7zip/CPP/7zip/Crypto/Sha1.h +0 -68
  818. data/ext/p7zip/CPP/7zip/PREMAKE/generate.sh +0 -18
  819. data/ext/p7zip/CPP/7zip/PREMAKE/premake4.lua +0 -263
  820. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA.pro +0 -228
  821. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA_osx.pro +0 -228
  822. data/ext/p7zip/CPP/7zip/QMAKE/test_emul/test_emul.pro +0 -26
  823. data/ext/p7zip/CPP/7zip/TEST/TestUI/TestUI.cpp +0 -560
  824. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile +0 -33
  825. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.depend +0 -577
  826. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.list +0 -16
  827. data/ext/p7zip/CPP/Common/Buffer.h +0 -77
  828. data/ext/p7zip/CPP/Common/Types.h +0 -11
  829. data/ext/p7zip/CPP/Windows/COM.cpp +0 -37
  830. data/ext/p7zip/CPP/Windows/COM.h +0 -69
  831. data/ext/p7zip/CPP/Windows/Clipboard.cpp +0 -160
  832. data/ext/p7zip/CPP/Windows/Clipboard.h +0 -28
  833. data/ext/p7zip/CPP/Windows/CommonDialog.h +0 -19
  834. data/ext/p7zip/CPP/Windows/Control/ComboBox.h +0 -82
  835. data/ext/p7zip/CPP/Windows/Control/Controls.cpp +0 -515
  836. data/ext/p7zip/CPP/Windows/Control/Dialog.cpp +0 -560
  837. data/ext/p7zip/CPP/Windows/Control/Dialog.h +0 -179
  838. data/ext/p7zip/CPP/Windows/Control/DialogImpl.h +0 -73
  839. data/ext/p7zip/CPP/Windows/Control/Edit.h +0 -24
  840. data/ext/p7zip/CPP/Windows/Control/ListView.h +0 -164
  841. data/ext/p7zip/CPP/Windows/Control/ProgressBar.h +0 -34
  842. data/ext/p7zip/CPP/Windows/Control/Static.h +0 -23
  843. data/ext/p7zip/CPP/Windows/Control/StatusBar.h +0 -56
  844. data/ext/p7zip/CPP/Windows/Control/Window2.cpp +0 -211
  845. data/ext/p7zip/CPP/Windows/Control/Window2.h +0 -111
  846. data/ext/p7zip/CPP/Windows/DLL.cpp +0 -193
  847. data/ext/p7zip/CPP/Windows/DLL.h +0 -48
  848. data/ext/p7zip/CPP/Windows/Error.cpp +0 -58
  849. data/ext/p7zip/CPP/Windows/Error.h +0 -33
  850. data/ext/p7zip/CPP/Windows/Menu.h +0 -4
  851. data/ext/p7zip/CPP/Windows/PropVariantConversions.cpp +0 -142
  852. data/ext/p7zip/CPP/Windows/PropVariantConversions.h +0 -14
  853. data/ext/p7zip/CPP/Windows/Registry.cpp +0 -313
  854. data/ext/p7zip/CPP/Windows/Registry.h +0 -113
  855. data/ext/p7zip/CPP/Windows/ResourceString.h +0 -22
  856. data/ext/p7zip/CPP/Windows/Shell.h +0 -21
  857. data/ext/p7zip/CPP/Windows/Time.cpp +0 -88
  858. data/ext/p7zip/CPP/Windows/Time.h +0 -21
  859. data/ext/p7zip/CPP/Windows/Window.cpp +0 -101
  860. data/ext/p7zip/CPP/Windows/Window.h +0 -43
  861. data/ext/p7zip/CPP/myWindows/initguid.h +0 -4
  862. data/ext/p7zip/CPP/myWindows/makefile +0 -21
  863. data/ext/p7zip/CPP/myWindows/makefile.depend +0 -32
  864. data/ext/p7zip/CPP/myWindows/makefile.list +0 -28
  865. data/ext/p7zip/CPP/myWindows/myAddExeFlag.cpp +0 -20
  866. data/ext/p7zip/CPP/myWindows/myGetTickCount.cpp +0 -8
  867. data/ext/p7zip/CPP/myWindows/mySplitCommandLine.cpp +0 -82
  868. data/ext/p7zip/CPP/myWindows/test_emul.cpp +0 -745
  869. data/ext/p7zip/CPP/myWindows/wine_GetXXXDefaultLangID.cpp +0 -741
  870. data/ext/p7zip/DOCS/MANUAL/switches/charset.htm +0 -49
  871. data/ext/p7zip/DOCS/Methods.txt +0 -152
  872. data/ext/p7zip/DOCS/lzma.txt +0 -598
  873. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/ChangeLog +0 -41
  874. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme +0 -21
  875. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme.u7z +0 -30
  876. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/u7z +0 -133
  877. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/README +0 -21
  878. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/check.sh +0 -117
  879. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/files.tar +0 -0
  880. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 +0 -33
  881. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/p7zip +0 -144
  882. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-shared +0 -14
  883. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-static +0 -10
  884. data/ext/p7zip/integration_context_menu.txt +0 -51
  885. data/ext/p7zip/makefile.rules +0 -661
  886. /data/ext/p7zip/{DOCS → DOC}/7zFormat.txt +0 -0
  887. /data/ext/p7zip/{DOCS → DOC}/unRarLicense.txt +0 -0
@@ -4,11 +4,11 @@
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"
7
+ #include "../../Common/ComTry.h"
8
+ #include "../../Common/IntToString.h"
9
+ #include "../../Common/MyBuffer.h"
10
10
 
11
- #include "Windows/PropVariantUtils.h"
11
+ #include "../../Windows/PropVariantUtils.h"
12
12
 
13
13
  #include "../Common/LimitedStreams.h"
14
14
  #include "../Common/ProgressUtils.h"
@@ -17,22 +17,44 @@
17
17
 
18
18
  #include "../Compress/CopyCoder.h"
19
19
 
20
- static UInt16 Get16(const Byte *p, int be) { if (be) return GetBe16(p); return GetUi16(p); }
21
- static UInt32 Get32(const Byte *p, int be) { if (be) return GetBe32(p); return GetUi32(p); }
22
- static UInt64 Get64(const Byte *p, int be) { if (be) return GetBe64(p); return GetUi64(p); }
23
-
24
20
  using namespace NWindows;
25
21
 
22
+ static UInt16 Get16(const Byte *p, bool be) { if (be) return GetBe16(p); return GetUi16(p); }
23
+ static UInt32 Get32(const Byte *p, bool be) { if (be) return GetBe32(p); return GetUi32(p); }
24
+ static UInt64 Get64(const Byte *p, bool be) { if (be) return GetBe64(p); return GetUi64(p); }
25
+
26
+ #define G16(offs, v) v = Get16(p + (offs), be)
27
+ #define G32(offs, v) v = Get32(p + (offs), be)
28
+ #define G64(offs, v) v = Get64(p + (offs), be)
29
+
26
30
  namespace NArchive {
27
31
  namespace NElf {
28
32
 
33
+ /*
34
+ ELF Structure for most files (real order can be different):
35
+ Header
36
+ Program (segment) header table (used at runtime)
37
+ Segment1 (Section ... Section)
38
+ Segment2
39
+ ...
40
+ SegmentN
41
+ Section header table (the data for linking and relocation)
42
+ */
43
+
29
44
  #define ELF_CLASS_32 1
30
45
  #define ELF_CLASS_64 2
31
46
 
32
47
  #define ELF_DATA_2LSB 1
33
48
  #define ELF_DATA_2MSB 2
34
49
 
35
- #define NUM_SCAN_SECTIONS_MAX (1 << 6)
50
+ static const UInt32 kHeaderSize32 = 0x34;
51
+ static const UInt32 kHeaderSize64 = 0x40;
52
+
53
+ static const UInt32 kSegmentSize32 = 0x20;
54
+ static const UInt32 kSegmentSize64 = 0x38;
55
+
56
+ static const UInt32 kSectionSize32 = 0x28;
57
+ static const UInt32 kSectionSize64 = 0x40;
36
58
 
37
59
  struct CHeader
38
60
  {
@@ -49,37 +71,30 @@ struct CHeader
49
71
  UInt64 ProgOffset;
50
72
  UInt64 SectOffset;
51
73
  UInt32 Flags;
52
- UInt16 ElfHeaderSize;
74
+ UInt16 HeaderSize;
53
75
  UInt16 SegmentEntrySize;
54
76
  UInt16 NumSegments;
55
- UInt16 SectEntrySize;
77
+ UInt16 SectionEntrySize;
56
78
  UInt16 NumSections;
57
- // UInt16 SectNameStringTableIndex;
79
+ UInt16 NamesSectIndex;
58
80
 
59
81
  bool Parse(const Byte *buf);
60
82
 
61
- bool CheckSegmentEntrySize() const
62
- {
63
- return (Mode64 && SegmentEntrySize == 0x38) || (!Mode64 && SegmentEntrySize == 0x20);
64
- };
65
-
66
- UInt64 GetHeadersSize() const
67
- { return ElfHeaderSize +
68
- (UInt64)SegmentEntrySize * NumSegments +
69
- (UInt64)SectEntrySize * NumSections; }
70
-
83
+ UInt64 GetHeadersSize() const { return (UInt64)HeaderSize +
84
+ (UInt32)NumSegments * SegmentEntrySize +
85
+ (UInt32)NumSections * SectionEntrySize; }
71
86
  };
72
87
 
73
88
  bool CHeader::Parse(const Byte *p)
74
89
  {
75
- switch(p[4])
90
+ switch (p[4])
76
91
  {
77
92
  case ELF_CLASS_32: Mode64 = false; break;
78
93
  case ELF_CLASS_64: Mode64 = true; break;
79
94
  default: return false;
80
95
  }
81
96
  bool be;
82
- switch(p[5])
97
+ switch (p[5])
83
98
  {
84
99
  case ELF_DATA_2LSB: be = false; break;
85
100
  case ELF_DATA_2MSB: be = true; break;
@@ -94,36 +109,72 @@ bool CHeader::Parse(const Byte *p)
94
109
  if (p[i] != 0)
95
110
  return false;
96
111
 
97
- Type = Get16(p + 0x10, be);
98
- Machine = Get16(p + 0x12, be);
112
+ G16(0x10, Type);
113
+ G16(0x12, Machine);
99
114
  if (Get32(p + 0x14, be) != 1) // Version
100
115
  return false;
101
116
 
102
117
  if (Mode64)
103
118
  {
104
- // EntryVa = Get64(p + 0x18, be);
105
- ProgOffset = Get64(p + 0x20, be);
106
- SectOffset = Get64(p + 0x28, be);
119
+ // G64(0x18, EntryVa);
120
+ G64(0x20, ProgOffset);
121
+ G64(0x28, SectOffset);
107
122
  p += 0x30;
108
123
  }
109
124
  else
110
125
  {
111
- // EntryVa = Get32(p + 0x18, be);
112
- ProgOffset = Get32(p + 0x1C, be);
113
- SectOffset = Get32(p + 0x20, be);
126
+ // G32(0x18, EntryVa);
127
+ G32(0x1C, ProgOffset);
128
+ G32(0x20, SectOffset);
114
129
  p += 0x24;
115
130
  }
116
131
 
117
- Flags = Get32(p + 0, be);
118
- ElfHeaderSize = Get16(p + 4, be);
119
- SegmentEntrySize = Get16(p + 6, be);
120
- NumSegments = Get16(p + 8, be);
121
- SectEntrySize = Get16(p + 10, be);
122
- NumSections = Get16(p + 12, be);
123
- // SectNameStringTableIndex = Get16(p + 14, be);
124
- return CheckSegmentEntrySize();
132
+ G32(0, Flags);
133
+ G16(4, HeaderSize);
134
+ if (HeaderSize != (Mode64 ? kHeaderSize64 : kHeaderSize32))
135
+ return false;
136
+
137
+ G16(6, SegmentEntrySize);
138
+ G16(8, NumSegments);
139
+ G16(10, SectionEntrySize);
140
+ G16(12, NumSections);
141
+ G16(14, NamesSectIndex);
142
+
143
+ if (ProgOffset < HeaderSize && (ProgOffset != 0 || NumSegments != 0)) return false;
144
+ if (SectOffset < HeaderSize && (SectOffset != 0 || NumSections != 0)) return false;
145
+
146
+ if (SegmentEntrySize == 0) { if (NumSegments != 0) return false; }
147
+ else if (SegmentEntrySize != (Mode64 ? kSegmentSize64 : kSegmentSize32)) return false;
148
+
149
+ if (SectionEntrySize == 0) { if (NumSections != 0) return false; }
150
+ else if (SectionEntrySize != (Mode64 ? kSectionSize64 : kSectionSize32)) return false;
151
+
152
+ return true;
125
153
  }
126
154
 
155
+ // The program header table itself.
156
+
157
+ #define PT_PHDR 6
158
+
159
+ static const char *g_SegnmentTypes[] =
160
+ {
161
+ "Unused",
162
+ "Loadable segment",
163
+ "Dynamic linking tables",
164
+ "Program interpreter path name",
165
+ "Note section",
166
+ "SHLIB",
167
+ "Program header table",
168
+ "TLS"
169
+ };
170
+
171
+ static const CUInt32PCharPair g_SegmentFlags[] =
172
+ {
173
+ { 0, "Execute" },
174
+ { 1, "Write" },
175
+ { 2, "Read" }
176
+ };
177
+
127
178
  struct CSegment
128
179
  {
129
180
  UInt32 Type;
@@ -131,14 +182,14 @@ struct CSegment
131
182
  UInt64 Offset;
132
183
  UInt64 Va;
133
184
  // UInt64 Pa;
134
- UInt64 PSize;
185
+ UInt64 Size;
135
186
  UInt64 VSize;
136
- // UInt64 Align;
187
+ UInt64 Align;
137
188
 
138
189
  void UpdateTotalSize(UInt64 &totalSize)
139
190
  {
140
- UInt64 t = Offset + PSize;
141
- if (t > totalSize)
191
+ UInt64 t = Offset + Size;
192
+ if (totalSize < t)
142
193
  totalSize = t;
143
194
  }
144
195
  void Parse(const Byte *p, bool mode64, bool be);
@@ -146,30 +197,169 @@ struct CSegment
146
197
 
147
198
  void CSegment::Parse(const Byte *p, bool mode64, bool be)
148
199
  {
149
- Type = Get32(p, be);
200
+ G32(0, Type);
201
+ if (mode64)
202
+ {
203
+ G32(4, Flags);
204
+ G64(8, Offset);
205
+ G64(0x10, Va);
206
+ // G64(0x18, Pa);
207
+ G64(0x20, Size);
208
+ G64(0x28, VSize);
209
+ G64(0x30, Align);
210
+ }
211
+ else
212
+ {
213
+ G32(4, Offset);
214
+ G32(8, Va);
215
+ // G32(0x0C, Pa);
216
+ G32(0x10, Size);
217
+ G32(0x14, VSize);
218
+ G32(0x18, Flags);
219
+ G32(0x1C, Align);
220
+ }
221
+ }
222
+
223
+ // Section_index = 0 means NO section
224
+
225
+ #define SHN_UNDEF 0
226
+
227
+ // Section types
228
+
229
+ #define SHT_NULL 0
230
+ #define SHT_PROGBITS 1
231
+ #define SHT_SYMTAB 2
232
+ #define SHT_STRTAB 3
233
+ #define SHT_RELA 4
234
+ #define SHT_HASH 5
235
+ #define SHT_DYNAMIC 6
236
+ #define SHT_NOTE 7
237
+ #define SHT_NOBITS 8
238
+ #define SHT_REL 9
239
+ #define SHT_SHLIB 10
240
+ #define SHT_DYNSYM 11
241
+ #define SHT_UNKNOWN12 12
242
+ #define SHT_UNKNOWN13 13
243
+ #define SHT_INIT_ARRAY 14
244
+ #define SHT_FINI_ARRAY 15
245
+ #define SHT_PREINIT_ARRAY 16
246
+ #define SHT_GROUP 17
247
+ #define SHT_SYMTAB_SHNDX 18
248
+
249
+
250
+ static const CUInt32PCharPair g_SectTypes[] =
251
+ {
252
+ { 0, "NULL" },
253
+ { 1, "PROGBITS" },
254
+ { 2, "SYMTAB" },
255
+ { 3, "STRTAB" },
256
+ { 4, "RELA" },
257
+ { 5, "HASH" },
258
+ { 6, "DYNAMIC" },
259
+ { 7, "NOTE" },
260
+ { 8, "NOBITS" },
261
+ { 9, "REL" },
262
+ { 10, "SHLIB" },
263
+ { 11, "DYNSYM" },
264
+ { 12, "UNKNOWN12" },
265
+ { 13, "UNKNOWN13" },
266
+ { 14, "INIT_ARRAY" },
267
+ { 15, "FINI_ARRAY" },
268
+ { 16, "PREINIT_ARRAY" },
269
+ { 17, "GROUP" },
270
+ { 18, "SYMTAB_SHNDX" },
271
+ { 0x6ffffff5, "GNU_ATTRIBUTES" },
272
+ { 0x6ffffff6, "GNU_HASH" },
273
+ { 0x6ffffffd, "GNU_verdef" },
274
+ { 0x6ffffffe, "GNU_verneed" },
275
+ { 0x6fffffff, "GNU_versym" },
276
+ // { 0x70000001, "X86_64_UNWIND" },
277
+ { 0x70000001, "ARM_EXIDX" },
278
+ { 0x70000002, "ARM_PREEMPTMAP" },
279
+ { 0x70000003, "ARM_ATTRIBUTES" },
280
+ { 0x70000004, "ARM_DEBUGOVERLAY" },
281
+ { 0x70000005, "ARM_OVERLAYSECTION" }
282
+ };
283
+
284
+ static const CUInt32PCharPair g_SectionFlags[] =
285
+ {
286
+ { 0, "WRITE" },
287
+ { 1, "ALLOC" },
288
+ { 2, "EXECINSTR" },
289
+
290
+ { 4, "MERGE" },
291
+ { 5, "STRINGS" },
292
+ { 6, "INFO_LINK" },
293
+ { 7, "LINK_ORDER" },
294
+ { 8, "OS_NONCONFORMING" },
295
+ { 9, "GROUP" },
296
+ { 10, "TLS" },
297
+ { 11, "CP_SECTION" },
298
+ { 12, "DP_SECTION" },
299
+ { 13, "XCORE_SHF_CP_SECTION" },
300
+ { 28, "64_LARGE" },
301
+ };
302
+
303
+ struct CSection
304
+ {
305
+ UInt32 Name;
306
+ UInt32 Type;
307
+ UInt64 Flags;
308
+ UInt64 Va;
309
+ UInt64 Offset;
310
+ UInt64 VSize;
311
+ UInt32 Link;
312
+ UInt32 Info;
313
+ UInt64 AddrAlign;
314
+ UInt64 EntSize;
315
+
316
+ UInt64 GetSize() const { return Type == SHT_NOBITS ? 0 : VSize; }
317
+
318
+ void UpdateTotalSize(UInt64 &totalSize)
319
+ {
320
+ UInt64 t = Offset + GetSize();
321
+ if (totalSize < t)
322
+ totalSize = t;
323
+ }
324
+ bool Parse(const Byte *p, bool mode64, bool be);
325
+ };
326
+
327
+ bool CSection::Parse(const Byte *p, bool mode64, bool be)
328
+ {
329
+ G32(0, Name);
330
+ G32(4, Type);
150
331
  if (mode64)
151
332
  {
152
- Flags = Get32(p + 4, be);
153
- Offset = Get64(p + 8, be);
154
- Va = Get64(p + 0x10, be);
155
- // Pa = Get64(p + 0x18, be);
156
- PSize = Get64(p + 0x20, be);
157
- VSize = Get64(p + 0x28, be);
158
- // Align = Get64(p + 0x30, be);
333
+ G64(0x08, Flags);
334
+ G64(0x10, Va);
335
+ G64(0x18, Offset);
336
+ G64(0x20, VSize);
337
+ G32(0x28, Link);
338
+ G32(0x2C, Info);
339
+ G64(0x30, AddrAlign);
340
+ G64(0x38, EntSize);
159
341
  }
160
342
  else
161
343
  {
162
- Offset = Get32(p + 4, be);
163
- Va = Get32(p + 8, be);
164
- // Pa = Get32(p + 12, be);
165
- PSize = Get32(p + 16, be);
166
- VSize = Get32(p + 20, be);
167
- Flags = Get32(p + 24, be);
168
- // Align = Get32(p + 28, be);
344
+ G32(0x08, Flags);
345
+ G32(0x0C, Va);
346
+ G32(0x10, Offset);
347
+ G32(0x14, VSize);
348
+ G32(0x18, Link);
349
+ G32(0x1C, Info);
350
+ G32(0x20, AddrAlign);
351
+ G32(0x24, EntSize);
169
352
  }
353
+ if (EntSize >= ((UInt32)1 << 31))
354
+ return false;
355
+ if (EntSize >= ((UInt32)1 << 10) &&
356
+ EntSize >= VSize &&
357
+ VSize != 0)
358
+ return false;
359
+ return true;
170
360
  }
171
361
 
172
- static const CUInt32PCharPair g_MachinePairs[] =
362
+ static const CUInt32PCharPair g_Machines[] =
173
363
  {
174
364
  { 0, "None" },
175
365
  { 1, "AT&T WE 32100" },
@@ -192,6 +382,7 @@ static const CUInt32PCharPair g_MachinePairs[] =
192
382
  { 20, "PowerPC" },
193
383
  { 21, "PowerPC 64-bit" },
194
384
  { 22, "IBM S/390" },
385
+ { 23, "SPU" },
195
386
 
196
387
  { 36, "NEX v800" },
197
388
  { 37, "Fujitsu FR20" },
@@ -222,6 +413,7 @@ static const CUInt32PCharPair g_MachinePairs[] =
222
413
  { 62, "AMD64" },
223
414
  { 63, "Sony DSP" },
224
415
 
416
+
225
417
  { 66, "Siemens FX66" },
226
418
  { 67, "ST9+" },
227
419
  { 68, "ST7" },
@@ -251,15 +443,99 @@ static const CUInt32PCharPair g_MachinePairs[] =
251
443
  { 92, "OpenRISC" },
252
444
  { 93, "ARC Tangent-A5" },
253
445
  { 94, "Tensilica Xtensa" },
254
- { 0x9026, "Alpha" }
446
+ { 95, "Alphamosaic VideoCore" },
447
+ { 96, "Thompson MM GPP" },
448
+ { 97, "National Semiconductor 32K" },
449
+ { 98, "Tenor Network TPC" },
450
+ { 99, "Trebia SNP 1000" },
451
+ { 100, "ST200" },
452
+ { 101, "Ubicom IP2xxx" },
453
+ { 102, "MAX" },
454
+ { 103, "NS CompactRISC" },
455
+ { 104, "Fujitsu F2MC16" },
456
+ { 105, "TI msp430" },
457
+ { 106, "Blackfin (DSP)" },
458
+ { 107, "SE S1C33" },
459
+ { 108, "Sharp embedded" },
460
+ { 109, "Arca RISC" },
461
+ { 110, "Unicore" },
462
+ { 111, "eXcess" },
463
+ { 112, "DXP" },
464
+ { 113, "Altera Nios II" },
465
+ { 114, "NS CRX" },
466
+ { 115, "Motorola XGATE" },
467
+ { 116, "Infineon C16x/XC16x" },
468
+ { 117, "Renesas M16C" },
469
+ { 118, "Microchip Technology dsPIC30F" },
470
+ { 119, "Freescale CE" },
471
+ { 120, "Renesas M32C" },
472
+
473
+ { 131, "Altium TSK3000" },
474
+ { 132, "Freescale RS08" },
475
+ { 133, "Analog Devices SHARC" },
476
+ { 134, "Cyan Technology eCOG2" },
477
+ { 135, "Sunplus S+core7 RISC" },
478
+ { 136, "NJR 24-bit DSP" },
479
+ { 137, "Broadcom VideoCore III" },
480
+ { 138, "Lattice FPGA" },
481
+ { 139, "SE C17" },
482
+ { 140, "TI TMS320C6000" },
483
+ { 141, "TI TMS320C2000" },
484
+ { 142, "TI TMS320C55x" },
485
+
486
+ { 160, "STM 64bit VLIW Data Signal" },
487
+ { 161, "Cypress M8C" },
488
+ { 162, "Renesas R32C" },
489
+ { 163, "NXP TriMedia" },
490
+ { 164, "Qualcomm Hexagon" },
491
+ { 165, "Intel 8051" },
492
+ { 166, "STMicroelectronics STxP7x" },
493
+ { 167, "Andes" },
494
+ { 168, "Cyan Technology eCOG1X" },
495
+ { 169, "Dallas Semiconductor MAXQ30" },
496
+ { 170, "NJR 16-bit DSP" },
497
+ { 171, "M2000" },
498
+ { 172, "Cray NV2" },
499
+ { 173, "Renesas RX" },
500
+ { 174, "Imagination Technologies META" },
501
+ { 175, "MCST Elbrus" },
502
+ { 176, "Cyan Technology eCOG16" },
503
+ { 177, "National Semiconductor CR16" },
504
+ { 178, "Freescale ETPUnit" },
505
+ { 179, "Infineon SLE9X" },
506
+ { 180, "Intel L10M" },
507
+ { 181, "Intel K10M" },
508
+
509
+ { 183, "ARM64" },
510
+
511
+ { 185, "Atmel AVR32" },
512
+ { 186, "STM8" },
513
+ { 187, "Tilera TILE64" },
514
+ { 188, "Tilera TILEPro" },
515
+ { 189, "Xilinx MicroBlaze" },
516
+ { 190, "NVIDIA CUDA" },
517
+ { 191, "Tilera TILE-Gx" },
518
+ { 192, "CloudShield" },
519
+ { 193, "KIPO-KAIST Core-A 1st" },
520
+ { 194, "KIPO-KAIST Core-A 2nd" },
521
+ { 195, "Synopsys ARCompact V2" },
522
+ { 196, "Open8" },
523
+ { 197, "Renesas RL78" },
524
+ { 198, "Broadcom VideoCore V" },
525
+ { 199, "Renesas 78KOR" },
526
+ { 200, "Freescale 56800EX" },
527
+
528
+ { 47787, "Xilinx MicroBlaze" },
529
+ // { 0x9026, "Alpha" }
255
530
  };
256
531
 
257
- static const CUInt32PCharPair g_AbiOS[] =
532
+ static const CUInt32PCharPair g_OS[] =
258
533
  {
259
534
  { 0, "None" },
260
535
  { 1, "HP-UX" },
261
536
  { 2, "NetBSD" },
262
537
  { 3, "Linux" },
538
+ { 4, "Hurd" },
263
539
 
264
540
  { 6, "Solaris" },
265
541
  { 7, "AIX" },
@@ -271,16 +547,18 @@ static const CUInt32PCharPair g_AbiOS[] =
271
547
  { 13, "OpenVMS" },
272
548
  { 14, "HP NSK" },
273
549
  { 15, "AROS" },
550
+ { 16, "FenixOS" },
551
+ { 64, "Bare-metal TMS320C6000" },
552
+ { 65, "Linux TMS320C6000" },
274
553
  { 97, "ARM" },
275
554
  { 255, "Standalone" }
276
555
  };
277
556
 
278
- static const CUInt32PCharPair g_SegmentFlags[] =
279
- {
280
- { 0, "Execute" },
281
- { 1, "Write" },
282
- { 2, "Read" }
283
- };
557
+ #define ET_NONE 0
558
+ #define ET_REL 1
559
+ #define ET_EXEC 2
560
+ #define ET_DYN 3
561
+ #define ET_CORE 4
284
562
 
285
563
  static const char *g_Types[] =
286
564
  {
@@ -291,101 +569,119 @@ static const char *g_Types[] =
291
569
  "Core file"
292
570
  };
293
571
 
294
- static const char *g_SegnmentTypes[] =
295
- {
296
- "Unused",
297
- "Loadable segment",
298
- "Dynamic linking tables",
299
- "Program interpreter path name",
300
- "Note section",
301
- "SHLIB",
302
- "Program header table",
303
- "TLS"
304
- };
305
-
306
572
  class CHandler:
307
573
  public IInArchive,
574
+ public IArchiveAllowTail,
308
575
  public CMyUnknownImp
309
576
  {
577
+ CRecordVector<CSegment> _segments;
578
+ CRecordVector<CSection> _sections;
579
+ CByteBuffer _namesData;
310
580
  CMyComPtr<IInStream> _inStream;
311
- CObjectVector<CSegment> _sections;
312
- UInt32 _peOffset;
313
- CHeader _header;
314
581
  UInt64 _totalSize;
582
+ CHeader _header;
583
+ bool _headersError;
584
+ bool _allowTail;
585
+
586
+ void GetSectionName(UInt32 index, NCOM::CPropVariant &prop, bool showNULL) const;
315
587
  HRESULT Open2(IInStream *stream);
316
- bool Parse(const Byte *buf, UInt32 size);
317
588
  public:
318
- MY_UNKNOWN_IMP1(IInArchive)
589
+ MY_UNKNOWN_IMP2(IInArchive, IArchiveAllowTail)
319
590
  INTERFACE_IInArchive(;)
320
- };
591
+ STDMETHOD(AllowTail)(Int32 allowTail);
321
592
 
322
- #define ELF_PT_PHDR 6
593
+ CHandler(): _allowTail(false) {}
594
+ };
323
595
 
324
- bool CHandler::Parse(const Byte *buf, UInt32 size)
596
+ void CHandler::GetSectionName(UInt32 index, NCOM::CPropVariant &prop, bool showNULL) const
325
597
  {
326
- if (size < 64)
327
- return false;
328
- if (!_header.Parse(buf))
329
- return false;
330
- if (_header.ProgOffset > size ||
331
- _header.ProgOffset + (UInt64)_header.SegmentEntrySize * _header.NumSegments > size ||
332
- _header.NumSegments > NUM_SCAN_SECTIONS_MAX)
333
- return false;
334
- const Byte *p = buf + _header.ProgOffset;
335
- _totalSize = _header.ProgOffset;
336
-
337
- for (int i = 0; i < _header.NumSegments; i++, p += _header.SegmentEntrySize)
598
+ if (index >= _sections.Size())
599
+ return;
600
+ const CSection &section = _sections[index];
601
+ UInt32 offset = section.Name;
602
+ if (index == SHN_UNDEF /* && section.Type == SHT_NULL && offset == 0 */)
338
603
  {
339
- CSegment sect;
340
- sect.Parse(p, _header.Mode64, _header.Be);
341
- sect.UpdateTotalSize(_totalSize);
342
- if (sect.Type != ELF_PT_PHDR)
343
- _sections.Add(sect);
604
+ if (showNULL)
605
+ prop = "NULL";
606
+ return;
344
607
  }
345
- UInt64 total2 = _header.SectOffset + (UInt64)_header.SectEntrySize * _header.NumSections;
346
- if (total2 > _totalSize)
347
- _totalSize = total2;
348
- return true;
608
+ const Byte *p = _namesData;
609
+ size_t size = _namesData.Size();
610
+ for (size_t i = offset; i < size; i++)
611
+ if (p[i] == 0)
612
+ {
613
+ prop = (const char *)(p + offset);
614
+ return;
615
+ }
349
616
  }
350
617
 
351
- STATPROPSTG kArcProps[] =
618
+ static const Byte kArcProps[] =
619
+ {
620
+ kpidCpu,
621
+ kpidBit64,
622
+ kpidBigEndian,
623
+ kpidHostOS,
624
+ kpidCharacts,
625
+ kpidHeadersSize,
626
+ kpidName
627
+ };
628
+
629
+ enum
352
630
  {
353
- { NULL, kpidCpu, VT_BSTR},
354
- { NULL, kpidBit64, VT_BOOL},
355
- { NULL, kpidBigEndian, VT_BOOL},
356
- { NULL, kpidHostOS, VT_BSTR},
357
- { NULL, kpidCharacts, VT_BSTR},
358
- { NULL, kpidPhySize, VT_UI8},
359
- { NULL, kpidHeadersSize, VT_UI8}
360
- };
361
-
362
- STATPROPSTG kProps[] =
631
+ kpidLinkSection = kpidUserDefined,
632
+ kpidInfoSection
633
+ };
634
+
635
+ static const CStatProp kProps[] =
363
636
  {
364
- { NULL, kpidPath, VT_BSTR},
365
- { NULL, kpidSize, VT_UI8},
366
- { NULL, kpidPackSize, VT_UI8},
367
- { NULL, kpidType, VT_BSTR},
368
- { NULL, kpidCharacts, VT_BSTR},
369
- { NULL, kpidOffset, VT_UI8},
370
- { NULL, kpidVa, VT_UI8}
637
+ { NULL, kpidPath, VT_BSTR },
638
+ { NULL, kpidSize, VT_UI8 },
639
+ { NULL, kpidVirtualSize, VT_UI8 },
640
+ { NULL, kpidOffset, VT_UI8 },
641
+ { NULL, kpidVa, VT_UI8 },
642
+ { NULL, kpidType, VT_BSTR },
643
+ { NULL, kpidCharacts, VT_BSTR }
644
+ , { "Link Section", kpidLinkSection, VT_BSTR}
645
+ , { "Info Section", kpidInfoSection, VT_BSTR}
371
646
  };
372
647
 
373
- IMP_IInArchive_Props
648
+ IMP_IInArchive_Props_WITH_NAME
374
649
  IMP_IInArchive_ArcProps
375
650
 
376
651
  STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
377
652
  {
378
653
  COM_TRY_BEGIN
379
654
  NCOM::CPropVariant prop;
380
- switch(propID)
655
+ switch (propID)
381
656
  {
382
- case kpidPhySize: prop = _totalSize; break;
383
- case kpidHeadersSize: prop = _header.GetHeadersSize(); break;
384
- case kpidBit64: if (_header.Mode64) prop = _header.Mode64; break;
385
- case kpidBigEndian: if (_header.Be) prop = _header.Be; break;
386
- case kpidCpu: PAIR_TO_PROP(g_MachinePairs, _header.Machine, prop); break;
387
- case kpidHostOS: PAIR_TO_PROP(g_AbiOS, _header.Os, prop); break;
388
- case kpidCharacts: TYPE_TO_PROP(g_Types, _header.Type, prop); break;
657
+ case kpidPhySize: prop = _totalSize; break;
658
+ case kpidHeadersSize: prop = _header.GetHeadersSize(); break;
659
+ case kpidBit64: if (_header.Mode64) prop = _header.Mode64; break;
660
+ case kpidBigEndian: if (_header.Be) prop = _header.Be; break;
661
+ case kpidShortComment:
662
+ case kpidCpu: PAIR_TO_PROP(g_Machines, _header.Machine, prop); break;
663
+ case kpidHostOS: PAIR_TO_PROP(g_OS, _header.Os, prop); break;
664
+ case kpidCharacts: TYPE_TO_PROP(g_Types, _header.Type, prop); break;
665
+ case kpidExtension:
666
+ {
667
+ const char *s = NULL;
668
+ if (_header.Type == ET_DYN)
669
+ s = "so";
670
+ else if (_header.Type == ET_REL)
671
+ s = "o";
672
+ if (s)
673
+ prop = s;
674
+ break;
675
+ }
676
+ // case kpidIsSelfExe: prop = (_header.Type != ET_DYN) && (_header.Type == ET_REL); break;
677
+ case kpidErrorFlags:
678
+ {
679
+ UInt32 flags = 0;
680
+ if (_headersError) flags |= kpv_ErrorFlags_HeadersError;
681
+ if (flags != 0)
682
+ prop = flags;
683
+ break;
684
+ }
389
685
  }
390
686
  prop.Detach(value);
391
687
  return S_OK;
@@ -396,22 +692,45 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
396
692
  {
397
693
  COM_TRY_BEGIN
398
694
  NCOM::CPropVariant prop;
399
- const CSegment &item = _sections[index];
400
- switch(propID)
695
+ if (index < _segments.Size())
401
696
  {
402
- case kpidPath:
697
+ const CSegment &item = _segments[index];
698
+ switch (propID)
403
699
  {
404
- wchar_t sz[32];
405
- ConvertUInt64ToString(index, sz);
406
- prop = sz;
407
- break;
700
+ case kpidPath:
701
+ {
702
+ char sz[16];
703
+ ConvertUInt32ToString(index, sz);
704
+ prop = sz;
705
+ break;
706
+ }
707
+ case kpidOffset: prop = item.Offset; break;
708
+ case kpidVa: prop = item.Va; break;
709
+ case kpidSize:
710
+ case kpidPackSize: prop = (UInt64)item.Size; break;
711
+ case kpidVirtualSize: prop = (UInt64)item.VSize; break;
712
+ case kpidType: TYPE_TO_PROP(g_SegnmentTypes, item.Type, prop); break;
713
+ case kpidCharacts: FLAGS_TO_PROP(g_SegmentFlags, item.Flags, prop); break;
714
+
715
+ }
716
+ }
717
+ else
718
+ {
719
+ index -= _segments.Size();
720
+ const CSection &item = _sections[index];
721
+ switch (propID)
722
+ {
723
+ case kpidPath: GetSectionName(index, prop, true); break;
724
+ case kpidOffset: prop = item.Offset; break;
725
+ case kpidVa: prop = item.Va; break;
726
+ case kpidSize:
727
+ case kpidPackSize: prop = (UInt64)(item.Type == SHT_NOBITS ? 0 : item.VSize); break;
728
+ case kpidVirtualSize: prop = item.GetSize(); break;
729
+ case kpidType: PAIR_TO_PROP(g_SectTypes, item.Type, prop); break;
730
+ case kpidCharacts: FLAGS_TO_PROP(g_SectionFlags, (UInt32)item.Flags, prop); break;
731
+ case kpidLinkSection: GetSectionName(item.Link, prop, false); break;
732
+ case kpidInfoSection: GetSectionName(item.Info, prop, false); break;
408
733
  }
409
- case kpidSize: prop = (UInt64)item.VSize; break;
410
- case kpidPackSize: prop = (UInt64)item.PSize; break;
411
- case kpidOffset: prop = item.Offset; break;
412
- case kpidVa: prop = item.Va; break;
413
- case kpidType: TYPE_TO_PROP(g_SegnmentTypes, item.Type, prop); break;
414
- case kpidCharacts: FLAGS_TO_PROP(g_SegmentFlags, item.Flags, prop); break;
415
734
  }
416
735
  prop.Detach(value);
417
736
  return S_OK;
@@ -420,25 +739,118 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val
420
739
 
421
740
  HRESULT CHandler::Open2(IInStream *stream)
422
741
  {
423
- const UInt32 kBufSize = 1 << 18;
424
- const UInt32 kSigSize = 4;
425
-
426
- CByteBuffer buffer;
427
- buffer.SetCapacity(kBufSize);
428
- Byte *buf = buffer;
429
-
430
- size_t processed = kSigSize;
431
- RINOK(ReadStream_FALSE(stream, buf, processed));
432
- if (buf[0] != 0x7F || buf[1] != 'E' || buf[2] != 'L' || buf[3] != 'F')
742
+ const UInt32 kStartSize = kHeaderSize64;
743
+ Byte h[kStartSize];
744
+ RINOK(ReadStream_FALSE(stream, h, kStartSize));
745
+ if (h[0] != 0x7F || h[1] != 'E' || h[2] != 'L' || h[3] != 'F')
433
746
  return S_FALSE;
434
- processed = kBufSize - kSigSize;
435
- RINOK(ReadStream(stream, buf + kSigSize, &processed));
436
- processed += kSigSize;
437
- if (!Parse(buf, (UInt32)processed))
747
+ if (!_header.Parse(h))
438
748
  return S_FALSE;
439
- UInt64 fileSize;
440
- RINOK(stream->Seek(0, STREAM_SEEK_END, &fileSize));
441
- return (fileSize == _totalSize) ? S_OK : S_FALSE;
749
+
750
+ _totalSize = _header.HeaderSize;
751
+
752
+ bool addSegments = false;
753
+ bool addSections = false;
754
+
755
+ if (_header.NumSections > 1)
756
+ addSections = true;
757
+ else
758
+ addSegments = true;
759
+
760
+ if (_header.NumSegments != 0)
761
+ {
762
+ if (_header.ProgOffset > (UInt64)1 << 60) return S_FALSE;
763
+ RINOK(stream->Seek(_header.ProgOffset, STREAM_SEEK_SET, NULL));
764
+ size_t size = (size_t)_header.SegmentEntrySize * _header.NumSegments;
765
+
766
+ CByteArr buf(size);
767
+
768
+ RINOK(ReadStream_FALSE(stream, buf, size));
769
+
770
+ UInt64 total = _header.ProgOffset + size;
771
+ if (_totalSize < total)
772
+ _totalSize = total;
773
+
774
+ const Byte *p = buf;
775
+
776
+ if (addSegments)
777
+ _segments.ClearAndReserve(_header.NumSegments);
778
+ for (unsigned i = 0; i < _header.NumSegments; i++, p += _header.SegmentEntrySize)
779
+ {
780
+ CSegment seg;
781
+ seg.Parse(p, _header.Mode64, _header.Be);
782
+ seg.UpdateTotalSize(_totalSize);
783
+ if (addSegments)
784
+ if (seg.Type != PT_PHDR)
785
+ _segments.AddInReserved(seg);
786
+ }
787
+ }
788
+
789
+ if (_header.NumSections != 0)
790
+ {
791
+ if (_header.SectOffset > (UInt64)1 << 60) return S_FALSE;
792
+ RINOK(stream->Seek(_header.SectOffset, STREAM_SEEK_SET, NULL));
793
+ size_t size = (size_t)_header.SectionEntrySize * _header.NumSections;
794
+
795
+ CByteArr buf(size);
796
+
797
+ RINOK(ReadStream_FALSE(stream, buf, size));
798
+
799
+ UInt64 total = _header.SectOffset + size;
800
+ if (_totalSize < total)
801
+ _totalSize = total;
802
+
803
+ const Byte *p = buf;
804
+
805
+ if (addSections)
806
+ _sections.ClearAndReserve(_header.NumSections);
807
+ for (unsigned i = 0; i < _header.NumSections; i++, p += _header.SectionEntrySize)
808
+ {
809
+ CSection sect;
810
+ if (!sect.Parse(p, _header.Mode64, _header.Be))
811
+ {
812
+ _headersError = true;
813
+ return S_FALSE;
814
+ }
815
+ sect.UpdateTotalSize(_totalSize);
816
+ if (addSections)
817
+ _sections.AddInReserved(sect);
818
+ }
819
+ }
820
+
821
+ if (addSections)
822
+ {
823
+ if (_header.NamesSectIndex < _sections.Size())
824
+ {
825
+ const CSection &sect = _sections[_header.NamesSectIndex];
826
+ UInt64 size = sect.GetSize();
827
+ if (size != 0
828
+ && size < ((UInt64)1 << 31)
829
+ && (Int64)sect.Offset >= 0)
830
+ {
831
+ _namesData.Alloc((size_t)size);
832
+ RINOK(stream->Seek(sect.Offset, STREAM_SEEK_SET, NULL));
833
+ RINOK(ReadStream_FALSE(stream, _namesData, (size_t)size));
834
+ }
835
+ }
836
+
837
+ /*
838
+ // we will not delete NULL sections, since we have links to section via indexes
839
+ for (int i = _sections.Size() - 1; i >= 0; i--)
840
+ if (_sections[i].Type == SHT_NULL)
841
+ _items.Delete(i);
842
+ */
843
+ }
844
+
845
+ if (!_allowTail)
846
+ {
847
+ UInt64 fileSize;
848
+ RINOK(stream->Seek(0, STREAM_SEEK_END, &fileSize));
849
+ if (fileSize > _totalSize)
850
+ return S_FALSE;
851
+ }
852
+
853
+ return S_OK;
442
854
  }
443
855
 
444
856
  STDMETHODIMP CHandler::Open(IInStream *inStream,
@@ -455,14 +867,19 @@ STDMETHODIMP CHandler::Open(IInStream *inStream,
455
867
 
456
868
  STDMETHODIMP CHandler::Close()
457
869
  {
870
+ _totalSize = 0;
871
+ _headersError = false;
872
+
458
873
  _inStream.Release();
874
+ _segments.Clear();
459
875
  _sections.Clear();
876
+ _namesData.Free();
460
877
  return S_OK;
461
878
  }
462
879
 
463
880
  STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
464
881
  {
465
- *numItems = _sections.Size();
882
+ *numItems = _segments.Size() + _sections.Size();
466
883
  return S_OK;
467
884
  }
468
885
 
@@ -470,15 +887,20 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
470
887
  Int32 testMode, IArchiveExtractCallback *extractCallback)
471
888
  {
472
889
  COM_TRY_BEGIN
473
- bool allFilesMode = (numItems == (UInt32)-1);
890
+ bool allFilesMode = (numItems == (UInt32)(Int32)-1);
474
891
  if (allFilesMode)
475
- numItems = _sections.Size();
892
+ numItems = _segments.Size() + _sections.Size();
476
893
  if (numItems == 0)
477
894
  return S_OK;
478
895
  UInt64 totalSize = 0;
479
896
  UInt32 i;
480
897
  for (i = 0; i < numItems; i++)
481
- totalSize += _sections[allFilesMode ? i : indices[i]].PSize;
898
+ {
899
+ UInt32 index = allFilesMode ? i : indices[i];
900
+ totalSize += (index < _segments.Size()) ?
901
+ _segments[index].Size :
902
+ _sections[index - _segments.Size()].GetSize();
903
+ }
482
904
  extractCallback->SetTotal(totalSize);
483
905
 
484
906
  UInt64 currentTotalSize = 0;
@@ -503,8 +925,19 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
503
925
  NExtract::NAskMode::kTest :
504
926
  NExtract::NAskMode::kExtract;
505
927
  UInt32 index = allFilesMode ? i : indices[i];
506
- const CSegment &item = _sections[index];
507
- currentItemSize = item.PSize;
928
+ UInt64 offset;
929
+ if (index < _segments.Size())
930
+ {
931
+ const CSegment &item = _segments[index];
932
+ currentItemSize = item.Size;
933
+ offset = item.Offset;
934
+ }
935
+ else
936
+ {
937
+ const CSection &item = _sections[index - _segments.Size()];
938
+ currentItemSize = item.GetSize();
939
+ offset = item.Offset;
940
+ }
508
941
 
509
942
  CMyComPtr<ISequentialOutStream> outStream;
510
943
  RINOK(extractCallback->GetStream(index, &outStream, askMode));
@@ -512,7 +945,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
512
945
  continue;
513
946
 
514
947
  RINOK(extractCallback->PrepareOperation(askMode));
515
- RINOK(_inStream->Seek(item.Offset, STREAM_SEEK_SET, NULL));
948
+ RINOK(_inStream->Seek(offset, STREAM_SEEK_SET, NULL));
516
949
  streamSpec->Init(currentItemSize);
517
950
  RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress));
518
951
  outStream.Release();
@@ -524,11 +957,19 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
524
957
  COM_TRY_END
525
958
  }
526
959
 
527
- static IInArchive *CreateArc() { return new CHandler; }
960
+ STDMETHODIMP CHandler::AllowTail(Int32 allowTail)
961
+ {
962
+ _allowTail = IntToBool(allowTail);
963
+ return S_OK;
964
+ }
528
965
 
529
- static CArcInfo g_ArcInfo =
530
- { L"ELF", L"", 0, 0xDE, { 0 }, 0, false, CreateArc, 0 };
966
+ static const Byte k_Signature[] = { 0x7F, 'E', 'L', 'F' };
531
967
 
532
- REGISTER_ARC(Elf)
968
+ REGISTER_ARC_I(
969
+ "ELF", "elf", 0, 0xDE,
970
+ k_Signature,
971
+ 0,
972
+ NArcInfoFlags::kPreArc,
973
+ NULL)
533
974
 
534
975
  }}