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
@@ -2,10 +2,18 @@
2
2
 
3
3
  #include "StdAfx.h"
4
4
 
5
+ #ifndef _UNICODE
6
+ #include "../Common/StringConvert.h"
7
+ #endif
8
+
5
9
  #include "FileDir.h"
6
- #include "FileName.h"
7
10
  #include "FileFind.h"
8
- #include "Defs.h"
11
+ #include "FileName.h"
12
+
13
+ using namespace NWindows;
14
+ using namespace NFile;
15
+ using namespace NName;
16
+
9
17
  #include "../Common/StringConvert.h"
10
18
  #include "../Common/IntToString.h"
11
19
 
@@ -25,6 +33,10 @@
25
33
  // #define TRACEN(u) u;
26
34
  #define TRACEN(u) /* */
27
35
 
36
+ int g_filedir = 1;
37
+
38
+ static NWindows::NSynchronization::CCriticalSection g_CountCriticalSection;
39
+
28
40
  class Umask
29
41
  {
30
42
  public:
@@ -32,12 +44,14 @@ class Umask
32
44
  mode_t mask;
33
45
  Umask() {
34
46
  current_umask = umask (0); /* get and set the umask */
35
- umask(current_umask); /* restore the umask */
47
+ umask(current_umask); /* restore the umask */
36
48
  mask = 0777 & (~current_umask);
37
- }
49
+ }
38
50
  };
39
51
 
40
52
  static Umask gbl_umask;
53
+ extern BOOLEAN WINAPI RtlTimeToSecondsSince1970( const LARGE_INTEGER *Time, DWORD *Seconds );
54
+
41
55
 
42
56
  #ifdef _UNICODE
43
57
  AString nameWindowToUnix2(LPCWSTR name) // FIXME : optimization ?
@@ -47,10 +61,7 @@ AString nameWindowToUnix2(LPCWSTR name) // FIXME : optimization ?
47
61
  }
48
62
  #endif
49
63
 
