seven_zip_ruby 1.0.0

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 (732) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.travis.yml +10 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +39 -0
  6. data/README.md +176 -0
  7. data/Rakefile +47 -0
  8. data/ext/C/Types.h +254 -0
  9. data/ext/CPP/7zip/Archive/IArchive.h +234 -0
  10. data/ext/CPP/7zip/IDecl.h +15 -0
  11. data/ext/CPP/7zip/IPassword.h +24 -0
  12. data/ext/CPP/7zip/IProgress.h +33 -0
  13. data/ext/CPP/7zip/IStream.h +58 -0
  14. data/ext/CPP/7zip/PropID.h +76 -0
  15. data/ext/CPP/Common/MyCom.h +225 -0
  16. data/ext/CPP/Common/MyGuidDef.h +54 -0
  17. data/ext/CPP/Common/MyInitGuid.h +22 -0
  18. data/ext/CPP/Common/MyUnknown.h +13 -0
  19. data/ext/CPP/Common/MyWindows.h +204 -0
  20. data/ext/CPP/Common/Types.h +11 -0
  21. data/ext/CPP/Windows/PropVariant.h +56 -0
  22. data/ext/CPP/include_windows/basetyps.h +19 -0
  23. data/ext/CPP/include_windows/tchar.h +89 -0
  24. data/ext/CPP/include_windows/windows.h +194 -0
  25. data/ext/p7zip/Asm/x64/7zCrcT8U.asm +103 -0
  26. data/ext/p7zip/Asm/x86/7zCrcT8U.asm +101 -0
  27. data/ext/p7zip/C/7zBuf.h +39 -0
  28. data/ext/p7zip/C/7zBuf2.c +45 -0
  29. data/ext/p7zip/C/7zCrc.c +76 -0
  30. data/ext/p7zip/C/7zCrc.h +25 -0
  31. data/ext/p7zip/C/7zCrcOpt.c +34 -0
  32. data/ext/p7zip/C/7zCrcT8.c +43 -0
  33. data/ext/p7zip/C/7zStream.c +169 -0
  34. data/ext/p7zip/C/7zVersion.h +7 -0
  35. data/ext/p7zip/C/Aes.c +284 -0
  36. data/ext/p7zip/C/Aes.h +38 -0
  37. data/ext/p7zip/C/Alloc.back3 +238 -0
  38. data/ext/p7zip/C/Alloc.c +280 -0
  39. data/ext/p7zip/C/Alloc.c.back +243 -0
  40. data/ext/p7zip/C/Alloc.c.back2 +222 -0
  41. data/ext/p7zip/C/Alloc.h +27 -0
  42. data/ext/p7zip/C/Bra.c +133 -0
  43. data/ext/p7zip/C/Bra.h +68 -0
  44. data/ext/p7zip/C/Bra86.c +85 -0
  45. data/ext/p7zip/C/BraIA64.c +67 -0
  46. data/ext/p7zip/C/BwtSort.c +516 -0
  47. data/ext/p7zip/C/BwtSort.h +30 -0
  48. data/ext/p7zip/C/CpuArch.c +168 -0
  49. data/ext/p7zip/C/CpuArch.h +155 -0
  50. data/ext/p7zip/C/Delta.c +62 -0
  51. data/ext/p7zip/C/Delta.h +23 -0
  52. data/ext/p7zip/C/HuffEnc.c +146 -0
  53. data/ext/p7zip/C/HuffEnc.h +27 -0
  54. data/ext/p7zip/C/LzFind.c +761 -0
  55. data/ext/p7zip/C/LzFind.h +115 -0
  56. data/ext/p7zip/C/LzFindMt.c +793 -0
  57. data/ext/p7zip/C/LzFindMt.h +105 -0
  58. data/ext/p7zip/C/LzHash.h +54 -0
  59. data/ext/p7zip/C/Lzma2Dec.c +356 -0
  60. data/ext/p7zip/C/Lzma2Dec.h +84 -0
  61. data/ext/p7zip/C/Lzma2Enc.c +477 -0
  62. data/ext/p7zip/C/Lzma2Enc.h +66 -0
  63. data/ext/p7zip/C/LzmaDec.c +999 -0
  64. data/ext/p7zip/C/LzmaDec.h +231 -0
  65. data/ext/p7zip/C/LzmaEnc.c +2268 -0
  66. data/ext/p7zip/C/LzmaEnc.h +80 -0
  67. data/ext/p7zip/C/LzmaUtil/Lzma86Dec.c +61 -0
  68. data/ext/p7zip/C/LzmaUtil/Lzma86Dec.h +51 -0
  69. data/ext/p7zip/C/LzmaUtil/Lzma86Enc.c +113 -0
  70. data/ext/p7zip/C/LzmaUtil/Lzma86Enc.h +78 -0
  71. data/ext/p7zip/C/MtCoder.c +327 -0
  72. data/ext/p7zip/C/MtCoder.h +98 -0
  73. data/ext/p7zip/C/Ppmd.h +85 -0
  74. data/ext/p7zip/C/Ppmd7.c +708 -0
  75. data/ext/p7zip/C/Ppmd7.h +140 -0
  76. data/ext/p7zip/C/Ppmd7Dec.c +187 -0
  77. data/ext/p7zip/C/Ppmd7Enc.c +185 -0
  78. data/ext/p7zip/C/Ppmd8.c +1120 -0
  79. data/ext/p7zip/C/Ppmd8.h +133 -0
  80. data/ext/p7zip/C/Ppmd8Dec.c +155 -0
  81. data/ext/p7zip/C/Ppmd8Enc.c +161 -0
  82. data/ext/p7zip/C/RotateDefs.h +20 -0
  83. data/ext/p7zip/C/Sha256.c +204 -0
  84. data/ext/p7zip/C/Sha256.h +26 -0
  85. data/ext/p7zip/C/Sort.c +93 -0
  86. data/ext/p7zip/C/Sort.h +20 -0
  87. data/ext/p7zip/C/Threads.c +582 -0
  88. data/ext/p7zip/C/Threads.h +123 -0
  89. data/ext/p7zip/C/Types.h +254 -0
  90. data/ext/p7zip/C/Xz.c +88 -0
  91. data/ext/p7zip/C/Xz.h +252 -0
  92. data/ext/p7zip/C/XzCrc64.c +33 -0
  93. data/ext/p7zip/C/XzCrc64.h +26 -0
  94. data/ext/p7zip/C/XzDec.c +875 -0
  95. data/ext/p7zip/C/XzEnc.c +497 -0
  96. data/ext/p7zip/C/XzEnc.h +25 -0
  97. data/ext/p7zip/C/XzIn.c +306 -0
  98. data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.cpp +3 -0
  99. data/ext/p7zip/CPP/7zip/Archive/7z/7zCompressionMode.h +50 -0
  100. data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.cpp +332 -0
  101. data/ext/p7zip/CPP/7zip/Archive/7z/7zDecode.h +68 -0
  102. data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.cpp +444 -0
  103. data/ext/p7zip/CPP/7zip/Archive/7z/7zEncode.h +55 -0
  104. data/ext/p7zip/CPP/7zip/Archive/7z/7zExtract.cpp +270 -0
  105. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.cpp +123 -0
  106. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderInStream.h +58 -0
  107. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +149 -0
  108. data/ext/p7zip/CPP/7zip/Archive/7z/7zFolderOutStream.h +58 -0
  109. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.cpp +482 -0
  110. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandler.h +119 -0
  111. data/ext/p7zip/CPP/7zip/Archive/7z/7zHandlerOut.cpp +483 -0
  112. data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.cpp +14 -0
  113. data/ext/p7zip/CPP/7zip/Archive/7z/7zHeader.h +97 -0
  114. data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.cpp +1276 -0
  115. data/ext/p7zip/CPP/7zip/Archive/7z/7zIn.h +245 -0
  116. data/ext/p7zip/CPP/7zip/Archive/7z/7zItem.h +268 -0
  117. data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.cpp +866 -0
  118. data/ext/p7zip/CPP/7zip/Archive/7z/7zOut.h +152 -0
  119. data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.cpp +164 -0
  120. data/ext/p7zip/CPP/7zip/Archive/7z/7zProperties.h +22 -0
  121. data/ext/p7zip/CPP/7zip/Archive/7z/7zRegister.cpp +18 -0
  122. data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.cpp +24 -0
  123. data/ext/p7zip/CPP/7zip/Archive/7z/7zSpecStream.h +35 -0
  124. data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.cpp +1216 -0
  125. data/ext/p7zip/CPP/7zip/Archive/7z/7zUpdate.h +88 -0
  126. data/ext/p7zip/CPP/7zip/Archive/ApmHandler.cpp +356 -0
  127. data/ext/p7zip/CPP/7zip/Archive/ArchiveExports.cpp +135 -0
  128. data/ext/p7zip/CPP/7zip/Archive/ArjHandler.cpp +798 -0
  129. data/ext/p7zip/CPP/7zip/Archive/Bz2Handler.cpp +423 -0
  130. data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.cpp +189 -0
  131. data/ext/p7zip/CPP/7zip/Archive/Cab/CabBlockInStream.h +44 -0
  132. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.cpp +929 -0
  133. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHandler.h +28 -0
  134. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.cpp +15 -0
  135. data/ext/p7zip/CPP/7zip/Archive/Cab/CabHeader.h +44 -0
  136. data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.cpp +272 -0
  137. data/ext/p7zip/CPP/7zip/Archive/Cab/CabIn.h +161 -0
  138. data/ext/p7zip/CPP/7zip/Archive/Cab/CabItem.h +63 -0
  139. data/ext/p7zip/CPP/7zip/Archive/Cab/CabRegister.cpp +13 -0
  140. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.cpp +721 -0
  141. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHandler.h +29 -0
  142. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.cpp +24 -0
  143. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmHeader.h +28 -0
  144. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.cpp +937 -0
  145. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmIn.h +244 -0
  146. data/ext/p7zip/CPP/7zip/Archive/Chm/ChmRegister.cpp +13 -0
  147. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.cpp +239 -0
  148. data/ext/p7zip/CPP/7zip/Archive/Com/ComHandler.h +28 -0
  149. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.cpp +389 -0
  150. data/ext/p7zip/CPP/7zip/Archive/Com/ComIn.h +119 -0
  151. data/ext/p7zip/CPP/7zip/Archive/Com/ComRegister.cpp +13 -0
  152. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.cpp +121 -0
  153. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2.h +174 -0
  154. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +240 -0
  155. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2MT.h +80 -0
  156. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.cpp +239 -0
  157. data/ext/p7zip/CPP/7zip/Archive/Common/CoderMixer2ST.h +88 -0
  158. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +15 -0
  159. data/ext/p7zip/CPP/7zip/Archive/Common/CrossThreadProgress.h +37 -0
  160. data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.cpp +22 -0
  161. data/ext/p7zip/CPP/7zip/Archive/Common/DummyOutStream.h +24 -0
  162. data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.cpp +62 -0
  163. data/ext/p7zip/CPP/7zip/Archive/Common/FindSignature.h +12 -0
  164. data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.cpp +623 -0
  165. data/ext/p7zip/CPP/7zip/Archive/Common/HandlerOut.h +87 -0
  166. data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +42 -0
  167. data/ext/p7zip/CPP/7zip/Archive/Common/InStreamWithCRC.h +67 -0
  168. data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.cpp +61 -0
  169. data/ext/p7zip/CPP/7zip/Archive/Common/ItemNameUtils.h +24 -0
  170. data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.cpp +190 -0
  171. data/ext/p7zip/CPP/7zip/Archive/Common/MultiStream.h +84 -0
  172. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +18 -0
  173. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithCRC.h +36 -0
  174. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp +18 -0
  175. data/ext/p7zip/CPP/7zip/Archive/Common/OutStreamWithSha1.h +36 -0
  176. data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.cpp +177 -0
  177. data/ext/p7zip/CPP/7zip/Archive/Common/ParseProperties.h +18 -0
  178. data/ext/p7zip/CPP/7zip/Archive/CpioHandler.cpp +624 -0
  179. data/ext/p7zip/CPP/7zip/Archive/CramfsHandler.cpp +644 -0
  180. data/ext/p7zip/CPP/7zip/Archive/DebHandler.cpp +413 -0
  181. data/ext/p7zip/CPP/7zip/Archive/DeflateProps.cpp +118 -0
  182. data/ext/p7zip/CPP/7zip/Archive/DeflateProps.h +35 -0
  183. data/ext/p7zip/CPP/7zip/Archive/DllExports2.cpp +76 -0
  184. data/ext/p7zip/CPP/7zip/Archive/DmgHandler.cpp +918 -0
  185. data/ext/p7zip/CPP/7zip/Archive/ElfHandler.cpp +534 -0
  186. data/ext/p7zip/CPP/7zip/Archive/FatHandler.cpp +996 -0
  187. data/ext/p7zip/CPP/7zip/Archive/FlvHandler.cpp +544 -0
  188. data/ext/p7zip/CPP/7zip/Archive/GzHandler.cpp +698 -0
  189. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.cpp +243 -0
  190. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsHandler.h +26 -0
  191. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.cpp +480 -0
  192. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsIn.h +154 -0
  193. data/ext/p7zip/CPP/7zip/Archive/Hfs/HfsRegister.cpp +13 -0
  194. data/ext/p7zip/CPP/7zip/Archive/IArchive.h +234 -0
  195. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.cpp +326 -0
  196. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHandler.h +30 -0
  197. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.cpp +21 -0
  198. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoHeader.h +61 -0
  199. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.cpp +453 -0
  200. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoIn.h +315 -0
  201. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoItem.h +141 -0
  202. data/ext/p7zip/CPP/7zip/Archive/Iso/IsoRegister.cpp +13 -0
  203. data/ext/p7zip/CPP/7zip/Archive/LzhHandler.cpp +775 -0
  204. data/ext/p7zip/CPP/7zip/Archive/LzmaHandler.cpp +430 -0
  205. data/ext/p7zip/CPP/7zip/Archive/MachoHandler.cpp +500 -0
  206. data/ext/p7zip/CPP/7zip/Archive/MbrHandler.cpp +507 -0
  207. data/ext/p7zip/CPP/7zip/Archive/MslzHandler.cpp +257 -0
  208. data/ext/p7zip/CPP/7zip/Archive/MubHandler.cpp +266 -0
  209. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.cpp +130 -0
  210. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisDecode.h +47 -0
  211. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.cpp +510 -0
  212. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisHandler.h +43 -0
  213. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.cpp +1461 -0
  214. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisIn.h +181 -0
  215. data/ext/p7zip/CPP/7zip/Archive/Nsis/NsisRegister.cpp +13 -0
  216. data/ext/p7zip/CPP/7zip/Archive/NtfsHandler.cpp +1764 -0
  217. data/ext/p7zip/CPP/7zip/Archive/PeHandler.cpp +1752 -0
  218. data/ext/p7zip/CPP/7zip/Archive/PpmdHandler.cpp +456 -0
  219. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.cpp +869 -0
  220. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHandler.h +66 -0
  221. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.cpp +21 -0
  222. data/ext/p7zip/CPP/7zip/Archive/Rar/RarHeader.h +205 -0
  223. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.cpp +478 -0
  224. data/ext/p7zip/CPP/7zip/Archive/Rar/RarIn.h +123 -0
  225. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.cpp +55 -0
  226. data/ext/p7zip/CPP/7zip/Archive/Rar/RarItem.h +79 -0
  227. data/ext/p7zip/CPP/7zip/Archive/Rar/RarRegister.cpp +13 -0
  228. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.cpp +78 -0
  229. data/ext/p7zip/CPP/7zip/Archive/Rar/RarVolumeInStream.h +49 -0
  230. data/ext/p7zip/CPP/7zip/Archive/RpmHandler.cpp +292 -0
  231. data/ext/p7zip/CPP/7zip/Archive/SplitHandler.cpp +366 -0
  232. data/ext/p7zip/CPP/7zip/Archive/SquashfsHandler.cpp +2155 -0
  233. data/ext/p7zip/CPP/7zip/Archive/SwfHandler.cpp +706 -0
  234. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.cpp +386 -0
  235. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandler.h +61 -0
  236. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHandlerOut.cpp +122 -0
  237. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.cpp +25 -0
  238. data/ext/p7zip/CPP/7zip/Archive/Tar/TarHeader.h +108 -0
  239. data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.cpp +207 -0
  240. data/ext/p7zip/CPP/7zip/Archive/Tar/TarIn.h +17 -0
  241. data/ext/p7zip/CPP/7zip/Archive/Tar/TarItem.h +72 -0
  242. data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.cpp +187 -0
  243. data/ext/p7zip/CPP/7zip/Archive/Tar/TarOut.h +28 -0
  244. data/ext/p7zip/CPP/7zip/Archive/Tar/TarRegister.cpp +18 -0
  245. data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.cpp +139 -0
  246. data/ext/p7zip/CPP/7zip/Archive/Tar/TarUpdate.h +34 -0
  247. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.cpp +451 -0
  248. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfHandler.h +37 -0
  249. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.cpp +876 -0
  250. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfIn.h +375 -0
  251. data/ext/p7zip/CPP/7zip/Archive/Udf/UdfRegister.cpp +13 -0
  252. data/ext/p7zip/CPP/7zip/Archive/VhdHandler.cpp +734 -0
  253. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.cpp +660 -0
  254. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandler.h +77 -0
  255. data/ext/p7zip/CPP/7zip/Archive/Wim/WimHandlerOut.cpp +639 -0
  256. data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.cpp +855 -0
  257. data/ext/p7zip/CPP/7zip/Archive/Wim/WimIn.h +297 -0
  258. data/ext/p7zip/CPP/7zip/Archive/Wim/WimRegister.cpp +18 -0
  259. data/ext/p7zip/CPP/7zip/Archive/XarHandler.cpp +588 -0
  260. data/ext/p7zip/CPP/7zip/Archive/XzHandler.cpp +707 -0
  261. data/ext/p7zip/CPP/7zip/Archive/ZHandler.cpp +161 -0
  262. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.cpp +379 -0
  263. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipAddCommon.h +56 -0
  264. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipCompressionMode.h +42 -0
  265. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.cpp +822 -0
  266. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandler.h +101 -0
  267. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHandlerOut.cpp +537 -0
  268. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.cpp +36 -0
  269. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipHeader.h +284 -0
  270. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.cpp +893 -0
  271. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipIn.h +125 -0
  272. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.cpp +181 -0
  273. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItem.h +281 -0
  274. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipItemEx.h +34 -0
  275. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.cpp +289 -0
  276. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipOut.h +56 -0
  277. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipRegister.cpp +18 -0
  278. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.cpp +1076 -0
  279. data/ext/p7zip/CPP/7zip/Archive/Zip/ZipUpdate.h +58 -0
  280. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile +328 -0
  281. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.depend +4962 -0
  282. data/ext/p7zip/CPP/7zip/Bundles/Format7zFree/makefile.list +265 -0
  283. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zFM.txt +163 -0
  284. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7zG.txt +131 -0
  285. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_7za.txt +253 -0
  286. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_ALL.txt +32 -0
  287. data/ext/p7zip/CPP/7zip/CMAKE/CMakeLists_Format7zFree.txt +290 -0
  288. data/ext/p7zip/CPP/7zip/CMAKE/generate.sh +37 -0
  289. data/ext/p7zip/CPP/7zip/CMAKE/generate_xcode.sh +32 -0
  290. data/ext/p7zip/CPP/7zip/Common/CWrappers.cpp +226 -0
  291. data/ext/p7zip/CPP/7zip/Common/CWrappers.h +109 -0
  292. data/ext/p7zip/CPP/7zip/Common/CreateCoder.cpp +293 -0
  293. data/ext/p7zip/CPP/7zip/Common/CreateCoder.h +98 -0
  294. data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.cpp +55 -0
  295. data/ext/p7zip/CPP/7zip/Common/FilePathAutoRename.h +10 -0
  296. data/ext/p7zip/CPP/7zip/Common/FileStreams.cpp +273 -0
  297. data/ext/p7zip/CPP/7zip/Common/FileStreams.h +134 -0
  298. data/ext/p7zip/CPP/7zip/Common/FilterCoder.cpp +247 -0
  299. data/ext/p7zip/CPP/7zip/Common/FilterCoder.h +128 -0
  300. data/ext/p7zip/CPP/7zip/Common/InBuffer.cpp +83 -0
  301. data/ext/p7zip/CPP/7zip/Common/InBuffer.h +81 -0
  302. data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.cpp +122 -0
  303. data/ext/p7zip/CPP/7zip/Common/InOutTempBuffer.h +48 -0
  304. data/ext/p7zip/CPP/7zip/Common/LimitedStreams.cpp +154 -0
  305. data/ext/p7zip/CPP/7zip/Common/LimitedStreams.h +125 -0
  306. data/ext/p7zip/CPP/7zip/Common/LockedStream.cpp +23 -0
  307. data/ext/p7zip/CPP/7zip/Common/LockedStream.h +38 -0
  308. data/ext/p7zip/CPP/7zip/Common/MemBlocks.cpp +183 -0
  309. data/ext/p7zip/CPP/7zip/Common/MemBlocks.h +71 -0
  310. data/ext/p7zip/CPP/7zip/Common/MethodId.cpp +27 -0
  311. data/ext/p7zip/CPP/7zip/Common/MethodId.h +10 -0
  312. data/ext/p7zip/CPP/7zip/Common/MethodProps.cpp +99 -0
  313. data/ext/p7zip/CPP/7zip/Common/MethodProps.h +41 -0
  314. data/ext/p7zip/CPP/7zip/Common/OffsetStream.cpp +35 -0
  315. data/ext/p7zip/CPP/7zip/Common/OffsetStream.h +25 -0
  316. data/ext/p7zip/CPP/7zip/Common/OutBuffer.cpp +116 -0
  317. data/ext/p7zip/CPP/7zip/Common/OutBuffer.h +64 -0
  318. data/ext/p7zip/CPP/7zip/Common/OutMemStream.cpp +142 -0
  319. data/ext/p7zip/CPP/7zip/Common/OutMemStream.h +96 -0
  320. data/ext/p7zip/CPP/7zip/Common/ProgressMt.cpp +53 -0
  321. data/ext/p7zip/CPP/7zip/Common/ProgressMt.h +46 -0
  322. data/ext/p7zip/CPP/7zip/Common/ProgressUtils.cpp +42 -0
  323. data/ext/p7zip/CPP/7zip/Common/ProgressUtils.h +34 -0
  324. data/ext/p7zip/CPP/7zip/Common/RegisterArc.h +32 -0
  325. data/ext/p7zip/CPP/7zip/Common/RegisterCodec.h +33 -0
  326. data/ext/p7zip/CPP/7zip/Common/StreamBinder.cpp +152 -0
  327. data/ext/p7zip/CPP/7zip/Common/StreamBinder.h +38 -0
  328. data/ext/p7zip/CPP/7zip/Common/StreamObjects.cpp +221 -0
  329. data/ext/p7zip/CPP/7zip/Common/StreamObjects.h +135 -0
  330. data/ext/p7zip/CPP/7zip/Common/StreamUtils.cpp +56 -0
  331. data/ext/p7zip/CPP/7zip/Common/StreamUtils.h +13 -0
  332. data/ext/p7zip/CPP/7zip/Common/VirtThread.cpp +46 -0
  333. data/ext/p7zip/CPP/7zip/Common/VirtThread.h +23 -0
  334. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.cpp +309 -0
  335. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder1.h +98 -0
  336. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.cpp +90 -0
  337. data/ext/p7zip/CPP/7zip/Compress/ArjDecoder2.h +59 -0
  338. data/ext/p7zip/CPP/7zip/Compress/BZip2Const.h +54 -0
  339. data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.cpp +26 -0
  340. data/ext/p7zip/CPP/7zip/Compress/BZip2Crc.h +31 -0
  341. data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.cpp +943 -0
  342. data/ext/p7zip/CPP/7zip/Compress/BZip2Decoder.h +205 -0
  343. data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.cpp +895 -0
  344. data/ext/p7zip/CPP/7zip/Compress/BZip2Encoder.h +245 -0
  345. data/ext/p7zip/CPP/7zip/Compress/BZip2Register.cpp +20 -0
  346. data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.cpp +386 -0
  347. data/ext/p7zip/CPP/7zip/Compress/Bcj2Coder.h +115 -0
  348. data/ext/p7zip/CPP/7zip/Compress/Bcj2Register.cpp +19 -0
  349. data/ext/p7zip/CPP/7zip/Compress/BcjCoder.cpp +15 -0
  350. data/ext/p7zip/CPP/7zip/Compress/BcjCoder.h +19 -0
  351. data/ext/p7zip/CPP/7zip/Compress/BcjRegister.cpp +19 -0
  352. data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.cpp +24 -0
  353. data/ext/p7zip/CPP/7zip/Compress/BitlDecoder.h +141 -0
  354. data/ext/p7zip/CPP/7zip/Compress/BitlEncoder.h +57 -0
  355. data/ext/p7zip/CPP/7zip/Compress/BitmDecoder.h +66 -0
  356. data/ext/p7zip/CPP/7zip/Compress/BitmEncoder.h +50 -0
  357. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.cpp +19 -0
  358. data/ext/p7zip/CPP/7zip/Compress/BranchCoder.h +44 -0
  359. data/ext/p7zip/CPP/7zip/Compress/BranchMisc.cpp +37 -0
  360. data/ext/p7zip/CPP/7zip/Compress/BranchMisc.h +14 -0
  361. data/ext/p7zip/CPP/7zip/Compress/BranchRegister.cpp +30 -0
  362. data/ext/p7zip/CPP/7zip/Compress/ByteSwap.cpp +73 -0
  363. data/ext/p7zip/CPP/7zip/Compress/CodecExports.cpp +160 -0
  364. data/ext/p7zip/CPP/7zip/Compress/CopyCoder.cpp +67 -0
  365. data/ext/p7zip/CPP/7zip/Compress/CopyCoder.h +34 -0
  366. data/ext/p7zip/CPP/7zip/Compress/CopyRegister.cpp +14 -0
  367. data/ext/p7zip/CPP/7zip/Compress/Deflate64Register.cpp +20 -0
  368. data/ext/p7zip/CPP/7zip/Compress/DeflateConst.h +134 -0
  369. data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.cpp +353 -0
  370. data/ext/p7zip/CPP/7zip/Compress/DeflateDecoder.h +157 -0
  371. data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.cpp +986 -0
  372. data/ext/p7zip/CPP/7zip/Compress/DeflateEncoder.h +211 -0
  373. data/ext/p7zip/CPP/7zip/Compress/DeflateRegister.cpp +21 -0
  374. data/ext/p7zip/CPP/7zip/Compress/DeltaFilter.cpp +112 -0
  375. data/ext/p7zip/CPP/7zip/Compress/DllExports.cpp +39 -0
  376. data/ext/p7zip/CPP/7zip/Compress/DllExports2.cpp +28 -0
  377. data/ext/p7zip/CPP/7zip/Compress/HuffmanDecoder.h +89 -0
  378. data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.cpp +219 -0
  379. data/ext/p7zip/CPP/7zip/Compress/ImplodeDecoder.h +57 -0
  380. data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.cpp +89 -0
  381. data/ext/p7zip/CPP/7zip/Compress/ImplodeHuffmanDecoder.h +34 -0
  382. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +531 -0
  383. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +1018 -0
  384. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +48 -0
  385. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +311 -0
  386. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +20 -0
  387. data/ext/p7zip/CPP/7zip/Compress/LZMA_Alone/makefile +173 -0
  388. data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.cpp +14 -0
  389. data/ext/p7zip/CPP/7zip/Compress/LzOutWindow.h +66 -0
  390. data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.cpp +220 -0
  391. data/ext/p7zip/CPP/7zip/Compress/LzhDecoder.h +106 -0
  392. data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.cpp +189 -0
  393. data/ext/p7zip/CPP/7zip/Compress/Lzma2Decoder.h +73 -0
  394. data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.cpp +94 -0
  395. data/ext/p7zip/CPP/7zip/Compress/Lzma2Encoder.h +36 -0
  396. data/ext/p7zip/CPP/7zip/Compress/Lzma2Register.cpp +20 -0
  397. data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.cpp +252 -0
  398. data/ext/p7zip/CPP/7zip/Compress/LzmaDecoder.h +84 -0
  399. data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.cpp +149 -0
  400. data/ext/p7zip/CPP/7zip/Compress/LzmaEncoder.h +36 -0
  401. data/ext/p7zip/CPP/7zip/Compress/LzmaRegister.cpp +20 -0
  402. data/ext/p7zip/CPP/7zip/Compress/Lzx.h +61 -0
  403. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.cpp +90 -0
  404. data/ext/p7zip/CPP/7zip/Compress/Lzx86Converter.h +46 -0
  405. data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.cpp +387 -0
  406. data/ext/p7zip/CPP/7zip/Compress/LzxDecoder.h +159 -0
  407. data/ext/p7zip/CPP/7zip/Compress/Mtf8.h +193 -0
  408. data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.cpp +167 -0
  409. data/ext/p7zip/CPP/7zip/Compress/PpmdDecoder.h +78 -0
  410. data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.cpp +119 -0
  411. data/ext/p7zip/CPP/7zip/Compress/PpmdEncoder.h +48 -0
  412. data/ext/p7zip/CPP/7zip/Compress/PpmdRegister.cpp +21 -0
  413. data/ext/p7zip/CPP/7zip/Compress/PpmdZip.cpp +223 -0
  414. data/ext/p7zip/CPP/7zip/Compress/PpmdZip.h +72 -0
  415. data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.cpp +175 -0
  416. data/ext/p7zip/CPP/7zip/Compress/QuantumDecoder.h +264 -0
  417. data/ext/p7zip/CPP/7zip/Compress/RangeCoder.h +205 -0
  418. data/ext/p7zip/CPP/7zip/Compress/RangeCoderBit.h +114 -0
  419. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile +34 -0
  420. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.depend +158 -0
  421. data/ext/p7zip/CPP/7zip/Compress/Rar/makefile.list +64 -0
  422. data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.cpp +480 -0
  423. data/ext/p7zip/CPP/7zip/Compress/Rar1Decoder.h +88 -0
  424. data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.cpp +391 -0
  425. data/ext/p7zip/CPP/7zip/Compress/Rar2Decoder.h +174 -0
  426. data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.cpp +897 -0
  427. data/ext/p7zip/CPP/7zip/Compress/Rar3Decoder.h +267 -0
  428. data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.cpp +1091 -0
  429. data/ext/p7zip/CPP/7zip/Compress/Rar3Vm.h +179 -0
  430. data/ext/p7zip/CPP/7zip/Compress/RarCodecsRegister.cpp +26 -0
  431. data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.cpp +145 -0
  432. data/ext/p7zip/CPP/7zip/Compress/ShrinkDecoder.h +38 -0
  433. data/ext/p7zip/CPP/7zip/Compress/ZDecoder.cpp +159 -0
  434. data/ext/p7zip/CPP/7zip/Compress/ZDecoder.h +42 -0
  435. data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.cpp +89 -0
  436. data/ext/p7zip/CPP/7zip/Compress/ZlibDecoder.h +48 -0
  437. data/ext/p7zip/CPP/7zip/Compress/ZlibEncoder.cpp +61 -0
  438. data/ext/p7zip/CPP/7zip/Compress/ZlibEncoder.h +48 -0
  439. data/ext/p7zip/CPP/7zip/Crypto/7zAes.cpp +244 -0
  440. data/ext/p7zip/CPP/7zip/Crypto/7zAes.h +117 -0
  441. data/ext/p7zip/CPP/7zip/Crypto/7zAesRegister.cpp +18 -0
  442. data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.cpp +109 -0
  443. data/ext/p7zip/CPP/7zip/Crypto/HmacSha1.h +39 -0
  444. data/ext/p7zip/CPP/7zip/Crypto/MyAes.cpp +48 -0
  445. data/ext/p7zip/CPP/7zip/Crypto/MyAes.h +38 -0
  446. data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp +83 -0
  447. data/ext/p7zip/CPP/7zip/Crypto/Pbkdf2HmacSha1.h +21 -0
  448. data/ext/p7zip/CPP/7zip/Crypto/RandGen.cpp +107 -0
  449. data/ext/p7zip/CPP/7zip/Crypto/RandGen.h +21 -0
  450. data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.cpp +133 -0
  451. data/ext/p7zip/CPP/7zip/Crypto/Rar20Crypto.h +50 -0
  452. data/ext/p7zip/CPP/7zip/Crypto/RarAes.cpp +134 -0
  453. data/ext/p7zip/CPP/7zip/Crypto/RarAes.h +47 -0
  454. data/ext/p7zip/CPP/7zip/Crypto/Sha1.cpp +229 -0
  455. data/ext/p7zip/CPP/7zip/Crypto/Sha1.h +68 -0
  456. data/ext/p7zip/CPP/7zip/Crypto/WzAes.cpp +221 -0
  457. data/ext/p7zip/CPP/7zip/Crypto/WzAes.h +125 -0
  458. data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.cpp +88 -0
  459. data/ext/p7zip/CPP/7zip/Crypto/ZipCrypto.h +56 -0
  460. data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.cpp +164 -0
  461. data/ext/p7zip/CPP/7zip/Crypto/ZipStrong.h +47 -0
  462. data/ext/p7zip/CPP/7zip/Guid.txt +170 -0
  463. data/ext/p7zip/CPP/7zip/ICoder.h +186 -0
  464. data/ext/p7zip/CPP/7zip/IDecl.h +15 -0
  465. data/ext/p7zip/CPP/7zip/IPassword.h +24 -0
  466. data/ext/p7zip/CPP/7zip/IProgress.h +33 -0
  467. data/ext/p7zip/CPP/7zip/IStream.h +58 -0
  468. data/ext/p7zip/CPP/7zip/MyVersion.h +11 -0
  469. data/ext/p7zip/CPP/7zip/PREMAKE/generate.sh +18 -0
  470. data/ext/p7zip/CPP/7zip/PREMAKE/premake4.lua +263 -0
  471. data/ext/p7zip/CPP/7zip/PropID.h +76 -0
  472. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA.pro +228 -0
  473. data/ext/p7zip/CPP/7zip/QMAKE/7ZA/7ZA_osx.pro +228 -0
  474. data/ext/p7zip/CPP/7zip/QMAKE/test_emul/test_emul.pro +26 -0
  475. data/ext/p7zip/CPP/7zip/TEST/TestUI/TestUI.cpp +560 -0
  476. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile +33 -0
  477. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.depend +577 -0
  478. data/ext/p7zip/CPP/7zip/TEST/TestUI/makefile.list +16 -0
  479. data/ext/p7zip/CPP/Common/AutoPtr.h +35 -0
  480. data/ext/p7zip/CPP/Common/Buffer.h +77 -0
  481. data/ext/p7zip/CPP/Common/CRC.cpp +7 -0
  482. data/ext/p7zip/CPP/Common/C_FileIO.cpp +88 -0
  483. data/ext/p7zip/CPP/Common/C_FileIO.h +47 -0
  484. data/ext/p7zip/CPP/Common/ComTry.h +18 -0
  485. data/ext/p7zip/CPP/Common/CommandLineParser.cpp +230 -0
  486. data/ext/p7zip/CPP/Common/CommandLineParser.h +72 -0
  487. data/ext/p7zip/CPP/Common/Defs.h +20 -0
  488. data/ext/p7zip/CPP/Common/DynamicBuffer.h +50 -0
  489. data/ext/p7zip/CPP/Common/IntToString.cpp +77 -0
  490. data/ext/p7zip/CPP/Common/IntToString.h +19 -0
  491. data/ext/p7zip/CPP/Common/Lang.cpp +130 -0
  492. data/ext/p7zip/CPP/Common/Lang.h +28 -0
  493. data/ext/p7zip/CPP/Common/ListFileUtils.cpp +75 -0
  494. data/ext/p7zip/CPP/Common/ListFileUtils.h +11 -0
  495. data/ext/p7zip/CPP/Common/MyCom.h +225 -0
  496. data/ext/p7zip/CPP/Common/MyException.h +14 -0
  497. data/ext/p7zip/CPP/Common/MyGuidDef.h +54 -0
  498. data/ext/p7zip/CPP/Common/MyInitGuid.h +22 -0
  499. data/ext/p7zip/CPP/Common/MyMap.cpp +140 -0
  500. data/ext/p7zip/CPP/Common/MyMap.h +28 -0
  501. data/ext/p7zip/CPP/Common/MyString.cpp +206 -0
  502. data/ext/p7zip/CPP/Common/MyString.h +601 -0
  503. data/ext/p7zip/CPP/Common/MyUnknown.h +13 -0
  504. data/ext/p7zip/CPP/Common/MyVector.cpp +87 -0
  505. data/ext/p7zip/CPP/Common/MyVector.h +266 -0
  506. data/ext/p7zip/CPP/Common/MyWindows.cpp +111 -0
  507. data/ext/p7zip/CPP/Common/MyWindows.h +218 -0
  508. data/ext/p7zip/CPP/Common/MyXml.cpp +209 -0
  509. data/ext/p7zip/CPP/Common/MyXml.h +40 -0
  510. data/ext/p7zip/CPP/Common/NewHandler.h +16 -0
  511. data/ext/p7zip/CPP/Common/StdInStream.cpp +100 -0
  512. data/ext/p7zip/CPP/Common/StdInStream.h +32 -0
  513. data/ext/p7zip/CPP/Common/StdOutStream.cpp +93 -0
  514. data/ext/p7zip/CPP/Common/StdOutStream.h +35 -0
  515. data/ext/p7zip/CPP/Common/StringConvert.cpp +181 -0
  516. data/ext/p7zip/CPP/Common/StringConvert.h +73 -0
  517. data/ext/p7zip/CPP/Common/StringToInt.cpp +90 -0
  518. data/ext/p7zip/CPP/Common/StringToInt.h +18 -0
  519. data/ext/p7zip/CPP/Common/TextConfig.cpp +138 -0
  520. data/ext/p7zip/CPP/Common/TextConfig.h +22 -0
  521. data/ext/p7zip/CPP/Common/Types.h +11 -0
  522. data/ext/p7zip/CPP/Common/UTFConvert.cpp +145 -0
  523. data/ext/p7zip/CPP/Common/UTFConvert.h +11 -0
  524. data/ext/p7zip/CPP/Common/Wildcard.cpp +462 -0
  525. data/ext/p7zip/CPP/Common/Wildcard.h +80 -0
  526. data/ext/p7zip/CPP/Windows/COM.cpp +37 -0
  527. data/ext/p7zip/CPP/Windows/COM.h +69 -0
  528. data/ext/p7zip/CPP/Windows/Clipboard.cpp +160 -0
  529. data/ext/p7zip/CPP/Windows/Clipboard.h +28 -0
  530. data/ext/p7zip/CPP/Windows/CommonDialog.h +19 -0
  531. data/ext/p7zip/CPP/Windows/Control/ComboBox.h +82 -0
  532. data/ext/p7zip/CPP/Windows/Control/Controls.cpp +515 -0
  533. data/ext/p7zip/CPP/Windows/Control/Dialog.cpp +560 -0
  534. data/ext/p7zip/CPP/Windows/Control/Dialog.h +179 -0
  535. data/ext/p7zip/CPP/Windows/Control/DialogImpl.h +73 -0
  536. data/ext/p7zip/CPP/Windows/Control/Edit.h +24 -0
  537. data/ext/p7zip/CPP/Windows/Control/ListView.h +164 -0
  538. data/ext/p7zip/CPP/Windows/Control/ProgressBar.h +34 -0
  539. data/ext/p7zip/CPP/Windows/Control/Static.h +23 -0
  540. data/ext/p7zip/CPP/Windows/Control/StatusBar.h +56 -0
  541. data/ext/p7zip/CPP/Windows/Control/Window2.cpp +211 -0
  542. data/ext/p7zip/CPP/Windows/Control/Window2.h +111 -0
  543. data/ext/p7zip/CPP/Windows/DLL.cpp +193 -0
  544. data/ext/p7zip/CPP/Windows/DLL.h +48 -0
  545. data/ext/p7zip/CPP/Windows/Defs.h +17 -0
  546. data/ext/p7zip/CPP/Windows/Error.cpp +58 -0
  547. data/ext/p7zip/CPP/Windows/Error.h +33 -0
  548. data/ext/p7zip/CPP/Windows/FileDir.cpp +927 -0
  549. data/ext/p7zip/CPP/Windows/FileDir.h +115 -0
  550. data/ext/p7zip/CPP/Windows/FileFind.cpp +604 -0
  551. data/ext/p7zip/CPP/Windows/FileFind.h +126 -0
  552. data/ext/p7zip/CPP/Windows/FileIO.cpp +475 -0
  553. data/ext/p7zip/CPP/Windows/FileIO.h +110 -0
  554. data/ext/p7zip/CPP/Windows/FileName.cpp +50 -0
  555. data/ext/p7zip/CPP/Windows/FileName.h +27 -0
  556. data/ext/p7zip/CPP/Windows/Menu.h +4 -0
  557. data/ext/p7zip/CPP/Windows/NtCheck.h +44 -0
  558. data/ext/p7zip/CPP/Windows/PropVariant.cpp +243 -0
  559. data/ext/p7zip/CPP/Windows/PropVariant.h +56 -0
  560. data/ext/p7zip/CPP/Windows/PropVariantConversions.cpp +142 -0
  561. data/ext/p7zip/CPP/Windows/PropVariantConversions.h +14 -0
  562. data/ext/p7zip/CPP/Windows/PropVariantUtils.cpp +78 -0
  563. data/ext/p7zip/CPP/Windows/PropVariantUtils.h +28 -0
  564. data/ext/p7zip/CPP/Windows/Registry.cpp +313 -0
  565. data/ext/p7zip/CPP/Windows/Registry.h +113 -0
  566. data/ext/p7zip/CPP/Windows/ResourceString.h +22 -0
  567. data/ext/p7zip/CPP/Windows/Shell.h +21 -0
  568. data/ext/p7zip/CPP/Windows/Synchronization.cpp +157 -0
  569. data/ext/p7zip/CPP/Windows/Synchronization.h +187 -0
  570. data/ext/p7zip/CPP/Windows/Synchronization2.h +218 -0
  571. data/ext/p7zip/CPP/Windows/System.cpp +166 -0
  572. data/ext/p7zip/CPP/Windows/System.h +16 -0
  573. data/ext/p7zip/CPP/Windows/Thread.h +41 -0
  574. data/ext/p7zip/CPP/Windows/Time.cpp +88 -0
  575. data/ext/p7zip/CPP/Windows/Time.h +21 -0
  576. data/ext/p7zip/CPP/Windows/Window.cpp +101 -0
  577. data/ext/p7zip/CPP/Windows/Window.h +43 -0
  578. data/ext/p7zip/CPP/include_windows/basetyps.h +19 -0
  579. data/ext/p7zip/CPP/include_windows/tchar.h +89 -0
  580. data/ext/p7zip/CPP/include_windows/windows.h +194 -0
  581. data/ext/p7zip/CPP/myWindows/StdAfx.h +124 -0
  582. data/ext/p7zip/CPP/myWindows/config.h +67 -0
  583. data/ext/p7zip/CPP/myWindows/initguid.h +4 -0
  584. data/ext/p7zip/CPP/myWindows/makefile +21 -0
  585. data/ext/p7zip/CPP/myWindows/makefile.depend +32 -0
  586. data/ext/p7zip/CPP/myWindows/makefile.list +28 -0
  587. data/ext/p7zip/CPP/myWindows/myAddExeFlag.cpp +20 -0
  588. data/ext/p7zip/CPP/myWindows/myGetTickCount.cpp +8 -0
  589. data/ext/p7zip/CPP/myWindows/myPrivate.h +17 -0
  590. data/ext/p7zip/CPP/myWindows/mySplitCommandLine.cpp +82 -0
  591. data/ext/p7zip/CPP/myWindows/test_emul.cpp +745 -0
  592. data/ext/p7zip/CPP/myWindows/wine_GetXXXDefaultLangID.cpp +741 -0
  593. data/ext/p7zip/CPP/myWindows/wine_date_and_time.cpp +434 -0
  594. data/ext/p7zip/ChangeLog +914 -0
  595. data/ext/p7zip/DOCS/7zC.txt +194 -0
  596. data/ext/p7zip/DOCS/7zFormat.txt +469 -0
  597. data/ext/p7zip/DOCS/License.txt +52 -0
  598. data/ext/p7zip/DOCS/MANUAL/commands/add.htm +87 -0
  599. data/ext/p7zip/DOCS/MANUAL/commands/bench.htm +79 -0
  600. data/ext/p7zip/DOCS/MANUAL/commands/delete.htm +59 -0
  601. data/ext/p7zip/DOCS/MANUAL/commands/extract.htm +91 -0
  602. data/ext/p7zip/DOCS/MANUAL/commands/extract_full.htm +68 -0
  603. data/ext/p7zip/DOCS/MANUAL/commands/index.htm +33 -0
  604. data/ext/p7zip/DOCS/MANUAL/commands/list.htm +77 -0
  605. data/ext/p7zip/DOCS/MANUAL/commands/style.css +232 -0
  606. data/ext/p7zip/DOCS/MANUAL/commands/test.htm +46 -0
  607. data/ext/p7zip/DOCS/MANUAL/commands/update.htm +66 -0
  608. data/ext/p7zip/DOCS/MANUAL/exit_codes.htm +27 -0
  609. data/ext/p7zip/DOCS/MANUAL/index.htm +29 -0
  610. data/ext/p7zip/DOCS/MANUAL/style.css +232 -0
  611. data/ext/p7zip/DOCS/MANUAL/switches/ar_exclude.htm +56 -0
  612. data/ext/p7zip/DOCS/MANUAL/switches/ar_include.htm +83 -0
  613. data/ext/p7zip/DOCS/MANUAL/switches/ar_no.htm +52 -0
  614. data/ext/p7zip/DOCS/MANUAL/switches/charset.htm +49 -0
  615. data/ext/p7zip/DOCS/MANUAL/switches/exclude.htm +60 -0
  616. data/ext/p7zip/DOCS/MANUAL/switches/include.htm +87 -0
  617. data/ext/p7zip/DOCS/MANUAL/switches/index.htm +64 -0
  618. data/ext/p7zip/DOCS/MANUAL/switches/large_pages.htm +50 -0
  619. data/ext/p7zip/DOCS/MANUAL/switches/list_tech.htm +36 -0
  620. data/ext/p7zip/DOCS/MANUAL/switches/method.htm +625 -0
  621. data/ext/p7zip/DOCS/MANUAL/switches/output_dir.htm +53 -0
  622. data/ext/p7zip/DOCS/MANUAL/switches/overwrite.htm +56 -0
  623. data/ext/p7zip/DOCS/MANUAL/switches/password.htm +54 -0
  624. data/ext/p7zip/DOCS/MANUAL/switches/recurse.htm +83 -0
  625. data/ext/p7zip/DOCS/MANUAL/switches/sfx.htm +156 -0
  626. data/ext/p7zip/DOCS/MANUAL/switches/ssc.htm +50 -0
  627. data/ext/p7zip/DOCS/MANUAL/switches/stdin.htm +55 -0
  628. data/ext/p7zip/DOCS/MANUAL/switches/stdout.htm +50 -0
  629. data/ext/p7zip/DOCS/MANUAL/switches/stop_switch.htm +31 -0
  630. data/ext/p7zip/DOCS/MANUAL/switches/style.css +232 -0
  631. data/ext/p7zip/DOCS/MANUAL/switches/type.htm +83 -0
  632. data/ext/p7zip/DOCS/MANUAL/switches/update.htm +176 -0
  633. data/ext/p7zip/DOCS/MANUAL/switches/volume.htm +49 -0
  634. data/ext/p7zip/DOCS/MANUAL/switches/working_dir.htm +55 -0
  635. data/ext/p7zip/DOCS/MANUAL/switches/yes.htm +48 -0
  636. data/ext/p7zip/DOCS/MANUAL/syntax.htm +120 -0
  637. data/ext/p7zip/DOCS/Methods.txt +152 -0
  638. data/ext/p7zip/DOCS/copying.txt +504 -0
  639. data/ext/p7zip/DOCS/history.txt +456 -0
  640. data/ext/p7zip/DOCS/lzma.txt +598 -0
  641. data/ext/p7zip/DOCS/readme.txt +181 -0
  642. data/ext/p7zip/DOCS/unRarLicense.txt +41 -0
  643. data/ext/p7zip/README +358 -0
  644. data/ext/p7zip/TODO +39 -0
  645. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/ChangeLog +41 -0
  646. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme +21 -0
  647. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/readme.u7z +30 -0
  648. data/ext/p7zip/contrib/VirtualFileSystemForMidnightCommander/u7z +133 -0
  649. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/README +21 -0
  650. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/check.sh +117 -0
  651. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/check/files.tar +0 -0
  652. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 +33 -0
  653. data/ext/p7zip/contrib/gzip-like_CLI_wrapper_for_7z/p7zip +144 -0
  654. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-shared +14 -0
  655. data/ext/p7zip/contrib/qnx630sp3/qnx630sp3-static +10 -0
  656. data/ext/p7zip/install.sh +206 -0
  657. data/ext/p7zip/install_local_context_menu.sh +18 -0
  658. data/ext/p7zip/integration_context_menu.txt +51 -0
  659. data/ext/p7zip/makefile +181 -0
  660. data/ext/p7zip/makefile.aix_gcc +22 -0
  661. data/ext/p7zip/makefile.beos +18 -0
  662. data/ext/p7zip/makefile.crc32 +8 -0
  663. data/ext/p7zip/makefile.cygwin +20 -0
  664. data/ext/p7zip/makefile.cygwin_asm +21 -0
  665. data/ext/p7zip/makefile.djgpp_old +21 -0
  666. data/ext/p7zip/makefile.djgpp_watt +47 -0
  667. data/ext/p7zip/makefile.freebsd5 +20 -0
  668. data/ext/p7zip/makefile.freebsd6 +20 -0
  669. data/ext/p7zip/makefile.glb +39 -0
  670. data/ext/p7zip/makefile.gprof +18 -0
  671. data/ext/p7zip/makefile.hpux-acc +17 -0
  672. data/ext/p7zip/makefile.hpux-acc_64 +19 -0
  673. data/ext/p7zip/makefile.hpux-gcc +21 -0
  674. data/ext/p7zip/makefile.linux_amd64 +22 -0
  675. data/ext/p7zip/makefile.linux_amd64_asm +24 -0
  676. data/ext/p7zip/makefile.linux_amd64_asm_icc +27 -0
  677. data/ext/p7zip/makefile.linux_any_cpu +22 -0
  678. data/ext/p7zip/makefile.linux_any_cpu_gcc_4.X +24 -0
  679. data/ext/p7zip/makefile.linux_clang_amd64 +22 -0
  680. data/ext/p7zip/makefile.linux_cross_arm +22 -0
  681. data/ext/p7zip/makefile.linux_gcc_2.95_no_need_for_libstdc +20 -0
  682. data/ext/p7zip/makefile.linux_other +23 -0
  683. data/ext/p7zip/makefile.linux_s390x +23 -0
  684. data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X +26 -0
  685. data/ext/p7zip/makefile.linux_x86_asm_gcc_4.X_fltk +26 -0
  686. data/ext/p7zip/makefile.linux_x86_asm_gcc_mudflap_4.X +26 -0
  687. data/ext/p7zip/makefile.linux_x86_asm_icc +25 -0
  688. data/ext/p7zip/makefile.linux_x86_icc +24 -0
  689. data/ext/p7zip/makefile.machine_base +22 -0
  690. data/ext/p7zip/makefile.macosx_32bits +20 -0
  691. data/ext/p7zip/makefile.macosx_32bits_asm +23 -0
  692. data/ext/p7zip/makefile.macosx_32bits_ppc +21 -0
  693. data/ext/p7zip/makefile.macosx_64bits +20 -0
  694. data/ext/p7zip/makefile.macosx_llvm_64bits +20 -0
  695. data/ext/p7zip/makefile.netbsd +21 -0
  696. data/ext/p7zip/makefile.netware_asm_gcc_3.X +41 -0
  697. data/ext/p7zip/makefile.oldmake +174 -0
  698. data/ext/p7zip/makefile.openbsd +20 -0
  699. data/ext/p7zip/makefile.openbsd_no_port +20 -0
  700. data/ext/p7zip/makefile.qnx_shared.bin +21 -0
  701. data/ext/p7zip/makefile.qnx_static +21 -0
  702. data/ext/p7zip/makefile.rules +661 -0
  703. data/ext/p7zip/makefile.solaris_sparc_CC_32 +21 -0
  704. data/ext/p7zip/makefile.solaris_sparc_CC_64 +23 -0
  705. data/ext/p7zip/makefile.solaris_sparc_gcc +21 -0
  706. data/ext/p7zip/makefile.solaris_x86 +19 -0
  707. data/ext/p7zip/makefile.tru64 +22 -0
  708. data/ext/seven_zip_ruby/depend +5 -0
  709. data/ext/seven_zip_ruby/extconf.rb +131 -0
  710. data/ext/seven_zip_ruby/guid_defs.h +29 -0
  711. data/ext/seven_zip_ruby/mutex.h +10 -0
  712. data/ext/seven_zip_ruby/posix/mutex.h +94 -0
  713. data/ext/seven_zip_ruby/seven_zip_archive.cpp +1614 -0
  714. data/ext/seven_zip_ruby/seven_zip_archive.h +515 -0
  715. data/ext/seven_zip_ruby/util_common.h +444 -0
  716. data/ext/seven_zip_ruby/utils.cpp +576 -0
  717. data/ext/seven_zip_ruby/utils.h +25 -0
  718. data/ext/seven_zip_ruby/win32/mutex.h +130 -0
  719. data/lib/seven_zip_ruby.rb +16 -0
  720. data/lib/seven_zip_ruby/7z.dll +0 -0
  721. data/lib/seven_zip_ruby/7z64.dll +0 -0
  722. data/lib/seven_zip_ruby/archive_info.rb +21 -0
  723. data/lib/seven_zip_ruby/entry_info.rb +45 -0
  724. data/lib/seven_zip_ruby/exception.rb +7 -0
  725. data/lib/seven_zip_ruby/seven_zip_reader.rb +180 -0
  726. data/lib/seven_zip_ruby/seven_zip_writer.rb +143 -0
  727. data/lib/seven_zip_ruby/update_info.rb +116 -0
  728. data/lib/seven_zip_ruby/version.rb +3 -0
  729. data/seven_zip_ruby.gemspec +26 -0
  730. data/spec/seven_zip_ruby_spec.rb +490 -0
  731. data/spec/seven_zip_ruby_spec_helper.rb +122 -0
  732. metadata +820 -0
