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,36 @@
1
+ // Archive/Zip/Header.h
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "ZipHeader.h"
6
+
7
+ namespace NArchive {
8
+ namespace NZip {
9
+
10
+ namespace NSignature
11
+ {
12
+ UInt32 kLocalFileHeader = 0x04034B50 + 1;
13
+ UInt32 kDataDescriptor = 0x08074B50 + 1;
14
+ UInt32 kCentralFileHeader = 0x02014B50 + 1;
15
+ UInt32 kEndOfCentralDir = 0x06054B50 + 1;
16
+ UInt32 kZip64EndOfCentralDir = 0x06064B50 + 1;
17
+ UInt32 kZip64EndOfCentralDirLocator = 0x07064B50 + 1;
18
+
19
+ class CMarkersInitializer
20
+ {
21
+ public:
22
+ CMarkersInitializer()
23
+ {
24
+ kLocalFileHeader--;
25
+ kDataDescriptor--;
26
+ kCentralFileHeader--;
27
+ kEndOfCentralDir--;
28
+ kZip64EndOfCentralDir--;
29
+ kZip64EndOfCentralDirLocator--;
30
+ }
31
+ };
32
+ static CMarkersInitializer g_MarkerInitializer;
33
+ }
34
+
35
+ }}
36
+
@@ -0,0 +1,284 @@
1
+ // Archive/Zip/Header.h
2
+
3
+ #ifndef __ARCHIVE_ZIP_HEADER_H
4
+ #define __ARCHIVE_ZIP_HEADER_H
5
+
6
+ #include "Common/Types.h"
7
+
8
+ namespace NArchive {
9
+ namespace NZip {
10
+
11
+ namespace NSignature
12
+ {
13
+ extern UInt32 kLocalFileHeader;
14
+ extern UInt32 kDataDescriptor;
15
+ extern UInt32 kCentralFileHeader;
16
+ extern UInt32 kEndOfCentralDir;
17
+ extern UInt32 kZip64EndOfCentralDir;
18
+ extern UInt32 kZip64EndOfCentralDirLocator;
19
+
20
+ static const UInt32 kMarkerSize = 4;
21
+ }
22
+
23
+ const UInt32 kEcdSize = 22;
24
+ const UInt32 kZip64EcdSize = 44;
25
+ const UInt32 kZip64EcdLocatorSize = 20;
26
+ /*
27
+ struct CEndOfCentralDirectoryRecord
28
+ {
29
+ UInt16 ThisDiskNumber;
30
+ UInt16 StartCentralDirectoryDiskNumber;
31
+ UInt16 NumEntriesInCentaralDirectoryOnThisDisk;
32
+ UInt16 NumEntriesInCentaralDirectory;
33
+ UInt32 CentralDirectorySize;
34
+ UInt32 CentralDirectoryStartOffset;
35
+ UInt16 CommentSize;
36
+ };
37
+
38
+ struct CEndOfCentralDirectoryRecordFull
39
+ {
40
+ UInt32 Signature;
41
+ CEndOfCentralDirectoryRecord Header;
42
+ };
43
+ */
44
+
45
+ namespace NFileHeader
46
+ {
47
+ /*
48
+ struct CVersion
49
+ {
50
+ Byte Version;
51
+ Byte HostOS;
52
+ };
53
+ */
54
+
55
+ namespace NCompressionMethod
56
+ {
57
+ enum EType
58
+ {
59
+ kStored = 0,
60
+ kShrunk = 1,
61
+ kReduced1 = 2,
62
+ kReduced2 = 3,
63
+ kReduced3 = 4,
64
+ kReduced4 = 5,
65
+ kImploded = 6,
66
+ kReservedTokenizing = 7, // reserved for tokenizing
67
+ kDeflated = 8,
68
+ kDeflated64 = 9,
69
+ kPKImploding = 10,
70
+
71
+ kBZip2 = 12,
72
+ kLZMA = 14,
73
+ kTerse = 18,
74
+ kLz77 = 19,
75
+ kJpeg = 0x60,
76
+ kWavPack = 0x61,
77
+ kPPMd = 0x62,
78
+ kWzAES = 0x63
79
+ };
80
+ const int kNumCompressionMethods = 11;
81
+ const Byte kMadeByProgramVersion = 63;
82
+
83
+ const Byte kExtractVersion_Default = 10;
84
+ const Byte kExtractVersion_Dir = 20;
85
+ const Byte kExtractVersion_ZipCrypto = 20;
86
+ const Byte kExtractVersion_Deflate = 20;
87
+ const Byte kExtractVersion_Deflate64 = 21;
88
+ const Byte kExtractVersion_Zip64 = 45;
89
+ const Byte kExtractVersion_BZip2 = 46;
90
+ const Byte kExtractVersion_Aes = 51;
91
+ const Byte kExtractVersion_LZMA = 63;
92
+ const Byte kExtractVersion_PPMd = 63;
93
+
94
+ // const Byte kSupportedVersion = 20;
95
+ }
96
+
97
+ namespace NExtraID
98
+ {
99
+ enum
100
+ {
101
+ kZip64 = 0x01,
102
+ kNTFS = 0x0A,
103
+ kStrongEncrypt = 0x17,
104
+ kUnixTime = 0x5455,
105
+ kWzAES = 0x9901
106
+ };
107
+ }
108
+
109
+ namespace NNtfsExtra
110
+ {
111
+ const UInt16 kTagTime = 1;
112
+ enum
113
+ {
114
+ kMTime = 0,
115
+ kATime,
116
+ kCTime
117
+ };
118
+ }
119
+
120
+ namespace NUnixTime
121
+ {
122
+ enum
123
+ {
124
+ kMTime = 0,
125
+ kATime,
126
+ kCTime
127
+ };
128
+ }
129
+
130
+ const UInt32 kLocalBlockSize = 26;
131
+ /*
132
+ struct CLocalBlock
133
+ {
134
+ CVersion ExtractVersion;
135
+
136
+ UInt16 Flags;
137
+ UInt16 CompressionMethod;
138
+ UInt32 Time;
139
+ UInt32 FileCRC;
140
+ UInt32 PackSize;
141
+ UInt32 UnPackSize;
142
+ UInt16 NameSize;
143
+ UInt16 ExtraSize;
144
+ };
145
+ */
146
+
147
+ const UInt32 kDataDescriptorSize = 16;
148
+ // const UInt32 kDataDescriptor64Size = 16 + 8;
149
+ /*
150
+ struct CDataDescriptor
151
+ {
152
+ UInt32 Signature;
153
+ UInt32 FileCRC;
154
+ UInt32 PackSize;
155
+ UInt32 UnPackSize;
156
+ };
157
+
158
+ struct CLocalBlockFull
159
+ {
160
+ UInt32 Signature;
161
+ CLocalBlock Header;
162
+ };
163
+ */
164
+
165
+ const UInt32 kCentralBlockSize = 42;
166
+ /*
167
+ struct CBlock
168
+ {
169
+ CVersion MadeByVersion;
170
+ CVersion ExtractVersion;
171
+ UInt16 Flags;
172
+ UInt16 CompressionMethod;
173
+ UInt32 Time;
174
+ UInt32 FileCRC;
175
+ UInt32 PackSize;
176
+ UInt32 UnPackSize;
177
+ UInt16 NameSize;
178
+ UInt16 ExtraSize;
179
+ UInt16 CommentSize;
180
+ UInt16 DiskNumberStart;
181
+ UInt16 InternalAttributes;
182
+ UInt32 ExternalAttributes;
183
+ UInt32 LocalHeaderOffset;
184
+ };
185
+
186
+ struct CBlockFull
187
+ {
188
+ UInt32 Signature;
189
+ CBlock Header;
190
+ };
191
+ */
192
+
193
+ namespace NFlags
194
+ {
195
+ const int kEncrypted = 1 << 0;
196
+ const int kLzmaEOS = 1 << 1;
197
+ const int kDescriptorUsedMask = 1 << 3;
198
+ const int kStrongEncrypted = 1 << 6;
199
+ const int kUtf8 = 1 << 11;
200
+
201
+ const int kImplodeDictionarySizeMask = 1 << 1;
202
+ const int kImplodeLiteralsOnMask = 1 << 2;
203
+
204
+ const int kDeflateTypeBitStart = 1;
205
+ const int kNumDeflateTypeBits = 2;
206
+ const int kNumDeflateTypes = (1 << kNumDeflateTypeBits);
207
+ const int kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1;
208
+ }
209
+
210
+ namespace NHostOS
211
+ {
212
+ enum EEnum
213
+ {
214
+ kFAT = 0,
215
+ kAMIGA = 1,
216
+ kVMS = 2, // VAX/VMS
217
+ kUnix = 3,
218
+ kVM_CMS = 4,
219
+ kAtari = 5, // what if it's a minix filesystem? [cjh]
220
+ kHPFS = 6, // filesystem used by OS/2 (and NT 3.x)
221
+ kMac = 7,
222
+ kZ_System = 8,
223
+ kCPM = 9,
224
+ kTOPS20 = 10, // pkzip 2.50 NTFS
225
+ kNTFS = 11, // filesystem used by Windows NT
226
+ kQDOS = 12, // SMS/QDOS
227
+ kAcorn = 13, // Archimedes Acorn RISC OS
228
+ kVFAT = 14, // filesystem used by Windows 95, NT
229
+ kMVS = 15,
230
+ kBeOS = 16, // hybrid POSIX/database filesystem
231
+ kTandem = 17,
232
+ kOS400 = 18,
233
+ kOSX = 19
234
+ };
235
+ }
236
+ namespace NUnixAttribute
237
+ {
238
+ const UInt32 kIFMT = 0170000; /* Unix file type mask */
239
+
240
+ const UInt32 kIFDIR = 0040000; /* Unix directory */
241
+ const UInt32 kIFREG = 0100000; /* Unix regular file */
242
+ const UInt32 kIFSOCK = 0140000; /* Unix socket (BSD, not SysV or Amiga) */
243
+ const UInt32 kIFLNK = 0120000; /* Unix symbolic link (not SysV, Amiga) */
244
+ const UInt32 kIFBLK = 0060000; /* Unix block special (not Amiga) */
245
+ const UInt32 kIFCHR = 0020000; /* Unix character special (not Amiga) */
246
+ const UInt32 kIFIFO = 0010000; /* Unix fifo (BCC, not MSC or Amiga) */
247
+
248
+ const UInt32 kISUID = 04000; /* Unix set user id on execution */
249
+ const UInt32 kISGID = 02000; /* Unix set group id on execution */
250
+ const UInt32 kISVTX = 01000; /* Unix directory permissions control */
251
+ const UInt32 kENFMT = kISGID; /* Unix record locking enforcement flag */
252
+ const UInt32 kIRWXU = 00700; /* Unix read, write, execute: owner */
253
+ const UInt32 kIRUSR = 00400; /* Unix read permission: owner */
254
+ const UInt32 kIWUSR = 00200; /* Unix write permission: owner */
255
+ const UInt32 kIXUSR = 00100; /* Unix execute permission: owner */
256
+ const UInt32 kIRWXG = 00070; /* Unix read, write, execute: group */
257
+ const UInt32 kIRGRP = 00040; /* Unix read permission: group */
258
+ const UInt32 kIWGRP = 00020; /* Unix write permission: group */
259
+ const UInt32 kIXGRP = 00010; /* Unix execute permission: group */
260
+ const UInt32 kIRWXO = 00007; /* Unix read, write, execute: other */
261
+ const UInt32 kIROTH = 00004; /* Unix read permission: other */
262
+ const UInt32 kIWOTH = 00002; /* Unix write permission: other */
263
+ const UInt32 kIXOTH = 00001; /* Unix execute permission: other */
264
+ }
265
+
266
+ namespace NAmigaAttribute
267
+ {
268
+ const UInt32 kIFMT = 06000; /* Amiga file type mask */
269
+ const UInt32 kIFDIR = 04000; /* Amiga directory */
270
+ const UInt32 kIFREG = 02000; /* Amiga regular file */
271
+ const UInt32 kIHIDDEN = 00200; /* to be supported in AmigaDOS 3.x */
272
+ const UInt32 kISCRIPT = 00100; /* executable script (text command file) */
273
+ const UInt32 kIPURE = 00040; /* allow loading into resident memory */
274
+ const UInt32 kIARCHIVE = 00020; /* not modified since bit was last set */
275
+ const UInt32 kIREAD = 00010; /* can be opened for reading */
276
+ const UInt32 kIWRITE = 00004; /* can be opened for writing */
277
+ const UInt32 kIEXECUTE = 00002; /* executable image, a loadable runfile */
278
+ const UInt32 kIDELETE = 00001; /* can be deleted */
279
+ }
280
+ }
281
+
282
+ }}
283
+
284
+ #endif
@@ -0,0 +1,893 @@
1
+ // Archive/ZipIn.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "../../../../C/CpuArch.h"
6
+
7
+ #include "Common/DynamicBuffer.h"
8
+
9
+ #include "../../Common/LimitedStreams.h"
10
+ #include "../../Common/StreamUtils.h"
11
+
12
+ #include "ZipIn.h"
13
+
14
+ #define Get16(p) GetUi16(p)
15
+ #define Get32(p) GetUi32(p)
16
+ #define Get64(p) GetUi64(p)
17
+
18
+ namespace NArchive {
19
+ namespace NZip {
20
+
21
+ HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit)
22
+ {
23
+ _inBufMode = false;
24
+ Close();
25
+ RINOK(stream->Seek(0, STREAM_SEEK_CUR, &m_StreamStartPosition));
26
+ m_Position = m_StreamStartPosition;
27
+ RINOK(FindAndReadMarker(stream, searchHeaderSizeLimit));
28
+ RINOK(stream->Seek(m_Position, STREAM_SEEK_SET, NULL));
29
+ m_Stream = stream;
30
+ return S_OK;
31
+ }
32
+
33
+ void CInArchive::Close()
34
+ {
35
+ _inBuffer.ReleaseStream();
36
+ m_Stream.Release();
37
+ }
38
+
39
+ HRESULT CInArchive::Seek(UInt64 offset)
40
+ {
41
+ return m_Stream->Seek(offset, STREAM_SEEK_SET, NULL);
42
+ }
43
+
44
+ //////////////////////////////////////
45
+ // Markers
46
+
47
+ static inline bool TestMarkerCandidate(const Byte *p, UInt32 &value)
48
+ {
49
+ value = Get32(p);
50
+ return
51
+ (value == NSignature::kLocalFileHeader) ||
52
+ (value == NSignature::kEndOfCentralDir);
53
+ }
54
+
55
+ static const UInt32 kNumMarkerAddtionalBytes = 2;
56
+ static inline bool TestMarkerCandidate2(const Byte *p, UInt32 &value)
57
+ {
58
+ value = Get32(p);
59
+ if (value == NSignature::kEndOfCentralDir)
60
+ return (Get16(p + 4) == 0);
61
+ return (value == NSignature::kLocalFileHeader && p[4] < 128);
62
+ }
63
+
64
+ HRESULT CInArchive::FindAndReadMarker(IInStream *stream, const UInt64 *searchHeaderSizeLimit)
65
+ {
66
+ ArcInfo.Clear();
67
+ m_Position = m_StreamStartPosition;
68
+
69
+ Byte marker[NSignature::kMarkerSize];
70
+ RINOK(ReadStream_FALSE(stream, marker, NSignature::kMarkerSize));
71
+ m_Position += NSignature::kMarkerSize;
72
+ if (TestMarkerCandidate(marker, m_Signature))
73
+ return S_OK;
74
+
75
+ CByteDynamicBuffer dynamicBuffer;
76
+ const UInt32 kSearchMarkerBufferSize = 0x10000;
77
+ dynamicBuffer.EnsureCapacity(kSearchMarkerBufferSize);
78
+ Byte *buffer = dynamicBuffer;
79
+ UInt32 numBytesPrev = NSignature::kMarkerSize - 1;
80
+ memcpy(buffer, marker + 1, numBytesPrev);
81
+ UInt64 curTestPos = m_StreamStartPosition + 1;
82
+ for (;;)
83
+ {
84
+ if (searchHeaderSizeLimit != NULL)
85
+ if (curTestPos - m_StreamStartPosition > *searchHeaderSizeLimit)
86
+ break;
87
+ size_t numReadBytes = kSearchMarkerBufferSize - numBytesPrev;
88
+ RINOK(ReadStream(stream, buffer + numBytesPrev, &numReadBytes));
89
+ m_Position += numReadBytes;
90
+ UInt32 numBytesInBuffer = numBytesPrev + (UInt32)numReadBytes;
91
+ const UInt32 kMarker2Size = NSignature::kMarkerSize + kNumMarkerAddtionalBytes;
92
+ if (numBytesInBuffer < kMarker2Size)
93
+ break;
94
+ UInt32 numTests = numBytesInBuffer - kMarker2Size + 1;
95
+ for (UInt32 pos = 0; pos < numTests; pos++)
96
+ {
97
+ if (buffer[pos] != 0x50)
98
+ continue;
99
+ if (TestMarkerCandidate2(buffer + pos, m_Signature))
100
+ {
101
+ curTestPos += pos;
102
+ ArcInfo.StartPosition = curTestPos;
103
+ m_Position = curTestPos + NSignature::kMarkerSize;
104
+ return S_OK;
105
+ }
106
+ }
107
+ curTestPos += numTests;
108
+ numBytesPrev = numBytesInBuffer - numTests;
109
+ memmove(buffer, buffer + numTests, numBytesPrev);
110
+ }
111
+ return S_FALSE;
112
+ }
113
+
114
+ HRESULT CInArchive::ReadBytes(void *data, UInt32 size, UInt32 *processedSize)
115
+ {
116
+ size_t realProcessedSize = size;
117
+ HRESULT result = S_OK;
118
+ if (_inBufMode)
119
+ {
120
+ try { realProcessedSize = _inBuffer.ReadBytes((Byte *)data, size); }
121
+ catch (const CInBufferException &e) { return e.ErrorCode; }
122
+ }
123
+ else
124
+ result = ReadStream(m_Stream, data, &realProcessedSize);
125
+ if (processedSize != NULL)
126
+ *processedSize = (UInt32)realProcessedSize;
127
+ m_Position += realProcessedSize;
128
+ return result;
129
+ }
130
+
131
+ void CInArchive::Skip(UInt64 num)
132
+ {
133
+ for (UInt64 i = 0; i < num; i++)
134
+ ReadByte();
135
+ }
136
+
137
+ void CInArchive::IncreaseRealPosition(UInt64 addValue)
138
+ {
139
+ if (m_Stream->Seek(addValue, STREAM_SEEK_CUR, &m_Position) != S_OK)
140
+ throw CInArchiveException(CInArchiveException::kSeekStreamError);
141
+ }
142
+
143
+ bool CInArchive::ReadBytesAndTestSize(void *data, UInt32 size)
144
+ {
145
+ UInt32 realProcessedSize;
146
+ if (ReadBytes(data, size, &realProcessedSize) != S_OK)
147
+ throw CInArchiveException(CInArchiveException::kReadStreamError);
148
+ return (realProcessedSize == size);
149
+ }
150
+
151
+ void CInArchive::SafeReadBytes(void *data, UInt32 size)
152
+ {
153
+ if (!ReadBytesAndTestSize(data, size))
154
+ throw CInArchiveException(CInArchiveException::kUnexpectedEndOfArchive);
155
+ }
156
+
157
+ void CInArchive::ReadBuffer(CByteBuffer &buffer, UInt32 size)
158
+ {
159
+ buffer.SetCapacity(size);
160
+ if (size > 0)
161
+ SafeReadBytes(buffer, size);
162
+ }
163
+
164
+ Byte CInArchive::ReadByte()
165
+ {
166
+ Byte b;
167
+ SafeReadBytes(&b, 1);
168
+ return b;
169
+ }
170
+
171
+ UInt16 CInArchive::ReadUInt16()
172
+ {
173
+ Byte buf[2];
174
+ SafeReadBytes(buf, 2);
175
+ return Get16(buf);
176
+ }
177
+
178
+ UInt32 CInArchive::ReadUInt32()
179
+ {
180
+ Byte buf[4];
181
+ SafeReadBytes(buf, 4);
182
+ return Get32(buf);
183
+ }
184
+
185
+ UInt64 CInArchive::ReadUInt64()
186
+ {
187
+ Byte buf[8];
188
+ SafeReadBytes(buf, 8);
189
+ return Get64(buf);
190
+ }
191
+
192
+ bool CInArchive::ReadUInt32(UInt32 &value)
193
+ {
194
+ Byte buf[4];
195
+ if (!ReadBytesAndTestSize(buf, 4))
196
+ return false;
197
+ value = Get32(buf);
198
+ return true;
199
+ }
200
+
201
+ void CInArchive::ReadFileName(UInt32 nameSize, AString &dest)
202
+ {
203
+ if (nameSize == 0)
204
+ dest.Empty();
205
+ char *p = dest.GetBuffer((int)nameSize);
206
+ SafeReadBytes(p, nameSize);
207
+ p[nameSize] = 0;
208
+ dest.ReleaseBuffer();
209
+ }
210
+
211
+ void CInArchive::ReadExtra(UInt32 extraSize, CExtraBlock &extraBlock,
212
+ UInt64 &unpackSize, UInt64 &packSize, UInt64 &localHeaderOffset, UInt32 &diskStartNumber)
213
+ {
214
+ extraBlock.Clear();
215
+ UInt32 remain = extraSize;
216
+ while(remain >= 4)
217
+ {
218
+ CExtraSubBlock subBlock;
219
+ subBlock.ID = ReadUInt16();
220
+ UInt32 dataSize = ReadUInt16();
221
+ remain -= 4;
222
+ if (dataSize > remain) // it's bug
223
+ dataSize = remain;
224
+ if (subBlock.ID == NFileHeader::NExtraID::kZip64)
225
+ {
226
+ if (unpackSize == 0xFFFFFFFF)
227
+ {
228
+ if (dataSize < 8)
229
+ break;
230
+ unpackSize = ReadUInt64();
231
+ remain -= 8;
232
+ dataSize -= 8;
233
+ }
234
+ if (packSize == 0xFFFFFFFF)
235
+ {
236
+ if (dataSize < 8)
237
+ break;
238
+ packSize = ReadUInt64();
239
+ remain -= 8;
240
+ dataSize -= 8;
241
+ }
242
+ if (localHeaderOffset == 0xFFFFFFFF)
243
+ {
244
+ if (dataSize < 8)
245
+ break;
246
+ localHeaderOffset = ReadUInt64();
247
+ remain -= 8;
248
+ dataSize -= 8;
249
+ }
250
+ if (diskStartNumber == 0xFFFF)
251
+ {
252
+ if (dataSize < 4)
253
+ break;
254
+ diskStartNumber = ReadUInt32();
255
+ remain -= 4;
256
+ dataSize -= 4;
257
+ }
258
+ for (UInt32 i = 0; i < dataSize; i++)
259
+ ReadByte();
260
+ }
261
+ else
262
+ {
263
+ ReadBuffer(subBlock.Data, dataSize);
264
+ extraBlock.SubBlocks.Add(subBlock);
265
+ }
266
+ remain -= dataSize;
267
+ }
268
+ Skip(remain);
269
+ }
270
+
271
+ HRESULT CInArchive::ReadLocalItem(CItemEx &item)
272
+ {
273
+ const int kBufSize = 26;
274
+ Byte p[kBufSize];
275
+ SafeReadBytes(p, kBufSize);
276
+
277
+ item.ExtractVersion.Version = p[0];
278
+ item.ExtractVersion.HostOS = p[1];
279
+ item.Flags = Get16(p + 2);
280
+ item.CompressionMethod = Get16(p + 4);
281
+ item.Time = Get32(p + 6);
282
+ item.FileCRC = Get32(p + 10);
283
+ item.PackSize = Get32(p + 14);
284
+ item.UnPackSize = Get32(p + 18);
285
+ UInt32 fileNameSize = Get16(p + 22);
286
+ item.LocalExtraSize = Get16(p + 24);
287
+ ReadFileName(fileNameSize, item.Name);
288
+ item.FileHeaderWithNameSize = 4 + NFileHeader::kLocalBlockSize + fileNameSize;
289
+ if (item.LocalExtraSize > 0)
290
+ {
291
+ UInt64 localHeaderOffset = 0;
292
+ UInt32 diskStartNumber = 0;
293
+ ReadExtra(item.LocalExtraSize, item.LocalExtra, item.UnPackSize, item.PackSize,
294
+ localHeaderOffset, diskStartNumber);
295
+ }
296
+ /*
297
+ if (item.IsDir())
298
+ item.UnPackSize = 0; // check It
299
+ */
300
+ return S_OK;
301
+ }
302
+
303
+ static bool FlagsAreSame(CItem &i1, CItem &i2)
304
+ {
305
+ if (i1.CompressionMethod != i2.CompressionMethod)
306
+ return false;
307
+ // i1.Time
308
+
309
+ if (i1.Flags == i2.Flags)
310
+ return true;
311
+ UInt32 mask = 0xFFFF;
312
+ switch(i1.CompressionMethod)
313
+ {
314
+ case NFileHeader::NCompressionMethod::kDeflated:
315
+ mask = 0x7FF9;
316
+ break;
317
+ default:
318
+ if (i1.CompressionMethod <= NFileHeader::NCompressionMethod::kImploded)
319
+ mask = 0x7FFF;
320
+ }
321
+ return ((i1.Flags & mask) == (i2.Flags & mask));
322
+ }
323
+
324
+ HRESULT CInArchive::ReadLocalItemAfterCdItem(CItemEx &item)
325
+ {
326
+ if (item.FromLocal)
327
+ return S_OK;
328
+ try
329
+ {
330
+ RINOK(Seek(ArcInfo.Base + item.LocalHeaderPosition));
331
+ CItemEx localItem;
332
+ if (ReadUInt32() != NSignature::kLocalFileHeader)
333
+ return S_FALSE;
334
+ RINOK(ReadLocalItem(localItem));
335
+ if (!FlagsAreSame(item, localItem))
336
+ return S_FALSE;
337
+
338
+ if ((!localItem.HasDescriptor() &&
339
+ (
340
+ item.FileCRC != localItem.FileCRC ||
341
+ item.PackSize != localItem.PackSize ||
342
+ item.UnPackSize != localItem.UnPackSize
343
+ )
344
+ ) ||
345
+ item.Name.Length() != localItem.Name.Length()
346
+ )
347
+ return S_FALSE;
348
+ item.FileHeaderWithNameSize = localItem.FileHeaderWithNameSize;
349
+ item.LocalExtraSize = localItem.LocalExtraSize;
350
+ item.LocalExtra = localItem.LocalExtra;
351
+ item.FromLocal = true;
352
+ }
353
+ catch(...) { return S_FALSE; }
354
+ return S_OK;
355
+ }
356
+
357
+ HRESULT CInArchive::ReadLocalItemDescriptor(CItemEx &item)
358
+ {
359
+ if (item.HasDescriptor())
360
+ {
361
+ const int kBufferSize = (1 << 12);
362
+ Byte buffer[kBufferSize];
363
+
364
+ UInt32 numBytesInBuffer = 0;
365
+ UInt32 packedSize = 0;
366
+
367
+ bool descriptorWasFound = false;
368
+ for (;;)
369
+ {
370
+ UInt32 processedSize;
371
+ RINOK(ReadBytes(buffer + numBytesInBuffer, kBufferSize - numBytesInBuffer, &processedSize));
372
+ numBytesInBuffer += processedSize;
373
+ if (numBytesInBuffer < NFileHeader::kDataDescriptorSize)
374
+ return S_FALSE;
375
+ UInt32 i;
376
+ for (i = 0; i <= numBytesInBuffer - NFileHeader::kDataDescriptorSize; i++)
377
+ {
378
+ // descriptorSignature field is Info-ZIP's extension
379
+ // to Zip specification.
380
+ UInt32 descriptorSignature = Get32(buffer + i);
381
+
382
+ // !!!! It must be fixed for Zip64 archives
383
+ UInt32 descriptorPackSize = Get32(buffer + i + 8);
384
+ if (descriptorSignature== NSignature::kDataDescriptor && descriptorPackSize == packedSize + i)
385
+ {
386
+ descriptorWasFound = true;
387
+ item.FileCRC = Get32(buffer + i + 4);
388
+ item.PackSize = descriptorPackSize;
389
+ item.UnPackSize = Get32(buffer + i + 12);
390
+ IncreaseRealPosition(Int64(Int32(0 - (numBytesInBuffer - i - NFileHeader::kDataDescriptorSize))));
391
+ break;
392
+ }
393
+ }
394
+ if (descriptorWasFound)
395
+ break;
396
+ packedSize += i;
397
+ int j;
398
+ for (j = 0; i < numBytesInBuffer; i++, j++)
399
+ buffer[j] = buffer[i];
400
+ numBytesInBuffer = j;
401
+ }
402
+ }
403
+ else
404
+ IncreaseRealPosition(item.PackSize);
405
+ return S_OK;
406
+ }
407
+
408
+ HRESULT CInArchive::ReadLocalItemAfterCdItemFull(CItemEx &item)
409
+ {
410
+ if (item.FromLocal)
411
+ return S_OK;
412
+ try
413
+ {
414
+ RINOK(ReadLocalItemAfterCdItem(item));
415
+ if (item.HasDescriptor())
416
+ {
417
+ RINOK(Seek(ArcInfo.Base + item.GetDataPosition() + item.PackSize));
418
+ if (ReadUInt32() != NSignature::kDataDescriptor)
419
+ return S_FALSE;
420
+ UInt32 crc = ReadUInt32();
421
+ UInt64 packSize, unpackSize;
422
+
423
+ /*
424
+ if (IsZip64)
425
+ {
426
+ packSize = ReadUInt64();
427
+ unpackSize = ReadUInt64();
428
+ }
429
+ else
430
+ */
431
+ {
432
+ packSize = ReadUInt32();
433
+ unpackSize = ReadUInt32();
434
+ }
435
+
436
+ if (crc != item.FileCRC || item.PackSize != packSize || item.UnPackSize != unpackSize)
437
+ return S_FALSE;
438
+ }
439
+ }
440
+ catch(...) { return S_FALSE; }
441
+ return S_OK;
442
+ }
443
+
444
+ HRESULT CInArchive::ReadCdItem(CItemEx &item)
445
+ {
446
+ item.FromCentral = true;
447
+ const int kBufSize = 42;
448
+ Byte p[kBufSize];
449
+ SafeReadBytes(p, kBufSize);
450
+ item.MadeByVersion.Version = p[0];
451
+ item.MadeByVersion.HostOS = p[1];
452
+ item.ExtractVersion.Version = p[2];
453
+ item.ExtractVersion.HostOS = p[3];
454
+ item.Flags = Get16(p + 4);
455
+ item.CompressionMethod = Get16(p + 6);
456
+ item.Time = Get32(p + 8);
457
+ item.FileCRC = Get32(p + 12);
458
+ item.PackSize = Get32(p + 16);
459
+ item.UnPackSize = Get32(p + 20);
460
+ UInt16 headerNameSize = Get16(p + 24);
461
+ UInt16 headerExtraSize = Get16(p + 26);
462
+ UInt16 headerCommentSize = Get16(p + 28);
463
+ UInt32 headerDiskNumberStart = Get16(p + 30);
464
+ item.InternalAttributes = Get16(p + 32);
465
+ item.ExternalAttributes = Get32(p + 34);
466
+ item.LocalHeaderPosition = Get32(p + 38);
467
+ ReadFileName(headerNameSize, item.Name);
468
+
469
+ if (headerExtraSize > 0)
470
+ {
471
+ ReadExtra(headerExtraSize, item.CentralExtra, item.UnPackSize, item.PackSize,
472
+ item.LocalHeaderPosition, headerDiskNumberStart);
473
+ }
474
+
475
+ if (headerDiskNumberStart != 0)
476
+ throw CInArchiveException(CInArchiveException::kMultiVolumeArchiveAreNotSupported);
477
+
478
+ // May be these strings must be deleted
479
+ /*
480
+ if (item.IsDir())
481
+ item.UnPackSize = 0;
482
+ */
483
+
484
+ ReadBuffer(item.Comment, headerCommentSize);
485
+ return S_OK;
486
+ }
487
+
488
+ HRESULT CInArchive::TryEcd64(UInt64 offset, CCdInfo &cdInfo)
489
+ {
490
+ RINOK(Seek(offset));
491
+ const UInt32 kEcd64Size = 56;
492
+ Byte buf[kEcd64Size];
493
+ if (!ReadBytesAndTestSize(buf, kEcd64Size))
494
+ return S_FALSE;
495
+ if (Get32(buf) != NSignature::kZip64EndOfCentralDir)
496
+ return S_FALSE;
497
+ // cdInfo.NumEntries = Get64(buf + 24);
498
+ cdInfo.Size = Get64(buf + 40);
499
+ cdInfo.Offset = Get64(buf + 48);
500
+ return S_OK;
501
+ }
502
+
503
+ HRESULT CInArchive::FindCd(CCdInfo &cdInfo)
504
+ {
505
+ UInt64 endPosition;
506
+ RINOK(m_Stream->Seek(0, STREAM_SEEK_END, &endPosition));
507
+ const UInt32 kBufSizeMax = (1 << 16) + kEcdSize + kZip64EcdLocatorSize;
508
+ CByteBuffer byteBuffer;
509
+ byteBuffer.SetCapacity(kBufSizeMax);
510
+ Byte *buf = byteBuffer;
511
+ UInt32 bufSize = (endPosition < kBufSizeMax) ? (UInt32)endPosition : kBufSizeMax;
512
+ if (bufSize < kEcdSize)
513
+ return S_FALSE;
514
+ UInt64 startPosition = endPosition - bufSize;
515
+ RINOK(m_Stream->Seek(startPosition, STREAM_SEEK_SET, &m_Position));
516
+ if (m_Position != startPosition)
517
+ return S_FALSE;
518
+ if (!ReadBytesAndTestSize(buf, bufSize))
519
+ return S_FALSE;
520
+ for (int i = (int)(bufSize - kEcdSize); i >= 0; i--)
521
+ {
522
+ if (Get32(buf + i) == NSignature::kEndOfCentralDir)
523
+ {
524
+ if (i >= kZip64EcdLocatorSize)
525
+ {
526
+ const Byte *locator = buf + i - kZip64EcdLocatorSize;
527
+ if (Get32(locator) == NSignature::kZip64EndOfCentralDirLocator)
528
+ {
529
+ UInt64 ecd64Offset = Get64(locator + 8);
530
+ if (TryEcd64(ecd64Offset, cdInfo) == S_OK)
531
+ return S_OK;
532
+ if (TryEcd64(ArcInfo.StartPosition + ecd64Offset, cdInfo) == S_OK)
533
+ {
534
+ ArcInfo.Base = ArcInfo.StartPosition;
535
+ return S_OK;
536
+ }
537
+ }
538
+ }
539
+ if (Get32(buf + i + 4) == 0)
540
+ {
541
+ // cdInfo.NumEntries = GetUInt16(buf + i + 10);
542
+ cdInfo.Size = Get32(buf + i + 12);
543
+ cdInfo.Offset = Get32(buf + i + 16);
544
+ UInt64 curPos = endPosition - bufSize + i;
545
+ UInt64 cdEnd = cdInfo.Size + cdInfo.Offset;
546
+ if (curPos != cdEnd)
547
+ {
548
+ /*
549
+ if (cdInfo.Offset <= 16 && cdInfo.Size != 0)
550
+ {
551
+ // here we support some rare ZIP files with Central directory at the start
552
+ ArcInfo.Base = 0;
553
+ }
554
+ else
555
+ */
556
+ ArcInfo.Base = curPos - cdEnd;
557
+ }
558
+ return S_OK;
559
+ }
560
+ }
561
+ }
562
+ return S_FALSE;
563
+ }
564
+
565
+ HRESULT CInArchive::TryReadCd(CObjectVector<CItemEx> &items, UInt64 cdOffset, UInt64 cdSize, CProgressVirt *progress)
566
+ {
567
+ items.Clear();
568
+ RINOK(m_Stream->Seek(cdOffset, STREAM_SEEK_SET, &m_Position));
569
+ if (m_Position != cdOffset)
570
+ return S_FALSE;
571
+
572
+ if (!_inBuffer.Create(1 << 15))
573
+ return E_OUTOFMEMORY;
574
+ _inBuffer.SetStream(m_Stream);
575
+ _inBuffer.Init();
576
+ _inBufMode = true;
577
+
578
+ while(m_Position - cdOffset < cdSize)
579
+ {
580
+ if (ReadUInt32() != NSignature::kCentralFileHeader)
581
+ return S_FALSE;
582
+ CItemEx cdItem;
583
+ RINOK(ReadCdItem(cdItem));
584
+ items.Add(cdItem);
585
+ if (progress && items.Size() % 1000 == 0)
586
+ RINOK(progress->SetCompleted(items.Size()));
587
+ }
588
+ return (m_Position - cdOffset == cdSize) ? S_OK : S_FALSE;
589
+ }
590
+
591
+ HRESULT CInArchive::ReadCd(CObjectVector<CItemEx> &items, UInt64 &cdOffset, UInt64 &cdSize, CProgressVirt *progress)
592
+ {
593
+ ArcInfo.Base = 0;
594
+ CCdInfo cdInfo;
595
+ RINOK(FindCd(cdInfo));
596
+ HRESULT res = S_FALSE;
597
+ cdSize = cdInfo.Size;
598
+ cdOffset = cdInfo.Offset;
599
+ res = TryReadCd(items, ArcInfo.Base + cdOffset, cdSize, progress);
600
+ if (res == S_FALSE && ArcInfo.Base == 0)
601
+ {
602
+ res = TryReadCd(items, cdInfo.Offset + ArcInfo.StartPosition, cdSize, progress);
603
+ if (res == S_OK)
604
+ ArcInfo.Base = ArcInfo.StartPosition;
605
+ }
606
+ if (!ReadUInt32(m_Signature))
607
+ return S_FALSE;
608
+ return res;
609
+ }
610
+
611
+ HRESULT CInArchive::ReadLocalsAndCd(CObjectVector<CItemEx> &items, CProgressVirt *progress, UInt64 &cdOffset, int &numCdItems)
612
+ {
613
+ items.Clear();
614
+ numCdItems = 0;
615
+ while (m_Signature == NSignature::kLocalFileHeader)
616
+ {
617
+ // FSeek points to next byte after signature
618
+ // NFileHeader::CLocalBlock localHeader;
619
+ CItemEx item;
620
+ item.LocalHeaderPosition = m_Position - m_StreamStartPosition - 4; // points to signature;
621
+ RINOK(ReadLocalItem(item));
622
+ item.FromLocal = true;
623
+ ReadLocalItemDescriptor(item);
624
+ items.Add(item);
625
+ if (progress && items.Size() % 100 == 0)
626
+ RINOK(progress->SetCompleted(items.Size()));
627
+ if (!ReadUInt32(m_Signature))
628
+ break;
629
+ }
630
+ cdOffset = m_Position - 4;
631
+ int i;
632
+ for (i = 0; i < items.Size(); i++, numCdItems++)
633
+ {
634
+ if (progress && i % 1000 == 0)
635
+ RINOK(progress->SetCompleted(items.Size()));
636
+ if (m_Signature == NSignature::kEndOfCentralDir)
637
+ break;
638
+
639
+ if (m_Signature != NSignature::kCentralFileHeader)
640
+ return S_FALSE;
641
+
642
+ CItemEx cdItem;
643
+ RINOK(ReadCdItem(cdItem));
644
+
645
+ if (i == 0)
646
+ {
647
+ int j;
648
+ for (j = 0; j < items.Size(); j++)
649
+ {
650
+ CItemEx &item = items[j];
651
+ if (item.Name == cdItem.Name)
652
+ {
653
+ ArcInfo.Base = item.LocalHeaderPosition - cdItem.LocalHeaderPosition;
654
+ break;
655
+ }
656
+ }
657
+ if (j == items.Size())
658
+ return S_FALSE;
659
+ }
660
+
661
+ int index;
662
+ int left = 0, right = items.Size();
663
+ for (;;)
664
+ {
665
+ if (left >= right)
666
+ return S_FALSE;
667
+ index = (left + right) / 2;
668
+ UInt64 position = items[index].LocalHeaderPosition - ArcInfo.Base;
669
+ if (cdItem.LocalHeaderPosition == position)
670
+ break;
671
+ if (cdItem.LocalHeaderPosition < position)
672
+ right = index;
673
+ else
674
+ left = index + 1;
675
+ }
676
+ CItemEx &item = items[index];
677
+ // item.LocalHeaderPosition = cdItem.LocalHeaderPosition;
678
+ item.MadeByVersion = cdItem.MadeByVersion;
679
+ item.CentralExtra = cdItem.CentralExtra;
680
+
681
+ if (
682
+ // item.ExtractVersion != cdItem.ExtractVersion ||
683
+ !FlagsAreSame(item, cdItem) ||
684
+ item.FileCRC != cdItem.FileCRC)
685
+ return S_FALSE;
686
+
687
+ if (item.Name.Length() != cdItem.Name.Length() ||
688
+ item.PackSize != cdItem.PackSize ||
689
+ item.UnPackSize != cdItem.UnPackSize
690
+ )
691
+ return S_FALSE;
692
+ item.Name = cdItem.Name;
693
+ item.InternalAttributes = cdItem.InternalAttributes;
694
+ item.ExternalAttributes = cdItem.ExternalAttributes;
695
+ item.Comment = cdItem.Comment;
696
+ item.FromCentral = cdItem.FromCentral;
697
+ if (!ReadUInt32(m_Signature))
698
+ return S_FALSE;
699
+ }
700
+ for (i = 0; i < items.Size(); i++)
701
+ items[i].LocalHeaderPosition -= ArcInfo.Base;
702
+ return S_OK;
703
+ }
704
+
705
+ struct CEcd
706
+ {
707
+ UInt16 thisDiskNumber;
708
+ UInt16 startCDDiskNumber;
709
+ UInt16 numEntriesInCDOnThisDisk;
710
+ UInt16 numEntriesInCD;
711
+ UInt32 cdSize;
712
+ UInt32 cdStartOffset;
713
+ UInt16 commentSize;
714
+ void Parse(const Byte *p);
715
+ };
716
+
717
+ void CEcd::Parse(const Byte *p)
718
+ {
719
+ thisDiskNumber = Get16(p);
720
+ startCDDiskNumber = Get16(p + 2);
721
+ numEntriesInCDOnThisDisk = Get16(p + 4);
722
+ numEntriesInCD = Get16(p + 6);
723
+ cdSize = Get32(p + 8);
724
+ cdStartOffset = Get32(p + 12);
725
+ commentSize = Get16(p + 16);
726
+ }
727
+
728
+ struct CEcd64
729
+ {
730
+ UInt16 versionMade;
731
+ UInt16 versionNeedExtract;
732
+ UInt32 thisDiskNumber;
733
+ UInt32 startCDDiskNumber;
734
+ UInt64 numEntriesInCDOnThisDisk;
735
+ UInt64 numEntriesInCD;
736
+ UInt64 cdSize;
737
+ UInt64 cdStartOffset;
738
+ void Parse(const Byte *p);
739
+ CEcd64() { memset(this, 0, sizeof(*this)); }
740
+ };
741
+
742
+ void CEcd64::Parse(const Byte *p)
743
+ {
744
+ versionMade = Get16(p);
745
+ versionNeedExtract = Get16(p + 2);
746
+ thisDiskNumber = Get32(p + 4);
747
+ startCDDiskNumber = Get32(p + 8);
748
+ numEntriesInCDOnThisDisk = Get64(p + 12);
749
+ numEntriesInCD = Get64(p + 20);
750
+ cdSize = Get64(p + 28);
751
+ cdStartOffset = Get64(p + 36);
752
+ }
753
+
754
+ #define COPY_ECD_ITEM_16(n) if (!isZip64 || ecd. n != 0xFFFF) ecd64. n = ecd. n;
755
+ #define COPY_ECD_ITEM_32(n) if (!isZip64 || ecd. n != 0xFFFFFFFF) ecd64. n = ecd. n;
756
+
757
+ HRESULT CInArchive::ReadHeaders(CObjectVector<CItemEx> &items, CProgressVirt *progress)
758
+ {
759
+ // m_Signature must be kLocalFileHeaderSignature or
760
+ // kEndOfCentralDirSignature
761
+ // m_Position points to next byte after signature
762
+
763
+ IsZip64 = false;
764
+ items.Clear();
765
+
766
+ UInt64 cdSize, cdStartOffset;
767
+ HRESULT res;
768
+ try
769
+ {
770
+ res = ReadCd(items, cdStartOffset, cdSize, progress);
771
+ }
772
+ catch(CInArchiveException &)
773
+ {
774
+ res = S_FALSE;
775
+ }
776
+ if (res != S_FALSE && res != S_OK)
777
+ return res;
778
+
779
+ /*
780
+ if (res != S_OK)
781
+ return res;
782
+ res = S_FALSE;
783
+ */
784
+
785
+ int numCdItems = items.Size();
786
+ if (res == S_FALSE)
787
+ {
788
+ _inBufMode = false;
789
+ ArcInfo.Base = 0;
790
+ RINOK(m_Stream->Seek(ArcInfo.StartPosition, STREAM_SEEK_SET, &m_Position));
791
+ if (m_Position != ArcInfo.StartPosition)
792
+ return S_FALSE;
793
+ if (!ReadUInt32(m_Signature))
794
+ return S_FALSE;
795
+ RINOK(ReadLocalsAndCd(items, progress, cdStartOffset, numCdItems));
796
+ cdSize = (m_Position - 4) - cdStartOffset;
797
+ cdStartOffset -= ArcInfo.Base;
798
+ }
799
+
800
+ CEcd64 ecd64;
801
+ bool isZip64 = false;
802
+ UInt64 zip64EcdStartOffset = m_Position - 4 - ArcInfo.Base;
803
+ if (m_Signature == NSignature::kZip64EndOfCentralDir)
804
+ {
805
+ IsZip64 = isZip64 = true;
806
+ UInt64 recordSize = ReadUInt64();
807
+
808
+ const int kBufSize = kZip64EcdSize;
809
+ Byte buf[kBufSize];
810
+ SafeReadBytes(buf, kBufSize);
811
+ ecd64.Parse(buf);
812
+
813
+ Skip(recordSize - kZip64EcdSize);
814
+ if (!ReadUInt32(m_Signature))
815
+ return S_FALSE;
816
+ if (ecd64.thisDiskNumber != 0 || ecd64.startCDDiskNumber != 0)
817
+ throw CInArchiveException(CInArchiveException::kMultiVolumeArchiveAreNotSupported);
818
+ if (ecd64.numEntriesInCDOnThisDisk != numCdItems ||
819
+ ecd64.numEntriesInCD != numCdItems ||
820
+ ecd64.cdSize != cdSize ||
821
+ (ecd64.cdStartOffset != cdStartOffset &&
822
+ (!items.IsEmpty())))
823
+ return S_FALSE;
824
+ }
825
+ if (m_Signature == NSignature::kZip64EndOfCentralDirLocator)
826
+ {
827
+ /* UInt32 startEndCDDiskNumber = */ ReadUInt32();
828
+ UInt64 endCDStartOffset = ReadUInt64();
829
+ /* UInt32 numberOfDisks = */ ReadUInt32();
830
+ if (zip64EcdStartOffset != endCDStartOffset)
831
+ return S_FALSE;
832
+ if (!ReadUInt32(m_Signature))
833
+ return S_FALSE;
834
+ }
835
+ if (m_Signature != NSignature::kEndOfCentralDir)
836
+ return S_FALSE;
837
+
838
+ const int kBufSize = kEcdSize - 4;
839
+ Byte buf[kBufSize];
840
+ SafeReadBytes(buf, kBufSize);
841
+ CEcd ecd;
842
+ ecd.Parse(buf);
843
+
844
+ COPY_ECD_ITEM_16(thisDiskNumber);
845
+ COPY_ECD_ITEM_16(startCDDiskNumber);
846
+ COPY_ECD_ITEM_16(numEntriesInCDOnThisDisk);
847
+ COPY_ECD_ITEM_16(numEntriesInCD);
848
+ COPY_ECD_ITEM_32(cdSize);
849
+ COPY_ECD_ITEM_32(cdStartOffset);
850
+
851
+ ReadBuffer(ArcInfo.Comment, ecd.commentSize);
852
+
853
+ if (ecd64.thisDiskNumber != 0 || ecd64.startCDDiskNumber != 0)
854
+ throw CInArchiveException(CInArchiveException::kMultiVolumeArchiveAreNotSupported);
855
+ if ((UInt16)ecd64.numEntriesInCDOnThisDisk != ((UInt16)numCdItems) ||
856
+ (UInt16)ecd64.numEntriesInCD != ((UInt16)numCdItems) ||
857
+ (UInt32)ecd64.cdSize != (UInt32)cdSize ||
858
+ ((UInt32)(ecd64.cdStartOffset) != (UInt32)cdStartOffset &&
859
+ (!items.IsEmpty())))
860
+ return S_FALSE;
861
+
862
+ _inBufMode = false;
863
+ _inBuffer.Free();
864
+ IsOkHeaders = (numCdItems == items.Size());
865
+ ArcInfo.FinishPosition = m_Position;
866
+ return S_OK;
867
+ }
868
+
869
+ ISequentialInStream* CInArchive::CreateLimitedStream(UInt64 position, UInt64 size)
870
+ {
871
+ CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
872
+ CMyComPtr<ISequentialInStream> stream(streamSpec);
873
+ SeekInArchive(ArcInfo.Base + position);
874
+ streamSpec->SetStream(m_Stream);
875
+ streamSpec->Init(size);
876
+ return stream.Detach();
877
+ }
878
+
879
+ IInStream* CInArchive::CreateStream()
880
+ {
881
+ CMyComPtr<IInStream> stream = m_Stream;
882
+ return stream.Detach();
883
+ }
884
+
885
+ bool CInArchive::SeekInArchive(UInt64 position)
886
+ {
887
+ UInt64 newPosition;
888
+ if (m_Stream->Seek(position, STREAM_SEEK_SET, &newPosition) != S_OK)
889
+ return false;
890
+ return (newPosition == position);
891
+ }
892
+
893
+ }}