50
- extern BOOLEAN WINAPI RtlTimeToSecondsSince1970( const LARGE_INTEGER *Time, DWORD *Seconds );
51
-
52
- #ifdef _UNICODE
53
- DWORD WINAPI GetFullPathName( LPCTSTR name, DWORD len, LPTSTR buffer, LPTSTR *lastpart ) { // FIXME
64
+ DWORD WINAPI GetFullPathNameW( LPCTSTR name, DWORD len, LPTSTR buffer, LPTSTR *lastpart ) { // FIXME
54
65
  if (name == 0) return 0;
55
66
 
56
67
  DWORD name_len = lstrlen(name);
@@ -71,7 +82,7 @@ DWORD WINAPI GetFullPathName( LPCTSTR name, DWORD len, LPTSTR buffer, LPTSTR *la
71
82
  *lastpart=ptr+1;
72
83
  ptr++;
73
84
  }
74
- TRACEN((printf("GetFullPathNameA(%s,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
85
+ TRACEN((printf("GetFullPathNameA(%ls,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
75
86
  return ret;
76
87
  }
77
88
  if (isascii(name[0]) && (name[1] == ':')) { // FIXME isascii
@@ -89,14 +100,14 @@ DWORD WINAPI GetFullPathName( LPCTSTR name, DWORD len, LPTSTR buffer, LPTSTR *la
89
100
  *lastpart=ptr+1;
90
101
  ptr++;
91
102
  }
92
- TRACEN((printf("GetFullPathNameA(%sl,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
103
+ TRACEN((printf("GetFullPathNameA(%ls,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
93
104
  return ret;
94
105
  }
95
106
 
96
107
  // name is a relative pathname.
97
108
  //
98
109
  if (len < 2) {
99
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 2)\n",name, (int)len)))
110
+ TRACEN((printf("GetFullPathNameA(%ls,%d,)=0000 (case 2)\n",name, (int)len)))
100
111
  return 0;
101
112
  }
102
113
 
@@ -110,13 +121,13 @@ DWORD WINAPI GetFullPathName( LPCTSTR name, DWORD len, LPTSTR buffer, LPTSTR *la
110
121
  if (cret) {
111
122
  begin_len = strlen(begin);
112
123
  }
113
-
124
+
114
125
  if (begin_len >= 1) {
115
126
  // strlen(begin) + strlen("/") + strlen(name)
116
127
  ret = begin_len + 1 + name_len;
117
128
 
118
129
  if (ret >= len) {
119
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 4)\n",name, (int)len)))
130
+ TRACEN((printf("GetFullPathNameA(%ls,%d,)=0000 (case 4)\n",name, (int)len)))
120
131
  return 0;
121
132
  }
122
133
  UString wbegin = GetUnicodeString(begin);
@@ -131,136 +142,14 @@ DWORD WINAPI GetFullPathName( LPCTSTR name, DWORD len, LPTSTR buffer, LPTSTR *la
131
142
  *lastpart=ptr+1;
132
143
  ptr++;
133
144
  }
134
- TRACEN((printf("GetFullPathNameA(%s,%d,%s,%s)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
135
- } else {
136
- ret = 0;
137
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 5)\n",name, (int)len)))
138
- }
139
- return ret;
140
- }
141
-
142
- #endif
143
-
144
- #if 0
145
- DWORD WINAPI GetFullPathName( LPCSTR name, DWORD len, LPSTR buffer, LPSTR *lastpart ) {
146
- if (name == 0) return 0;
147
-
148
- DWORD name_len = strlen(name);
149
-
150
- if (name[0] == '/') {
151
- DWORD ret = name_len+2;
152
- if (ret >= len) {
153
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 0)\n",name, (int)len)))
154
- return 0;
155
- }
156
- strcpy(buffer,"c:");
157
- strcat(buffer,name);
158
-
159
- *lastpart=buffer;
160
- char *ptr=buffer;
161
- while (*ptr) {
162
- if (*ptr == '/')
163
- *lastpart=ptr+1;
164
- ptr++;
165
- }
166
- TRACEN((printf("GetFullPathNameA(%s,%d,%s,%s)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
167
- return ret;
168
- }
169
- if (isascii(name[0]) && (name[1] == ':')) {
170
- DWORD ret = name_len;
171
- if (ret >= len) {
172
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 1)\n",name, (int)len)))
173
- return 0;
174
- }
175
- strcpy(buffer,name);
176
-
177
- *lastpart=buffer;
178
- char *ptr=buffer;
179
- while (*ptr) {
180
- if (*ptr == '/')
181
- *lastpart=ptr+1;
182
- ptr++;
183
- }
184
- TRACEN((printf("GetFullPathNameA(%s,%d,%s,%s)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
185
- return ret;
186
- }
187
-
188
- // name is a relative pathname.
189
- //
190
- if (len < 2) {
191
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 2)\n",name, (int)len)))
192
- return 0;
193
- }
194
-
195
- DWORD ret = 0;
196
- char begin[MAX_PATHNAME_LEN];
197
- /* DWORD begin_len = GetCurrentDirectoryA(MAX_PATHNAME_LEN,begin); */
198
- DWORD begin_len = 0;
199
- begin[0]='c';
200
- begin[1]=':';
201
- char * cret = getcwd(begin+2, MAX_PATHNAME_LEN - 3);
202
- if (cret) {
203
- begin_len = strlen(begin);
204
- }
205
-
206
- if (begin_len >= 1) {
207
- // strlen(begin) + strlen("/") + strlen(name)
208
- ret = begin_len + 1 + name_len;
209
-
210
- if (ret >= len) {
211
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 4)\n",name, (int)len)))
212
- return 0;
213
- }
214
- strcpy(buffer,begin);
215
- strcat(buffer,"/");
216
- strcat(buffer,name);
217
-
218
- *lastpart=buffer + begin_len + 1;
219
- char *ptr=buffer;
220
- while (*ptr) {
221
- if (*ptr == '/')
222
- *lastpart=ptr+1;
223
- ptr++;
224
- }
225
- TRACEN((printf("GetFullPathNameA(%s,%d,%s,%s)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
145
+ TRACEN((printf("GetFullPathNameA(%ls,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
226
146
  } else {
227
147
  ret = 0;
228
- TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 5)\n",name, (int)len)))
148
+ TRACEN((printf("GetFullPathNameA(%ls,%d,)=0000 (case 5)\n",name, (int)len)))
229
149
  }
230
150
  return ret;
231
151
  }
232
152
 
233
- static BOOL WINAPI RemoveDirectory(LPCSTR path) {
234
- if (!path || !*path) {
235
- SetLastError(ERROR_PATH_NOT_FOUND);
236
- return FALSE;
237
- }
238
- const char * name = nameWindowToUnix(path);
239
- TRACEN((printf("RemoveDirectoryA(%s)\n",name)))
240
-
241
- if (rmdir( name ) != 0) {
242
- return FALSE;
243
- }
244
- return TRUE;
245
- }
246
- #endif
247
-
248
- #ifdef _UNICODE
249
- static BOOL WINAPI RemoveDirectory(LPCWSTR path) {
250
- if (!path || !*path) {
251
- SetLastError(ERROR_PATH_NOT_FOUND);
252
- return FALSE;
253
- }
254
- AString name = nameWindowToUnix2(path);
255
- TRACEN((printf("RemoveDirectoryA(%s)\n",(const char *)name)))
256
-
257
- if (rmdir( (const char *)name ) != 0) {
258
- return FALSE;
259
- }
260
- return TRUE;
261
- }
262
- #endif
263
-
264
153
  static int copy_fd(int fin,int fout)
265
154
  {
266
155
  char buffer[16384];
@@ -297,6 +186,7 @@ static BOOL CopyFile(const char *src,const char *dst)
297
186
  flags |= O_LARGEFILE;
298
187
  #endif
299
188
 
189
+ // printf("##DBG CopyFile(%s,%s)\n",src,dst);
300
190
  int fout = open(dst,O_CREAT | O_WRONLY | O_EXCL | flags, 0600);
301
191
  if (fout != -1)
302
192
  {
@@ -314,102 +204,76 @@ static BOOL CopyFile(const char *src,const char *dst)
314
204
  return FALSE;
315
205
  }
316
206
 
317
- /*****************************************************************************************/
318
207
 
208
+ #ifndef _UNICODE
209
+ extern bool g_IsNT;
210
+ #endif
319
211
 
320
212
  namespace NWindows {
321
213
  namespace NFile {
322
- namespace NDirectory {
323
214
 
215
+ // SetCurrentDirectory doesn't support \\?\ prefix
324
216
 
325
- bool MySetCurrentDirectory(LPCWSTR wpath)
326
- {
327
- AString path = UnicodeStringToMultiByte(wpath);
217
+ #ifdef WIN_LONG_PATH
218
+ bool GetLongPathBase(CFSTR fileName, UString &res);
219
+ bool GetLongPath(CFSTR fileName, UString &res);
220
+ #endif
328
221
 
329
- return chdir((const char*)path) == 0;
330
- }
222
+ namespace NDir {
331
223
 
332
- #ifdef _UNICODE
333
- bool GetOnlyName(LPCTSTR fileName, CSysString &resultName)
334
- {
335
- int index;
336
- if (!MyGetFullPathName(fileName, resultName, index))
337
- return false;
338
- resultName = resultName.Mid(index);
339
- return true;
340
- }
341
224
 
342
- bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName)
343
- {
344
- int index;
345
- if (!MyGetFullPathName(fileName, resultName, index))
346
- return false;
347
- resultName = resultName.Left(index);
348
- return true;
349
- }
350
- #endif
225
+ #ifdef _WIN32
351
226
 
227
+ #ifndef UNDER_CE
352
228
 
353
- bool MyGetCurrentDirectory(CSysString &resultPath)
229
+ bool MyGetWindowsDirectory(FString &path)
354
230
  {
355
- char begin[MAX_PATHNAME_LEN];
356
- begin[0]='c';
357
- begin[1]=':';
358
- char * cret = getcwd(begin+2, MAX_PATHNAME_LEN - 3);
359
- if (cret)
231
+ UINT needLength;
232
+ #ifndef _UNICODE
233
+ if (!g_IsNT)
360
234
  {
361
- #ifdef _UNICODE
362
- resultPath = GetUnicodeString(begin);
363
- #else
364
- resultPath = begin;
365
- #endif
366
- return true;
235
+ TCHAR s[MAX_PATH + 2];
236
+ s[0] = 0;
237
+ needLength = ::GetWindowsDirectory(s, MAX_PATH + 1);
238
+ path = fas2fs(s);
367
239
  }
368
- return false;
369
- }
370
-
371
- bool MyMoveFile( LPCTSTR fn1, LPCTSTR fn2 ) {
372
- #ifdef _UNICODE
373
- AString src = nameWindowToUnix2(fn1);
374
- AString dst = nameWindowToUnix2(fn2);
375
- #else
376
- const char * src = nameWindowToUnix(fn1);
377
- const char * dst = nameWindowToUnix(fn2);
378
- #endif
379
-
380
- TRACEN((printf("MoveFileW(%s,%s)\n",src,dst)))
381
-
382
- int ret = rename(src,dst);
383
- if (ret != 0)
240
+ else
241
+ #endif
384
242
  {
385
- if (errno == EXDEV) // FIXED : bug #1112167 (Temporary directory must be on same partition as target)
386
- {
387
- BOOL bret = CopyFile(src,dst);
388
- if (bret == FALSE) return false;
389
-
390
- struct stat info_file;
391
- ret = stat(src,&info_file);
392
- if (ret == 0) {
393
- TRACEN((printf("##DBG chmod-1(%s,%o)\n",dst,(unsigned)info_file.st_mode & gbl_umask.mask)))
394
- ret = chmod(dst,info_file.st_mode & gbl_umask.mask);
395
- }
396
- if (ret == 0) {
397
- ret = unlink(src);
398
- }
399
- if (ret == 0) return true;
400
- }
401
- return false;
243
+ WCHAR s[MAX_PATH + 2];
244
+ s[0] = 0;
245
+ needLength = ::GetWindowsDirectoryW(s, MAX_PATH + 1);
246
+ path = us2fs(s);
402
247
  }
403
- return true;
248
+ return (needLength > 0 && needLength <= MAX_PATH);
404
249
  }
405
250
 
406
- bool MyRemoveDirectory(LPCTSTR pathName)
251
+
252
+ bool MyGetSystemDirectory(FString &path)
407
253
  {
408
- return BOOLToBool(::RemoveDirectory(pathName));
254
+ UINT needLength;
255
+ #ifndef _UNICODE
256
+ if (!g_IsNT)
257
+ {
258
+ TCHAR s[MAX_PATH + 2];
259
+ s[0] = 0;
260
+ needLength = ::GetSystemDirectory(s, MAX_PATH + 1);
261
+ path = fas2fs(s);
262
+ }
263
+ else
264
+ #endif
265
+ {
266
+ WCHAR s[MAX_PATH + 2];
267
+ s[0] = 0;
268
+ needLength = ::GetSystemDirectoryW(s, MAX_PATH + 1);
269
+ path = us2fs(s);
270
+ }
271
+ return (needLength > 0 && needLength <= MAX_PATH);
409
272
  }
273
+ #endif
274
+ #endif // _WIN32
410
275
 
411
- bool SetDirTime(LPCWSTR fileName, const FILETIME * /* creationTime */ ,
412
- const FILETIME *lpLastAccessTime, const FILETIME *lpLastWriteTime)
276
+ bool SetDirTime(CFSTR fileName, const FILETIME * /* cTime */ , const FILETIME *aTime, const FILETIME *mTime)
413
277
  {
414
278
  AString cfilename = UnicodeStringToMultiByte(fileName);
415
279
  const char * unix_filename = nameWindowToUnix((const char *)cfilename);
@@ -427,22 +291,22 @@ bool SetDirTime(LPCWSTR fileName, const FILETIME * /* creationTime */ ,
427
291
  buf.modtime = current_time;
428
292
  }
429
293
 
430
- if (lpLastAccessTime)
294
+ if (aTime)
431
295
  {
432
296
  LARGE_INTEGER ltime;
433
297
  DWORD dw;
434
- ltime.QuadPart = lpLastAccessTime->dwHighDateTime;
435
- ltime.QuadPart = (ltime.QuadPart << 32) | lpLastAccessTime->dwLowDateTime;
298
+ ltime.QuadPart = aTime->dwHighDateTime;
299
+ ltime.QuadPart = (ltime.QuadPart << 32) | aTime->dwLowDateTime;
436
300
  RtlTimeToSecondsSince1970( &ltime, &dw );
437
301
  buf.actime = dw;
438
302
  }
439
303
 
440
- if (lpLastWriteTime)
304
+ if (mTime)
441
305
  {
442
306
  LARGE_INTEGER ltime;
443
307
  DWORD dw;
444
- ltime.QuadPart = lpLastWriteTime->dwHighDateTime;
445
- ltime.QuadPart = (ltime.QuadPart << 32) | lpLastWriteTime->dwLowDateTime;
308
+ ltime.QuadPart = mTime->dwHighDateTime;
309
+ ltime.QuadPart = (ltime.QuadPart << 32) | mTime->dwLowDateTime;
446
310
  RtlTimeToSecondsSince1970( &ltime, &dw );
447
311
  buf.modtime = dw;
448
312
  }
@@ -452,26 +316,22 @@ bool SetDirTime(LPCWSTR fileName, const FILETIME * /* creationTime */ ,
452
316
  return true;
453
317
  }
454
318
 
455
- #ifndef _UNICODE
456
- bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes)
457
- {
458
- return MySetFileAttributes(UnicodeStringToMultiByte(fileName, CP_ACP), fileAttributes);
459
- }
460
-
461
- bool MyRemoveDirectory(LPCWSTR pathName)
462
- {
463
- return MyRemoveDirectory(UnicodeStringToMultiByte(pathName, CP_ACP));
464
- }
465
-
466
- bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName)
467
- {
468
- UINT codePage = CP_ACP;
469
- return MyMoveFile(UnicodeStringToMultiByte(existFileName, codePage), UnicodeStringToMultiByte(newFileName, codePage));
319
+ #ifdef WIN_LONG_PATH
320
+ bool GetLongPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2)
321
+ {
322
+ if (!GetLongPathBase(s1, d1) ||
323
+ !GetLongPathBase(s2, d2))
324
+ return false;
325
+ if (d1.IsEmpty() && d2.IsEmpty())
326
+ return false;
327
+ if (d1.IsEmpty()) d1 = fs2us(s1);
328
+ if (d2.IsEmpty()) d2 = fs2us(s2);
329
+ return true;
470
330
  }
471
331
  #endif
472
332
 
473
-
474
333
  static int convert_to_symlink(const char * name) {
334
+ TRACEN(printf("LINK(%s)\n",name))
475
335
  FILE *file = fopen(name,"rb");
476
336
  if (file) {
477
337
  char buf[MAX_PATHNAME_LEN+1];
@@ -481,18 +341,19 @@ static int convert_to_symlink(const char * name) {
481
341
  int ir = unlink(name);
482
342
  if (ir == 0) {
483
343
  ir = symlink(buf,name);
344
+ TRACEN(printf("TO(%s)\n",buf))
484
345
  }
485
- return ir;
346
+ return ir;
486
347
  }
487
348
  }
488
349
  return -1;
489
350
  }
490
351
 
491
- bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes)
352
+ bool SetFileAttrib(CFSTR fileName, DWORD fileAttributes,CObjectVector<CDelayedSymLink> *delayedSymLinks)
492
353
  {
493
354
  if (!fileName) {
494
355
  SetLastError(ERROR_PATH_NOT_FOUND);
495
- TRACEN((printf("MySetFileAttributes(NULL,%d) : false-1\n",fileAttributes)))
356
+ TRACEN((printf("SetFileAttrib(NULL,%d) : false-1\n",fileAttributes)))
496
357
  return false;
497
358
  }
498
359
  #ifdef _UNICODE
@@ -504,14 +365,14 @@ bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes)
504
365
  #ifdef ENV_HAVE_LSTAT
505
366
  if (global_use_lstat) {
506
367
  if(lstat(name,&stat_info)!=0) {
507
- TRACEN((printf("MySetFileAttributes(%s,%d) : false-2-1\n",name,fileAttributes)))
368
+ TRACEN((printf("SetFileAttrib(%s,%d) : false-2-1\n",(const char *)name,fileAttributes)))
508
369
  return false;
509
370
  }
510
371
  } else
511
372
  #endif
512
373
  {
513
374
  if(stat(name,&stat_info)!=0) {
514
- TRACEN((printf("MySetFileAttributes(%s,%d) : false-2-2\n",name,fileAttributes)))
375
+ TRACEN((printf("SetFileAttrib(%s,%d) : false-2-2\n",(const char *)name,fileAttributes)))
515
376
  return false;
516
377
  }
517
378
  }
@@ -520,19 +381,21 @@ bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes)
520
381
  stat_info.st_mode = fileAttributes >> 16;
521
382
  #ifdef ENV_HAVE_LSTAT
522
383
  if (S_ISLNK(stat_info.st_mode)) {
523
- if ( convert_to_symlink(name) != 0) {
524
- TRACEN((printf("MySetFileAttributes(%s,%d) : false-3\n",name,fileAttributes)))
384
+ if (delayedSymLinks) {
385
+ delayedSymLinks->Add(CDelayedSymLink(name));
386
+ } else if ( convert_to_symlink(name) != 0) {
387
+ TRACEN((printf("SetFileAttrib(%s,%d) : false-3\n",(const char *)name,fileAttributes)))
525
388
  return false;
526
389
  }
527
390
  } else
528
391
  #endif
529
392
  if (S_ISREG(stat_info.st_mode)) {
530
- TRACEN((printf("##DBG chmod-2(%s,%o)\n",name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
393
+ TRACEN((printf("##DBG chmod-2(%s,%o)\n",(const char *)name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
531
394
  chmod(name,stat_info.st_mode & gbl_umask.mask);
532
395
  } else if (S_ISDIR(stat_info.st_mode)) {
533
396
  // user/7za must be able to create files in this directory
534
397
  stat_info.st_mode |= (S_IRUSR | S_IWUSR | S_IXUSR);
535
- TRACEN((printf("##DBG chmod-3(%s,%o)\n",name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
398
+ TRACEN((printf("##DBG chmod-3(%s,%o)\n",(const char *)name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
536
399
  chmod(name,stat_info.st_mode & gbl_umask.mask);
537
400
  }
538
401
  #ifdef ENV_HAVE_LSTAT
@@ -545,121 +408,123 @@ bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes)
545
408
  /* Only Windows Attributes */
546
409
  if( S_ISDIR(stat_info.st_mode)) {
547
410
  /* Remark : FILE_ATTRIBUTE_READONLY ignored for directory. */
548
- TRACEN((printf("##DBG chmod-4(%s,%o)\n",name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
411
+ TRACEN((printf("##DBG chmod-4(%s,%o)\n",(const char *)name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
549
412
  chmod(name,stat_info.st_mode & gbl_umask.mask);
550
413
  } else {
551
414
  if (fileAttributes & FILE_ATTRIBUTE_READONLY) stat_info.st_mode &= ~0222; /* octal!, clear write permission bits */
552
- TRACEN((printf("##DBG chmod-5(%s,%o)\n",name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
415
+ TRACEN((printf("##DBG chmod-5(%s,%o)\n",(const char *)name,(unsigned)stat_info.st_mode & gbl_umask.mask)))
553
416
  chmod(name,stat_info.st_mode & gbl_umask.mask);
554
417
  }
555
418
  }
556
- TRACEN((printf("MySetFileAttributes(%s,%d) : true\n",name,fileAttributes)))
419
+ TRACEN((printf("SetFileAttrib(%s,%d) : true\n",(const char *)name,fileAttributes)))
557
420
 
558
421
  return true;
559
422
  }
560
423
 
561
- bool MyCreateDirectory(LPCTSTR pathName)
562
- {
563
- if (!pathName || !*pathName) {
424
+ bool RemoveDir(CFSTR path)
425
+ {
426
+ if (!path || !*path) {
564
427
  SetLastError(ERROR_PATH_NOT_FOUND);
565
- return false;
428
+ return FALSE;
566
429
  }
430
+ AString name = nameWindowToUnix2(path);
431
+ TRACEN((printf("RemoveDirectoryA(%s)\n",(const char *)name)))
567
432
 
433
+ if (rmdir( (const char *)name ) != 0) {
434
+ return FALSE;
435
+ }
436
+ return TRUE;
437
+ }
438
+
439
+ bool MyMoveFile(CFSTR existFileName, CFSTR newFileName)
440
+ {
568
441
  #ifdef _UNICODE
569
- AString name = nameWindowToUnix2(pathName);
442
+ AString src = nameWindowToUnix2(existFileName);
443
+ AString dst = nameWindowToUnix2(newFileName);
570
444
  #else
571
- const char * name = nameWindowToUnix(pathName);
445
+ const char * src = nameWindowToUnix(existFileName);
446
+ const char * dst = nameWindowToUnix(newFileName);
572
447
  #endif
573
- bool bret = false;
574
- if (mkdir( name, 0700 ) == 0) bret = true;
575
-
576
- TRACEN((printf("MyCreateDirectory(%s)=%d\n",name,(int)bret)))
577
- return bret;
578
- }
579
448
 
580
- #ifndef _UNICODE
581
- bool MyCreateDirectory(LPCWSTR pathName)
582
- {
583
- return MyCreateDirectory(UnicodeStringToMultiByte(pathName, CP_ACP));
584
- }
585
- #endif
449
+ TRACEN((printf("MyMoveFile(%s,%s)\n",(const char *)src,(const char *)dst)))
586
450
 
587
- bool CreateComplexDirectory(LPCTSTR _aPathName)
588
- {
589
- CSysString pathName = _aPathName;
590
- int pos = pathName.ReverseFind(TEXT(CHAR_PATH_SEPARATOR));
591
- if (pos > 0 && pos == pathName.Length() - 1)
592
- {
593
- if (pathName.Length() == 3 && pathName[1] == ':')
594
- return true; // Disk folder;
595
- pathName.Delete(pos);
596
- }
597
- CSysString pathName2 = pathName;
598
- pos = pathName.Length();
599
- while(true)
451
+ int ret = rename(src,dst);
452
+ if (ret != 0)
600
453
  {
601
- if(MyCreateDirectory(pathName))
602
- break;
603
- if(::GetLastError() == ERROR_ALREADY_EXISTS)
454
+ if (errno == EXDEV) // FIXED : bug #1112167 (Temporary directory must be on same partition as target)
604
455
  {
605
- #ifdef _WIN32 // FIXED for supporting symbolic link instead of a directory
606
- NFind::CFileInfo fileInfo;
607
- if (!NFind::FindFile(pathName, fileInfo)) // For network folders
608
- return true;
609
- if (!fileInfo.IsDir())
610
- return false;
611
- #endif
612
- break;
456
+ BOOL bret = CopyFile(src,dst);
457
+ if (bret == FALSE) return false;
458
+
459
+ struct stat info_file;
460
+ ret = stat(src,&info_file);
461
+ if (ret == 0) {
462
+ TRACEN((printf("##DBG chmod-1(%s,%o)\n",(const char *)dst,(unsigned)info_file.st_mode & gbl_umask.mask)))
463
+ ret = chmod(dst,info_file.st_mode & gbl_umask.mask);
464
+ }
465
+ if (ret == 0) {
466
+ ret = unlink(src);
467
+ }
468
+ if (ret == 0) return true;
613
469
  }
614
- pos = pathName.ReverseFind(TEXT(CHAR_PATH_SEPARATOR));
615
- if (pos < 0 || pos == 0)
616
- return false;
617
- if (pathName[pos - 1] == ':')
618
- return false;
619
- pathName = pathName.Left(pos);
620
- }
621
- pathName = pathName2;
622
- while(pos < pathName.Length())
623
- {
624
- pos = pathName.Find(TEXT(CHAR_PATH_SEPARATOR), pos + 1);
625
- if (pos < 0)
626
- pos = pathName.Length();
627
- if(!MyCreateDirectory(pathName.Left(pos)))
628
- return false;
470
+ return false;
629
471
  }
630
472
  return true;
631
473
  }
632
474
 
633
- #ifndef _UNICODE
475
+ bool CreateDir(CFSTR path)
476
+ {
477
+ if (!path || !*path) {
478
+ SetLastError(ERROR_PATH_NOT_FOUND);
479
+ return false;
480
+ }
481
+
482
+ #ifdef _UNICODE
483
+ AString name = nameWindowToUnix2(path);
484
+ #else
485
+ const char * name = nameWindowToUnix(path);
486
+ #endif
487
+ bool bret = false;
488
+ if (mkdir( name, 0700 ) == 0) bret = true;
634
489
 
635
- bool CreateComplexDirectory(LPCWSTR _aPathName)
490
+ TRACEN((printf("CreateDir(%s)=%d\n",(const char *)name,(int)bret)))
491
+ return bret;
492
+ }
493
+
494
+ bool CreateComplexDir(CFSTR _aPathName)
636
495
  {
637
- UString pathName = _aPathName;
638
- int pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR);
639
- if (pos > 0 && pos == pathName.Length() - 1)
496
+ AString name = nameWindowToUnix2(_aPathName);
497
+ TRACEN((printf("CreateComplexDir(%s)\n",(const char *)name)))
498
+
499
+
500
+ FString pathName = _aPathName;
501
+ int pos = pathName.ReverseFind(FCHAR_PATH_SEPARATOR);
502
+ if (pos > 0 && pos == pathName.Len() - 1)
640
503
  {
641
- if (pathName.Length() == 3 && pathName[1] == L':')
504
+ if (pathName.Len() == 3 && pathName[1] == L':')
642
505
  return true; // Disk folder;
643
506
  pathName.Delete(pos);
644
507
  }
645
- UString pathName2 = pathName;
646
- pos = pathName.Length();
647
- while(true)
508
+ FString pathName2 = pathName;
509
+ pos = pathName.Len();
510
+ TRACEN((printf("CreateComplexDir(%s) pathName2=%ls\n",(const char *)name,(CFSTR)pathName2)))
511
+ for (;;)
648
512
  {
649
- if(MyCreateDirectory(pathName))
513
+ if (CreateDir(pathName))
650
514
  break;
651
- if(::GetLastError() == ERROR_ALREADY_EXISTS)
515
+ TRACEN((printf("CreateComplexDir(%s) GetLastError=%d (ERROR_ALREADY_EXISTS=%d)\n",(const char *)name,::GetLastError(), ERROR_ALREADY_EXISTS)))
516
+ if (::GetLastError() == ERROR_ALREADY_EXISTS)
652
517
  {
653
518
  #ifdef _WIN32 // FIXED for supporting symbolic link instead of a directory
654
- NFind::CFileInfoW fileInfo;
655
- if (!NFind::FindFile(pathName, fileInfo)) // For network folders
519
+ NFind::CFileInfo fileInfo;
520
+ if (!fileInfo.Find(pathName)) // For network folders
656
521
  return true;
657
522
  if (!fileInfo.IsDir())
658
523
  return false;
659
524
  #endif
660
525
  break;
661
526
  }
662
- pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR);
527
+ pos = pathName.ReverseFind(FCHAR_PATH_SEPARATOR);
663
528
  if (pos < 0 || pos == 0)
664
529
  return false;
665
530
  if (pathName[pos - 1] == L':')
@@ -667,20 +532,18 @@ bool CreateComplexDirectory(LPCWSTR _aPathName)
667
532
  pathName = pathName.Left(pos);
668
533
  }
669
534
  pathName = pathName2;
670
- while(pos < pathName.Length())
535
+ while (pos < pathName.Len())
671
536
  {
672
- pos = pathName.Find(WCHAR_PATH_SEPARATOR, pos + 1);
537
+ pos = pathName.Find(FCHAR_PATH_SEPARATOR, pos + 1);
673
538
  if (pos < 0)
674
- pos = pathName.Length();
675
- if(!MyCreateDirectory(pathName.Left(pos)))
539
+ pos = pathName.Len();
540
+ if (!CreateDir(pathName.Left(pos)))
676
541
  return false;
677
542
  }
678
543
  return true;
679
544
  }
680
545
 
681
- #endif
682
-
683
- bool DeleteFileAlways(LPCTSTR name)
546
+ bool DeleteFileAlways(CFSTR name)
684
547
  {
685
548
  if (!name || !*name) {
686
549
  SetLastError(ERROR_PATH_NOT_FOUND);
@@ -693,235 +556,324 @@ bool DeleteFileAlways(LPCTSTR name)
693
556
  #endif
694
557
  bool bret = false;
695
558
  if (remove(unixname) == 0) bret = true;
696
- TRACEN((printf("DeleteFileAlways(%s)=%d\n",unixname,(int)bret)))
559
+ TRACEN((printf("DeleteFileAlways(%s)=%d\n",(const char *)unixname,(int)bret)))
697
560
  return bret;
698
561
  }
699
562
 
700
- #ifndef _UNICODE
701
- bool DeleteFileAlways(LPCWSTR name)
702
- {
703
- return DeleteFileAlways(UnicodeStringToMultiByte(name, CP_ACP));
563
+ bool RemoveDirWithSubItems(const FString &path)
564
+ {
565
+ bool needRemoveSubItems = true;
566
+ {
567
+ NFind::CFileInfo fi;
568
+ if (!fi.Find(path))
569
+ return false;
570
+ if (!fi.IsDir())
571
+ {
572
+ ::SetLastError(ERROR_DIRECTORY);
573
+ return false;
574
+ }
575
+ if (fi.HasReparsePoint())
576
+ needRemoveSubItems = false;
577
+ }
578
+
579
+ if (needRemoveSubItems)
580
+ {
581
+ FString s = path;
582
+ s += FCHAR_PATH_SEPARATOR;
583
+ unsigned prefixSize = s.Len();
584
+ s += FCHAR_ANY_MASK;
585
+ NFind::CEnumerator enumerator(s);
586
+ NFind::CFileInfo fi;
587
+ while (enumerator.Next(fi))
588
+ {
589
+ s.DeleteFrom(prefixSize);
590
+ s += fi.Name;
591
+ if (fi.IsDir())
592
+ {
593
+ if (!RemoveDirWithSubItems(s))
594
+ return false;
595
+ }
596
+ else if (!DeleteFileAlways(s))
597
+ return false;
598
+ }
599
+ }
600
+
601
+ if (!SetFileAttrib(path, 0))
602
+ return false;
603
+ return RemoveDir(path);
704
604
  }
705
- #endif
706
605
 
707
606
 
708
- static bool RemoveDirectorySubItems2(const UString &pathPrefix, const NFind::CFileInfoW &fileInfo)
607
+ bool RemoveDirectoryWithSubItems(const FString &path); // FIXME
608
+ static bool RemoveDirectorySubItems2(const FString pathPrefix, const NFind::CFileInfo &fileInfo)
709
609
  {
710
610
  if (fileInfo.IsDir())
711
611
  return RemoveDirectoryWithSubItems(pathPrefix + fileInfo.Name);
712
612
  return DeleteFileAlways(pathPrefix + fileInfo.Name);
713
613
  }
714
-
715
- bool RemoveDirectoryWithSubItems(const UString &path)
614
+ bool RemoveDirectoryWithSubItems(const FString &path)
716
615
  {
717
- NFind::CFileInfoW fileInfo;
718
- UString pathPrefix = path + NName::kDirDelimiter;
616
+ NFind::CFileInfo fileInfo;
617
+ FString pathPrefix = path + FCHAR_PATH_SEPARATOR;
719
618
  {
720
- NFind::CEnumeratorW enumerator(pathPrefix + TCHAR(NName::kAnyStringWildcard));
619
+ NFind::CEnumerator enumerator(pathPrefix + FCHAR_ANY_MASK);
721
620
  while (enumerator.Next(fileInfo))
722
621
  if (!RemoveDirectorySubItems2(pathPrefix, fileInfo))
723
622
  return false;
724
623
  }
725
- if (!MySetFileAttributes(path, 0))
624
+ if (!SetFileAttrib(path, 0))
726
625
  return false;
727
- return MyRemoveDirectory(path);
626
+ return RemoveDir(path);
728
627
  }
729
628
 
730
- #ifndef _WIN32_WCE
629
+ #ifdef UNDER_CE
731
630
 
732
- bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath,
733
- int &fileNamePartStartIndex)
631
+ bool MyGetFullPathName(CFSTR fileName, FString &resFullPath)
734
632
  {
735
- LPTSTR fileNamePointer = 0;
736
- LPTSTR buffer = resultPath.GetBuffer(MAX_PATH);
737
- DWORD needLength = ::GetFullPathName(fileName, MAX_PATH + 1,
738
- buffer, &fileNamePointer);
739
- resultPath.ReleaseBuffer();
740
- if (needLength == 0 || needLength >= MAX_PATH)
741
- return false;
742
- if (fileNamePointer == 0)
743
- fileNamePartStartIndex = lstrlen(fileName);
744
- else
745
- fileNamePartStartIndex = fileNamePointer - buffer;
633
+ resFullPath = fileName;
746
634
  return true;
747
635
  }
748
636
 
749
- #ifndef _UNICODE
750
- bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath,
751
- int &fileNamePartStartIndex)
637
+ #else
638
+
639
+ bool MyGetFullPathName(CFSTR path, FString &resFullPath)
752
640
  {
753
- const UINT currentPage = CP_ACP;
754
- CSysString sysPath;
755
- if (!MyGetFullPathName(UnicodeStringToMultiByte(fileName,
756
- currentPage), sysPath, fileNamePartStartIndex))
757
- return false;
758
- UString resultPath1 = MultiByteToUnicodeString(
759
- sysPath.Left(fileNamePartStartIndex), currentPage);
760
- UString resultPath2 = MultiByteToUnicodeString(
761
- sysPath.Mid(fileNamePartStartIndex), currentPage);
762
- fileNamePartStartIndex = resultPath1.Length();
763
- resultPath = resultPath1 + resultPath2;
764
- return true;
641
+ return GetFullPath(path, resFullPath);
765
642
  }
766
- #endif
767
-
768
643
 
769
- bool MyGetFullPathName(LPCTSTR fileName, CSysString &path)
644
+ bool SetCurrentDir(CFSTR path)
770
645
  {
771
- int index;
772
- return MyGetFullPathName(fileName, path, index);
646
+ AString apath = UnicodeStringToMultiByte(path);
647
+
648
+ return chdir((const char*)apath) == 0;
773
649
  }
774
650
 
775
- #ifndef _UNICODE
776
- bool MyGetFullPathName(LPCWSTR fileName, UString &path)
651
+ bool GetCurrentDir(FString &path)
777
652
  {
778
- int index;
779
- return MyGetFullPathName(fileName, path, index);
780
- }
653
+ char begin[MAX_PATHNAME_LEN];
654
+ begin[0]='c';
655
+ begin[1]=':';
656
+ char * cret = getcwd(begin+2, MAX_PATHNAME_LEN - 3);
657
+ if (cret)
658
+ {
659
+ #ifdef _UNICODE
660
+ path = GetUnicodeString(begin);
661
+ #else
662
+ path = begin;
781
663
  #endif
664
+ return true;
665
+ }
666
+ return false;
667
+ }
782
668
 
783
669
  #endif
784
670
 
785
- /* needed to find .DLL/.so and SFX */
786
- bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath)
671
+ bool GetFullPathAndSplit(CFSTR path, FString &resDirPrefix, FString &resFileName)
787
672
  {
788
- if (path != 0) {
789
- printf("NOT EXPECTED : MySearchPath : path != NULL\n");
790
- exit(EXIT_FAILURE);
791
- }
792
-
793
- if (extension != 0) {
794
- printf("NOT EXPECTED : MySearchPath : extension != NULL\n");
795
- exit(EXIT_FAILURE);
796
- }
797
-
798
- if (fileName == 0) {
799
- printf("NOT EXPECTED : MySearchPath : fileName == NULL\n");
800
- exit(EXIT_FAILURE);
801
- }
802
-
803
- const char *p7zip_home_dir = getenv("P7ZIP_HOME_DIR");
804
- if (p7zip_home_dir) {
805
- AString file_path = p7zip_home_dir;
806
- file_path += UnicodeStringToMultiByte(fileName, CP_ACP);
807
-
808
- TRACEN((printf("MySearchPath() fopen(%s)\n",(const char *)file_path)))
809
- FILE *file = fopen((const char *)file_path,"r");
810
- if (file) {
811
- // file is found
812
- fclose(file);
813
- resultPath = MultiByteToUnicodeString(file_path, CP_ACP);
814
- return true;
815
- }
816
- }
817
- return false;
673
+ bool res = MyGetFullPathName(path, resDirPrefix);
674
+ if (!res)
675
+ resDirPrefix = path;
676
+ int pos = resDirPrefix.ReverseFind(FCHAR_PATH_SEPARATOR);
677
+ resFileName = resDirPrefix.Ptr(pos + 1);
678
+ resDirPrefix.DeleteFrom(pos + 1);
679
+ return res;
818
680
  }
819
681
 
820
- #ifndef _UNICODE
821
- bool MyGetTempPath(CSysString &path)
682
+ bool GetOnlyDirPrefix(CFSTR path, FString &resDirPrefix)
822
683
  {
823
- path = "c:/tmp/"; // final '/' is needed
824
- return true;
684
+ FString resFileName;
685
+ return GetFullPathAndSplit(path, resDirPrefix, resFileName);
825
686
  }
826
- #endif
827
687
 
828
- bool MyGetTempPath(UString &path)
688
+ bool MyGetTempPath(FString &path)
829
689
  {
830
690
  path = L"c:/tmp/"; // final '/' is needed
831
691
  return true;
832
692
  }
833
693
 
834
- static NSynchronization::CCriticalSection g_CountCriticalSection;
835
-
836
- static CSysString CSysConvertUInt32ToString(UInt32 value)
837
- {
838
- TCHAR buffer[32];
839
- ConvertUInt32ToString(value, buffer);
840
- return buffer;
841
- }
842
-
843
- UINT CTempFile::Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath)
694
+ static bool CreateTempFile(CFSTR prefix, bool addRandom, FString &path, NIO::COutFile *outFile)
844
695
  {
696
+ #ifdef _WIN32
697
+ UInt32 d = (GetTickCount() << 12) ^ (GetCurrentThreadId() << 14) ^ GetCurrentProcessId();
698
+ #else
845
699
  static UInt32 memo_count = 0;
846
700
  UInt32 count;
847
701
 
848
702
  g_CountCriticalSection.Enter();
849
703
  count = memo_count++;
850
704
  g_CountCriticalSection.Leave();
851
-
852
- Remove();
853
- /* UINT number = ::GetTempFileName(dirPath, prefix, 0, path.GetBuffer(MAX_PATH)); */
854
705
  UINT number = (UINT)getpid();
855
706
 
856
- resultPath = dirPath;
857
- resultPath += prefix;
858
- resultPath += TEXT('#');
859
- resultPath += CSysConvertUInt32ToString(number);
860
- resultPath += TEXT('@');
861
- resultPath += CSysConvertUInt32ToString(count);
862
- resultPath += TEXT(".tmp");
863
-
864
- _fileName = resultPath;
707
+ UInt32 d = (GetTickCount() << 12) ^ (count << 14) ^ number;
708
+ #endif
709
+ for (unsigned i = 0; i < 100; i++)
710
+ {
711
+ path = prefix;
712
+ if (addRandom)
713
+ {
714
+ FChar s[16];
715
+ UInt32 value = d;
716
+ unsigned k;
717
+ for (k = 0; k < 8; k++)
718
+ {
719
+ unsigned t = value & 0xF;
720
+ value >>= 4;
721
+ s[k] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
722
+ }
723
+ s[k] = '\0';
724
+ if (outFile)
725
+ path += FChar('.');
726
+ path += s;
727
+ UInt32 step = GetTickCount() + 2;
728
+ if (step == 0)
729
+ step = 1;
730
+ d += step;
731
+ }
732
+ addRandom = true;
733
+ if (outFile)
734
+ path += FTEXT(".tmp");
735
+ if (NFind::DoesFileOrDirExist(path))
736
+ {
737
+ SetLastError(ERROR_ALREADY_EXISTS);
738
+ continue;
739
+ }
740
+ if (outFile)
741
+ {
742
+ if (outFile->Create(path, false))
743
+ return true;
744
+ }
745
+ else
746
+ {
747
+ if (CreateDir(path))
748
+ return true;
749
+ }
750
+ DWORD error = GetLastError();
751
+ if (error != ERROR_FILE_EXISTS &&
752
+ error != ERROR_ALREADY_EXISTS)
753
+ break;
754
+ }
755
+ path.Empty();
756
+ return false;
757
+ }
758
+
759
+ bool CTempFile::Create(CFSTR prefix, NIO::COutFile *outFile)
760
+ {
761
+ if (!Remove())
762
+ return false;
763
+ if (!CreateTempFile(prefix, false, _path, outFile))
764
+ return false;
865
765
  _mustBeDeleted = true;
866
-
867
- return number;
766
+ return true;
868
767
  }
869
768
 
870
- bool CTempFile::Create(LPCTSTR prefix, CSysString &resultPath)
769
+ bool CTempFile::CreateRandomInTempFolder(CFSTR namePrefix, NIO::COutFile *outFile)
871
770
  {
872
- CSysString tempPath;
771
+ if (!Remove())
772
+ return false;
773
+ FString tempPath;
873
774
  if (!MyGetTempPath(tempPath))
874
775
  return false;
875
- if (Create(tempPath, prefix, resultPath) != 0)
876
- return true;
877
- return false;
776
+ if (!CreateTempFile(tempPath + namePrefix, true, _path, outFile))
777
+ return false;
778
+ _mustBeDeleted = true;
779
+ return true;
878
780
  }
879
781
 
880
-
881
782
  bool CTempFile::Remove()
882
783
  {
883
784
  if (!_mustBeDeleted)
884
785
  return true;
885
- _mustBeDeleted = !DeleteFileAlways(_fileName);
786
+ _mustBeDeleted = !DeleteFileAlways(_path);
886
787
  return !_mustBeDeleted;
887
788
  }
888
789
 
889
- bool CreateTempDirectory(LPCWSTR prefix, UString &dirName)
790
+ bool CTempFile::MoveTo(CFSTR name, bool deleteDestBefore)
890
791
  {
891
- /*
892
- CSysString prefix = tempPath + prefixChars;
893
- CRandom random;
894
- random.Init();
895
- */
896
- for (;;)
897
- {
898
- {
899
- CTempFileW tempFile;
900
- if (!tempFile.Create(prefix, dirName))
792
+ if (deleteDestBefore)
793
+ if (NFind::DoesFileExist(name))
794
+ if (!DeleteFileAlways(name))
901
795
  return false;
902
- if (!tempFile.Remove())
903
- return false;
904
- }
905
- /*
906
- UINT32 randomNumber = random.Generate();
907
- TCHAR randomNumberString[32];
908
- _stprintf(randomNumberString, _T("%04X"), randomNumber);
909
- dirName = prefix + randomNumberString;
910
- */
911
- if (NFind::DoesFileOrDirExist(dirName))
912
- continue;
913
- if (MyCreateDirectory(dirName))
914
- return true;
915
- if (::GetLastError() != ERROR_ALREADY_EXISTS)
916
- return false;
796
+ DisableDeleting();
797
+ return MyMoveFile(_path, name);
798
+ }
799
+
800
+ bool CTempDir::Create(CFSTR prefix)
801
+ {
802
+ if (!Remove())
803
+ return false;
804
+ FString tempPath;
805
+ if (!MyGetTempPath(tempPath))
806
+ return false;
807
+ if (!CreateTempFile(tempPath + prefix, true, _path, NULL))
808
+ return false;
809
+ _mustBeDeleted = true;
810
+ return true;
811
+ }
812
+
813
+ bool CTempDir::Remove()
814
+ {
815
+ if (!_mustBeDeleted)
816
+ return true;
817
+ _mustBeDeleted = !RemoveDirectoryWithSubItems(_path);
818
+ return !_mustBeDeleted;
819
+ }
820
+
821
+ #ifdef ENV_UNIX
822
+
823
+ CDelayedSymLink::CDelayedSymLink(const char * source)
824
+ : _source(source)
825
+ {
826
+ struct stat st;
827
+
828
+ if (lstat(_source, &st) == 0) {
829
+ _dev = st.st_dev;
830
+ _ino = st.st_ino;
831
+ } else {
832
+ _dev = 0;
917
833
  }
918
834
  }
919
835
 
920
- bool CTempDirectory::Create(LPCTSTR prefix)
836
+ bool CDelayedSymLink::Create()
921
837
  {
922
- Remove();
923
- return (_mustBeDeleted = CreateTempDirectory(prefix, _tempDir));
838
+ struct stat st;
839
+
840
+ if (_dev == 0) {
841
+ errno = EPERM;
842
+ return false;
843
+ }
844
+ if (lstat(_source, &st) != 0)
845
+ return false;
846
+ if (_dev != st.st_dev || _ino != st.st_ino) {
847
+ // Placeholder file has been overwritten or moved by another
848
+ // symbolic link creation
849
+ errno = EPERM;
850
+ return false;
851
+ }
852
+
853
+ return convert_to_symlink(_source) == 0;
924
854
  }
925
855
 
856
+ #endif // ENV_UNIX
926
857
 
927
858
  }}}
859
+
860
+ #ifndef _SFX
861
+
862
+ namespace NWindows {
863
+ namespace NDLL {
864
+
865
+ FString GetModuleDirPrefix()
866
+ {
867
+ FString s;
868
+
869
+ const char *p7zip_home_dir = getenv("P7ZIP_HOME_DIR");
870
+ if (p7zip_home_dir) {
871
+ return MultiByteToUnicodeString(p7zip_home_dir,CP_ACP);
872
+ }
873
+
874
+ return FTEXT(".") FSTRING_PATH_SEPARATOR;
875
+ }
876
+
877
+ }}
878
+
879
+ #endif