@@ -0,0 +1,48 @@
1
+ // Windows/DLL.h
2
+
3
+ #ifndef __WINDOWS_DLL_H
4
+ #define __WINDOWS_DLL_H
5
+
6
+ #include "../Common/MyString.h"
7
+
8
+ typedef void * HMODULE;
9
+
10
+ typedef int (*FARPROC)();
11
+
12
+ namespace NWindows {
13
+ namespace NDLL {
14
+
15
+ class CLibrary
16
+ {
17
+ bool LoadOperations(HMODULE newModule);
18
+ HMODULE _module;
19
+ public:
20
+ operator HMODULE() const { return _module; }
21
+ HMODULE* operator&() { return &_module; }
22
+
23
+
24
+ CLibrary():_module(NULL) {};
25
+ ~CLibrary();
26
+
27
+ bool Free();
28
+
29
+ void Attach(HMODULE m)
30
+ {
31
+ Free();
32
+ _module = m;
33
+ }
34
+ HMODULE Detach()
35
+ {
36
+ HMODULE m = _module;
37
+ _module = NULL;
38
+ return m;
39
+ }
40
+
41
+
42
+ bool Load(LPCTSTR fileName);
43
+ FARPROC GetProc(LPCSTR procName) const;
44
+ };
45
+
46
+ }}
47
+
48
+ #endif
@@ -0,0 +1,17 @@
1
+ // Windows/Defs.h
2
+
3
+ #ifndef __WINDOWS_DEFS_H
4
+ #define __WINDOWS_DEFS_H
5
+
6
+ #include "../Common/MyWindows.h"
7
+
8
+ // #ifdef _WIN32
9
+ inline bool LRESULTToBool(LRESULT v) { return (v != FALSE); }
10
+ inline bool BOOLToBool(BOOL v) { return (v != FALSE); }
11
+ inline BOOL BoolToBOOL(bool v) { return (v ? TRUE: FALSE); }
12
+ // #endif
13
+
14
+ inline VARIANT_BOOL BoolToVARIANT_BOOL(bool v) { return (v ? VARIANT_TRUE: VARIANT_FALSE); }
15
+ inline bool VARIANT_BOOLToBool(VARIANT_BOOL v) { return (v != VARIANT_FALSE); }
16
+
17
+ #endif
@@ -0,0 +1,58 @@
1
+ // Windows/Error.h
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "Windows/Error.h"
6
+ #include "Common/StringConvert.h"
7
+
8
+ namespace NWindows {
9
+ namespace NError {
10
+
11
+ bool MyFormatMessage(DWORD messageID, CSysString &message)
12
+ {
13
+ const char * txt = 0;
14
+ AString msg;
15
+
16
+ switch(messageID) {
17
+ case ERROR_NO_MORE_FILES : txt = "No more files"; break ;
18
+ case E_NOTIMPL : txt = "E_NOTIMPL"; break ;
19
+ case E_NOINTERFACE : txt = "E_NOINTERFACE"; break ;
20
+ case E_ABORT : txt = "E_ABORT"; break ;
21
+ case E_FAIL : txt = "E_FAIL"; break ;
22
+ case STG_E_INVALIDFUNCTION : txt = "STG_E_INVALIDFUNCTION"; break ;
23
+ case E_OUTOFMEMORY : txt = "E_OUTOFMEMORY"; break ;
24
+ case E_INVALIDARG : txt = "E_INVALIDARG"; break ;
25
+ default:
26
+ txt = strerror(messageID);
27
+ }
28
+ if (txt) {
29
+ msg = txt;
30
+ } else {
31
+ char msgBuf[256];
32
+ snprintf(msgBuf,sizeof(msgBuf),"error #%x",(unsigned)messageID);
33
+ msgBuf[sizeof(msgBuf)-1] = 0;
34
+ msg = msgBuf;
35
+ }
36
+
37
+ msg += " ";
38
+
39
+ #ifdef _UNICODE
40
+ message = MultiByteToUnicodeString(msg);
41
+ #else
42
+ message = msg;
43
+ #endif
44
+ return true;
45
+ }
46
+
47
+ #ifndef _UNICODE
48
+ bool MyFormatMessage(DWORD messageID, UString &message)
49
+ {
50
+ CSysString messageSys;
51
+ bool result = MyFormatMessage(messageID, messageSys);
52
+ message = GetUnicodeString(messageSys);
53
+ return result;
54
+ }
55
+ #endif
56
+
57
+ }}
58
+
@@ -0,0 +1,33 @@
1
+ // Windows/Error.h
2
+
3
+ #ifndef __WINDOWS_ERROR_H
4
+ #define __WINDOWS_ERROR_H
5
+
6
+ #include "Common/MyString.h"
7
+
8
+ namespace NWindows {
9
+ namespace NError {
10
+
11
+ bool MyFormatMessage(DWORD messageID, CSysString &message);
12
+ inline CSysString MyFormatMessage(DWORD messageID)
13
+ {
14
+ CSysString message;
15
+ MyFormatMessage(messageID, message);
16
+ return message;
17
+ }
18
+ #ifdef _UNICODE
19
+ inline UString MyFormatMessageW(DWORD messageID)
20
+ { return MyFormatMessage(messageID); }
21
+ #else
22
+ bool MyFormatMessage(DWORD messageID, UString &message);
23
+ inline UString MyFormatMessageW(DWORD messageID)
24
+ {
25
+ UString message;
26
+ MyFormatMessage(messageID, message);
27
+ return message;
28
+ }
29
+ #endif
30
+
31
+ }}
32
+
33
+ #endif
@@ -0,0 +1,927 @@
1
+ // Windows/FileDir.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "FileDir.h"
6
+ #include "FileName.h"
7
+ #include "FileFind.h"
8
+ #include "Defs.h"
9
+ #include "../Common/StringConvert.h"
10
+ #include "../Common/IntToString.h"
11
+
12
+ #define NEED_NAME_WINDOWS_TO_UNIX
13
+ #include "myPrivate.h"
14
+ #include "Windows/Synchronization.h"
15
+
16
+ #include <unistd.h> // rmdir
17
+ #include <errno.h>
18
+
19
+ #include <sys/stat.h> // mkdir
20
+ #include <sys/types.h>
21
+ #include <fcntl.h>
22
+
23
+ #include <utime.h>
24
+
25
+ // #define TRACEN(u) u;
26
+ #define TRACEN(u) /* */
27
+
28
+ class Umask
29
+ {
30
+ public:
31
+ mode_t current_umask;
32
+ mode_t mask;
33
+ Umask() {
34
+ current_umask = umask (0); /* get and set the umask */
35
+ umask(current_umask); /* restore the umask */
36
+ mask = 0777 & (~current_umask);
37
+ }
38
+ };
39
+
40
+ static Umask gbl_umask;
41
+
42
+ #ifdef _UNICODE
43
+ AString nameWindowToUnix2(LPCWSTR name) // FIXME : optimization ?
44
+ {
45
+ AString astr = UnicodeStringToMultiByte(name);
46
+ return AString(nameWindowToUnix((const char *)astr));
47
+ }
48
+ #endif
49
+
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
54
+ if (name == 0) return 0;
55
+
56
+ DWORD name_len = lstrlen(name);
57
+
58
+ if (name[0] == '/') {
59
+ DWORD ret = name_len+2;
60
+ if (ret >= len) {
61
+ TRACEN((printf("GetFullPathNameA(%ls,%d,)=0000 (case 0)\n",name, (int)len)))
62
+ return 0;
63
+ }
64
+ lstrcpy(buffer,L"c:");
65
+ lstrcat(buffer,name);
66
+
67
+ *lastpart=buffer;
68
+ TCHAR *ptr=buffer;
69
+ while (*ptr) {
70
+ if (*ptr == '/')
71
+ *lastpart=ptr+1;
72
+ ptr++;
73
+ }
74
+ TRACEN((printf("GetFullPathNameA(%s,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
75
+ return ret;
76
+ }
77
+ if (isascii(name[0]) && (name[1] == ':')) { // FIXME isascii
78
+ DWORD ret = name_len;
79
+ if (ret >= len) {
80
+ TRACEN((printf("GetFullPathNameA(%ls,%d,)=0000 (case 1)\n",name, (int)len)))
81
+ return 0;
82
+ }
83
+ lstrcpy(buffer,name);
84
+
85
+ *lastpart=buffer;
86
+ TCHAR *ptr=buffer;
87
+ while (*ptr) {
88
+ if (*ptr == '/')
89
+ *lastpart=ptr+1;
90
+ ptr++;
91
+ }
92
+ TRACEN((printf("GetFullPathNameA(%sl,%d,%ls,%ls)=%d\n",name, (int)len,buffer, *lastpart,(int)ret)))
93
+ return ret;
94
+ }
95
+
96
+ // name is a relative pathname.
97
+ //
98
+ if (len < 2) {
99
+ TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 2)\n",name, (int)len)))
100
+ return 0;
101
+ }
102
+
103
+ DWORD ret = 0;
104
+ char begin[MAX_PATHNAME_LEN];
105
+ /* DWORD begin_len = GetCurrentDirectoryA(MAX_PATHNAME_LEN,begin); */
106
+ DWORD begin_len = 0;
107
+ begin[0]='c';
108
+ begin[1]=':';
109
+ char * cret = getcwd(begin+2, MAX_PATHNAME_LEN - 3);
110
+ if (cret) {
111
+ begin_len = strlen(begin);
112
+ }
113
+
114
+ if (begin_len >= 1) {
115
+ // strlen(begin) + strlen("/") + strlen(name)
116
+ ret = begin_len + 1 + name_len;
117
+
118
+ if (ret >= len) {
119
+ TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 4)\n",name, (int)len)))
120
+ return 0;
121
+ }
122
+ UString wbegin = GetUnicodeString(begin);
123
+ lstrcpy(buffer,wbegin);
124
+ lstrcat(buffer,L"/");
125
+ lstrcat(buffer,name);
126
+
127
+ *lastpart=buffer + begin_len + 1;
128
+ TCHAR *ptr=buffer;
129
+ while (*ptr) {
130
+ if (*ptr == '/')
131
+ *lastpart=ptr+1;
132
+ ptr++;
133
+ }
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)))
226
+ } else {
227
+ ret = 0;
228
+ TRACEN((printf("GetFullPathNameA(%s,%d,)=0000 (case 5)\n",name, (int)len)))
229
+ }
230
+ return ret;
231
+ }
232
+
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
+ static int copy_fd(int fin,int fout)
265
+ {
266
+ char buffer[16384];
267
+ ssize_t ret_in;
268
+ ssize_t ret_out;
269
+
270
+ do {
271
+ ret_out = -1;
272
+ do {
273
+ ret_in = read(fin, buffer,sizeof(buffer));
274
+ } while (ret_in < 0 && (errno == EINTR));
275
+ if (ret_in >= 1) {
276
+ do {
277
+ ret_out = write (fout, buffer, ret_in);
278
+ } while (ret_out < 0 && (errno == EINTR));
279
+ } else if (ret_in == 0) {
280
+ ret_out = 0;
281
+ }
282
+ } while (ret_out >= 1);
283
+ return ret_out;
284
+ }
285
+
286
+ static BOOL CopyFile(const char *src,const char *dst)
287
+ {
288
+ int ret = -1;
289
+
290
+ #ifdef O_BINARY
291
+ int flags = O_BINARY;
292
+ #else
293
+ int flags = 0;
294
+ #endif
295
+
296
+ #ifdef O_LARGEFILE
297
+ flags |= O_LARGEFILE;
298
+ #endif
299
+
300
+ int fout = open(dst,O_CREAT | O_WRONLY | O_EXCL | flags, 0600);
301
+ if (fout != -1)
302
+ {
303
+ int fin = open(src,O_RDONLY | flags , 0600);
304
+ if (fin != -1)
305
+ {
306
+ ret = copy_fd(fin,fout);
307
+ if (ret == 0) ret = close(fin);
308
+ else close(fin);
309
+ }
310
+ if (ret == 0) ret = close(fout);
311
+ else close(fout);
312
+ }
313
+ if (ret == 0) return TRUE;
314
+ return FALSE;
315
+ }
316
+
317
+ /*****************************************************************************************/
318
+
319
+
320
+ namespace NWindows {
321
+ namespace NFile {
322
+ namespace NDirectory {
323
+
324
+
325
+ bool MySetCurrentDirectory(LPCWSTR wpath)
326
+ {
327
+ AString path = UnicodeStringToMultiByte(wpath);
328
+
329
+ return chdir((const char*)path) == 0;
330
+ }
331
+
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
+
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
351
+
352
+
353
+ bool MyGetCurrentDirectory(CSysString &resultPath)
354
+ {
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)
360
+ {
361
+ #ifdef _UNICODE
362
+ resultPath = GetUnicodeString(begin);
363
+ #else
364
+ resultPath = begin;
365
+ #endif
366
+ return true;
367
+ }
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)
384
+ {
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;
402
+ }
403
+ return true;
404
+ }
405
+
406
+ bool MyRemoveDirectory(LPCTSTR pathName)
407
+ {
408
+ return BOOLToBool(::RemoveDirectory(pathName));
409
+ }
410
+
411
+ bool SetDirTime(LPCWSTR fileName, const FILETIME * /* creationTime */ ,
412
+ const FILETIME *lpLastAccessTime, const FILETIME *lpLastWriteTime)
413
+ {
414
+ AString cfilename = UnicodeStringToMultiByte(fileName);
415
+ const char * unix_filename = nameWindowToUnix((const char *)cfilename);
416
+
417
+ struct utimbuf buf;
418
+
419
+ struct stat oldbuf;
420
+ int ret = stat(unix_filename,&oldbuf);
421
+ if (ret == 0) {
422
+ buf.actime = oldbuf.st_atime;
423
+ buf.modtime = oldbuf.st_mtime;
424
+ } else {
425
+ time_t current_time = time(0);
426
+ buf.actime = current_time;
427
+ buf.modtime = current_time;
428
+ }
429
+
430
+ if (lpLastAccessTime)
431
+ {
432
+ LARGE_INTEGER ltime;
433
+ DWORD dw;
434
+ ltime.QuadPart = lpLastAccessTime->dwHighDateTime;
435
+ ltime.QuadPart = (ltime.QuadPart << 32) | lpLastAccessTime->dwLowDateTime;
436
+ RtlTimeToSecondsSince1970( &ltime, &dw );
437
+ buf.actime = dw;
438
+ }
439
+
440
+ if (lpLastWriteTime)
441
+ {
442
+ LARGE_INTEGER ltime;
443
+ DWORD dw;
444
+ ltime.QuadPart = lpLastWriteTime->dwHighDateTime;
445
+ ltime.QuadPart = (ltime.QuadPart << 32) | lpLastWriteTime->dwLowDateTime;
446
+ RtlTimeToSecondsSince1970( &ltime, &dw );
447
+ buf.modtime = dw;
448
+ }
449
+
450
+ /* ret = */ utime(unix_filename, &buf);
451
+
452
+ return true;
453
+ }
454
+
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));
470
+ }
471
+ #endif
472
+
473
+
474
+ static int convert_to_symlink(const char * name) {
475
+ FILE *file = fopen(name,"rb");
476
+ if (file) {
477
+ char buf[MAX_PATHNAME_LEN+1];
478
+ char * ret = fgets(buf,sizeof(buf)-1,file);
479
+ fclose(file);
480
+ if (ret) {
481
+ int ir = unlink(name);
482
+ if (ir == 0) {
483
+ ir = symlink(buf,name);
484
+ }
485
+ return ir;
486
+ }
487
+ }
488
+ return -1;
489
+ }
490
+
491
+ bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes)
492
+ {
493
+ if (!fileName) {
494
+ SetLastError(ERROR_PATH_NOT_FOUND);
495
+ TRACEN((printf("MySetFileAttributes(NULL,%d) : false-1\n",fileAttributes)))
496
+ return false;
497
+ }
498
+ #ifdef _UNICODE
499
+ AString name = nameWindowToUnix2(fileName);
500
+ #else
501
+ const char * name = nameWindowToUnix(fileName);
502
+ #endif
503
+ struct stat stat_info;
504
+ #ifdef ENV_HAVE_LSTAT
505
+ if (global_use_lstat) {
506
+ if(lstat(name,&stat_info)!=0) {
507
+ TRACEN((printf("MySetFileAttributes(%s,%d) : false-2-1\n",name,fileAttributes)))
508
+ return false;
509
+ }
510
+ } else
511
+ #endif
512
+ {
513
+ if(stat(name,&stat_info)!=0) {
514
+ TRACEN((printf("MySetFileAttributes(%s,%d) : false-2-2\n",name,fileAttributes)))
515
+ return false;
516
+ }
517
+ }
518
+
519
+ if (fileAttributes & FILE_ATTRIBUTE_UNIX_EXTENSION) {
520
+ stat_info.st_mode = fileAttributes >> 16;
521
+ #ifdef ENV_HAVE_LSTAT
522
+ 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)))
525
+ return false;
526
+ }
527
+ } else
528
+ #endif
529
+ 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)))
531
+ chmod(name,stat_info.st_mode & gbl_umask.mask);
532
+ } else if (S_ISDIR(stat_info.st_mode)) {
533
+ // user/7za must be able to create files in this directory
534
+ 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)))
536
+ chmod(name,stat_info.st_mode & gbl_umask.mask);
537
+ }
538
+ #ifdef ENV_HAVE_LSTAT
539
+ } else if (!S_ISLNK(stat_info.st_mode)) {
540
+ // do not use chmod on a link
541
+ #else
542
+ } else {
543
+ #endif
544
+
545
+ /* Only Windows Attributes */
546
+ if( S_ISDIR(stat_info.st_mode)) {
547
+ /* 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)))
549
+ chmod(name,stat_info.st_mode & gbl_umask.mask);
550
+ } else {
551
+ 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)))
553
+ chmod(name,stat_info.st_mode & gbl_umask.mask);
554
+ }
555
+ }
556
+ TRACEN((printf("MySetFileAttributes(%s,%d) : true\n",name,fileAttributes)))
557
+
558
+ return true;
559
+ }
560
+
561
+ bool MyCreateDirectory(LPCTSTR pathName)
562
+ {
563
+ if (!pathName || !*pathName) {
564
+ SetLastError(ERROR_PATH_NOT_FOUND);
565
+ return false;
566
+ }
567
+
568
+ #ifdef _UNICODE
569
+ AString name = nameWindowToUnix2(pathName);
570
+ #else
571
+ const char * name = nameWindowToUnix(pathName);
572
+ #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
+
580
+ #ifndef _UNICODE
581
+ bool MyCreateDirectory(LPCWSTR pathName)
582
+ {
583
+ return MyCreateDirectory(UnicodeStringToMultiByte(pathName, CP_ACP));
584
+ }
585
+ #endif
586
+
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)
600
+ {
601
+ if(MyCreateDirectory(pathName))
602
+ break;
603
+ if(::GetLastError() == ERROR_ALREADY_EXISTS)
604
+ {
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;
613
+ }
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;
629
+ }
630
+ return true;
631
+ }
632
+
633
+ #ifndef _UNICODE
634
+
635
+ bool CreateComplexDirectory(LPCWSTR _aPathName)
636
+ {
637
+ UString pathName = _aPathName;
638
+ int pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR);
639
+ if (pos > 0 && pos == pathName.Length() - 1)
640
+ {
641
+ if (pathName.Length() == 3 && pathName[1] == L':')
642
+ return true; // Disk folder;
643
+ pathName.Delete(pos);
644
+ }
645
+ UString pathName2 = pathName;
646
+ pos = pathName.Length();
647
+ while(true)
648
+ {
649
+ if(MyCreateDirectory(pathName))
650
+ break;
651
+ if(::GetLastError() == ERROR_ALREADY_EXISTS)
652
+ {
653
+ #ifdef _WIN32 // FIXED for supporting symbolic link instead of a directory
654
+ NFind::CFileInfoW fileInfo;
655
+ if (!NFind::FindFile(pathName, fileInfo)) // For network folders
656
+ return true;
657
+ if (!fileInfo.IsDir())
658
+ return false;
659
+ #endif
660
+ break;
661
+ }
662
+ pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR);
663
+ if (pos < 0 || pos == 0)
664
+ return false;
665
+ if (pathName[pos - 1] == L':')
666
+ return false;
667
+ pathName = pathName.Left(pos);
668
+ }
669
+ pathName = pathName2;
670
+ while(pos < pathName.Length())
671
+ {
672
+ pos = pathName.Find(WCHAR_PATH_SEPARATOR, pos + 1);
673
+ if (pos < 0)
674
+ pos = pathName.Length();
675
+ if(!MyCreateDirectory(pathName.Left(pos)))
676
+ return false;
677
+ }
678
+ return true;
679
+ }
680
+
681
+ #endif
682
+
683
+ bool DeleteFileAlways(LPCTSTR name)
684
+ {
685
+ if (!name || !*name) {
686
+ SetLastError(ERROR_PATH_NOT_FOUND);
687
+ return false;
688
+ }
689
+ #ifdef _UNICODE
690
+ AString unixname = nameWindowToUnix2(name);
691
+ #else
692
+ const char * unixname = nameWindowToUnix(name);
693
+ #endif
694
+ bool bret = false;
695
+ if (remove(unixname) == 0) bret = true;
696
+ TRACEN((printf("DeleteFileAlways(%s)=%d\n",unixname,(int)bret)))
697
+ return bret;
698
+ }
699
+
700
+ #ifndef _UNICODE
701
+ bool DeleteFileAlways(LPCWSTR name)
702
+ {
703
+ return DeleteFileAlways(UnicodeStringToMultiByte(name, CP_ACP));
704
+ }
705
+ #endif
706
+
707
+
708
+ static bool RemoveDirectorySubItems2(const UString &pathPrefix, const NFind::CFileInfoW &fileInfo)
709
+ {
710
+ if (fileInfo.IsDir())
711
+ return RemoveDirectoryWithSubItems(pathPrefix + fileInfo.Name);
712
+ return DeleteFileAlways(pathPrefix + fileInfo.Name);
713
+ }
714
+
715
+ bool RemoveDirectoryWithSubItems(const UString &path)
716
+ {
717
+ NFind::CFileInfoW fileInfo;
718
+ UString pathPrefix = path + NName::kDirDelimiter;
719
+ {
720
+ NFind::CEnumeratorW enumerator(pathPrefix + TCHAR(NName::kAnyStringWildcard));
721
+ while (enumerator.Next(fileInfo))
722
+ if (!RemoveDirectorySubItems2(pathPrefix, fileInfo))
723
+ return false;
724
+ }
725
+ if (!MySetFileAttributes(path, 0))
726
+ return false;
727
+ return MyRemoveDirectory(path);
728
+ }
729
+
730
+ #ifndef _WIN32_WCE
731
+
732
+ bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath,
733
+ int &fileNamePartStartIndex)
734
+ {
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;
746
+ return true;
747
+ }
748
+
749
+ #ifndef _UNICODE
750
+ bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath,
751
+ int &fileNamePartStartIndex)
752
+ {
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;
765
+ }
766
+ #endif
767
+
768
+
769
+ bool MyGetFullPathName(LPCTSTR fileName, CSysString &path)
770
+ {
771
+ int index;
772
+ return MyGetFullPathName(fileName, path, index);
773
+ }
774
+
775
+ #ifndef _UNICODE
776
+ bool MyGetFullPathName(LPCWSTR fileName, UString &path)
777
+ {
778
+ int index;
779
+ return MyGetFullPathName(fileName, path, index);
780
+ }
781
+ #endif
782
+
783
+ #endif
784
+
785
+ /* needed to find .DLL/.so and SFX */
786
+ bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, UString &resultPath)
787
+ {
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;
818
+ }
819
+
820
+ #ifndef _UNICODE
821
+ bool MyGetTempPath(CSysString &path)
822
+ {
823
+ path = "c:/tmp/"; // final '/' is needed
824
+ return true;
825
+ }
826
+ #endif
827
+
828
+ bool MyGetTempPath(UString &path)
829
+ {
830
+ path = L"c:/tmp/"; // final '/' is needed
831
+ return true;
832
+ }
833
+
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)
844
+ {
845
+ static UInt32 memo_count = 0;
846
+ UInt32 count;
847
+
848
+ g_CountCriticalSection.Enter();
849
+ count = memo_count++;
850
+ g_CountCriticalSection.Leave();
851
+
852
+ Remove();
853
+ /* UINT number = ::GetTempFileName(dirPath, prefix, 0, path.GetBuffer(MAX_PATH)); */
854
+ UINT number = (UINT)getpid();
855
+
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;
865
+ _mustBeDeleted = true;
866
+
867
+ return number;
868
+ }
869
+
870
+ bool CTempFile::Create(LPCTSTR prefix, CSysString &resultPath)
871
+ {
872
+ CSysString tempPath;
873
+ if (!MyGetTempPath(tempPath))
874
+ return false;
875
+ if (Create(tempPath, prefix, resultPath) != 0)
876
+ return true;
877
+ return false;
878
+ }
879
+
880
+
881
+ bool CTempFile::Remove()
882
+ {
883
+ if (!_mustBeDeleted)
884
+ return true;
885
+ _mustBeDeleted = !DeleteFileAlways(_fileName);
886
+ return !_mustBeDeleted;
887
+ }
888
+
889
+ bool CreateTempDirectory(LPCWSTR prefix, UString &dirName)
890
+ {
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))
901
+ 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;
917
+ }
918
+ }
919
+
920
+ bool CTempDirectory::Create(LPCTSTR prefix)
921
+ {
922
+ Remove();
923
+ return (_mustBeDeleted = CreateTempDirectory(prefix, _tempDir));
924
+ }
925
+
926
+
927
+ }}}