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,84 @@
1
+ // MultiStream.h
2
+
3
+ #ifndef __MULTI_STREAM_H
4
+ #define __MULTI_STREAM_H
5
+
6
+ #include "../../../Common/MyCom.h"
7
+ #include "../../../Common/MyVector.h"
8
+
9
+ #include "../../IStream.h"
10
+
11
+ class CMultiStream:
12
+ public IInStream,
13
+ public CMyUnknownImp
14
+ {
15
+ UInt64 _pos;
16
+ UInt64 _totalLength;
17
+ int _streamIndex;
18
+ public:
19
+ struct CSubStreamInfo
20
+ {
21
+ CMyComPtr<IInStream> Stream;
22
+ UInt64 Size;
23
+ UInt64 GlobalOffset;
24
+ UInt64 LocalPos;
25
+ };
26
+ CObjectVector<CSubStreamInfo> Streams;
27
+
28
+ HRESULT Init()
29
+ {
30
+ UInt64 total = 0;
31
+ for (int i = 0; i < Streams.Size(); i++)
32
+ {
33
+ CSubStreamInfo &s = Streams[i];
34
+ s.GlobalOffset = total;
35
+ total += Streams[i].Size;
36
+ RINOK(s.Stream->Seek(0, STREAM_SEEK_CUR, &s.LocalPos));
37
+ }
38
+ _totalLength = total;
39
+ _pos = 0;
40
+ _streamIndex = 0;
41
+ return S_OK;
42
+ }
43
+
44
+ MY_UNKNOWN_IMP1(IInStream)
45
+
46
+ STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
47
+ STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
48
+ };
49
+
50
+ /*
51
+ class COutMultiStream:
52
+ public IOutStream,
53
+ public CMyUnknownImp
54
+ {
55
+ int _streamIndex; // required stream
56
+ UInt64 _offsetPos; // offset from start of _streamIndex index
57
+ UInt64 _absPos;
58
+ UInt64 _length;
59
+
60
+ struct CSubStreamInfo
61
+ {
62
+ CMyComPtr<ISequentialOutStream> Stream;
63
+ UInt64 Size;
64
+ UInt64 Pos;
65
+ };
66
+ CObjectVector<CSubStreamInfo> Streams;
67
+ public:
68
+ CMyComPtr<IArchiveUpdateCallback2> VolumeCallback;
69
+ void Init()
70
+ {
71
+ _streamIndex = 0;
72
+ _offsetPos = 0;
73
+ _absPos = 0;
74
+ _length = 0;
75
+ }
76
+
77
+ MY_UNKNOWN_IMP1(IOutStream)
78
+
79
+ STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
80
+ STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
81
+ };
82
+ */
83
+
84
+ #endif
@@ -0,0 +1,18 @@
1
+ // OutStreamWithCRC.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "OutStreamWithCRC.h"
6
+
7
+ STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize)
8
+ {
9
+ HRESULT result = S_OK;
10
+ if (_stream)
11
+ result = _stream->Write(data, size, &size);
12
+ if (_calculate)
13
+ _crc = CrcUpdate(_crc, data, size);
14
+ _size += size;
15
+ if (processedSize != NULL)
16
+ *processedSize = size;
17
+ return result;
18
+ }
@@ -0,0 +1,36 @@
1
+ // OutStreamWithCRC.h
2
+
3
+ #ifndef __OUT_STREAM_WITH_CRC_H
4
+ #define __OUT_STREAM_WITH_CRC_H
5
+
6
+ #include "../../../../C/7zCrc.h"
7
+
8
+ #include "../../../Common/MyCom.h"
9
+
10
+ #include "../../IStream.h"
11
+
12
+ class COutStreamWithCRC:
13
+ public ISequentialOutStream,
14
+ public CMyUnknownImp
15
+ {
16
+ CMyComPtr<ISequentialOutStream> _stream;
17
+ UInt64 _size;
18
+ UInt32 _crc;
19
+ bool _calculate;
20
+ public:
21
+ MY_UNKNOWN_IMP
22
+ STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
23
+ void SetStream(ISequentialOutStream *stream) { _stream = stream; }
24
+ void ReleaseStream() { _stream.Release(); }
25
+ void Init(bool calculate = true)
26
+ {
27
+ _size = 0;
28
+ _calculate = calculate;
29
+ _crc = CRC_INIT_VAL;
30
+ }
31
+ void InitCRC() { _crc = CRC_INIT_VAL; }
32
+ UInt64 GetSize() const { return _size; }
33
+ UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); }
34
+ };
35
+
36
+ #endif
@@ -0,0 +1,18 @@
1
+ // OutStreamWithSha1.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "OutStreamWithSha1.h"
6
+
7
+ STDMETHODIMP COutStreamWithSha1::Write(const void *data, UInt32 size, UInt32 *processedSize)
8
+ {
9
+ HRESULT result = S_OK;
10
+ if (_stream)
11
+ result = _stream->Write(data, size, &size);
12
+ if (_calculate)
13
+ _sha.Update((const Byte *)data, size);
14
+ _size += size;
15
+ if (processedSize != NULL)
16
+ *processedSize = size;
17
+ return result;
18
+ }
@@ -0,0 +1,36 @@
1
+ // OutStreamWithSha1.h
2
+
3
+ #ifndef __OUT_STREAM_WITH_SHA1_H
4
+ #define __OUT_STREAM_WITH_SHA1_H
5
+
6
+ #include "../../Crypto/Sha1.h"
7
+
8
+ #include "../../../Common/MyCom.h"
9
+
10
+ #include "../../IStream.h"
11
+
12
+ class COutStreamWithSha1:
13
+ public ISequentialOutStream,
14
+ public CMyUnknownImp
15
+ {
16
+ CMyComPtr<ISequentialOutStream> _stream;
17
+ UInt64 _size;
18
+ NCrypto::NSha1::CContext _sha;
19
+ bool _calculate;
20
+ public:
21
+ MY_UNKNOWN_IMP
22
+ STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
23
+ void SetStream(ISequentialOutStream *stream) { _stream = stream; }
24
+ void ReleaseStream() { _stream.Release(); }
25
+ void Init(bool calculate = true)
26
+ {
27
+ _size = 0;
28
+ _calculate = calculate;
29
+ _sha.Init();
30
+ }
31
+ void InitSha1() { _sha.Init(); }
32
+ UInt64 GetSize() const { return _size; }
33
+ void Final(Byte *digest) { _sha.Final(digest); }
34
+ };
35
+
36
+ #endif
@@ -0,0 +1,177 @@
1
+ // ParseProperties.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "ParseProperties.h"
6
+
7
+ #include "Common/StringToInt.h"
8
+ #include "Common/MyCom.h"
9
+
10
+ HRESULT ParsePropValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue)
11
+ {
12
+ if (prop.vt == VT_UI4)
13
+ {
14
+ if (!name.IsEmpty())
15
+ return E_INVALIDARG;
16
+ resValue = prop.ulVal;
17
+ }
18
+ else if (prop.vt == VT_EMPTY)
19
+ {
20
+ if(!name.IsEmpty())
21
+ {
22
+ const wchar_t *start = name;
23
+ const wchar_t *end;
24
+ UInt64 v = ConvertStringToUInt64(start, &end);
25
+ if (end - start != name.Length())
26
+ return E_INVALIDARG;
27
+ resValue = (UInt32)v;
28
+ }
29
+ }
30
+ else
31
+ return E_INVALIDARG;
32
+ return S_OK;
33
+ }
34
+
35
+ static const int kLogarithmicSizeLimit = 32;
36
+ static const wchar_t kByteSymbol = L'B';
37
+ static const wchar_t kKiloByteSymbol = L'K';
38
+ static const wchar_t kMegaByteSymbol = L'M';
39
+
40
+ HRESULT ParsePropDictionaryValue(const UString &srcStringSpec, UInt32 &dicSize)
41
+ {
42
+ UString srcString = srcStringSpec;
43
+ srcString.MakeUpper();
44
+
45
+ const wchar_t *start = srcString;
46
+ const wchar_t *end;
47
+ UInt64 number = ConvertStringToUInt64(start, &end);
48
+ int numDigits = (int)(end - start);
49
+ if (numDigits == 0 || srcString.Length() > numDigits + 1)
50
+ return E_INVALIDARG;
51
+ if (srcString.Length() == numDigits)
52
+ {
53
+ if (number >= kLogarithmicSizeLimit)
54
+ return E_INVALIDARG;
55
+ dicSize = (UInt32)1 << (int)number;
56
+ return S_OK;
57
+ }
58
+ switch (srcString[numDigits])
59
+ {
60
+ case kByteSymbol:
61
+ if (number >= ((UInt64)1 << kLogarithmicSizeLimit))
62
+ return E_INVALIDARG;
63
+ dicSize = (UInt32)number;
64
+ break;
65
+ case kKiloByteSymbol:
66
+ if (number >= ((UInt64)1 << (kLogarithmicSizeLimit - 10)))
67
+ return E_INVALIDARG;
68
+ dicSize = (UInt32)(number << 10);
69
+ break;
70
+ case kMegaByteSymbol:
71
+ if (number >= ((UInt64)1 << (kLogarithmicSizeLimit - 20)))
72
+ return E_INVALIDARG;
73
+ dicSize = (UInt32)(number << 20);
74
+ break;
75
+ default:
76
+ return E_INVALIDARG;
77
+ }
78
+ return S_OK;
79
+ }
80
+
81
+ HRESULT ParsePropDictionaryValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue)
82
+ {
83
+ if (name.IsEmpty())
84
+ {
85
+ if (prop.vt == VT_UI4)
86
+ {
87
+ UInt32 logDicSize = prop.ulVal;
88
+ if (logDicSize >= 32)
89
+ return E_INVALIDARG;
90
+ resValue = (UInt32)1 << logDicSize;
91
+ return S_OK;
92
+ }
93
+ if (prop.vt == VT_BSTR)
94
+ return ParsePropDictionaryValue(prop.bstrVal, resValue);
95
+ return E_INVALIDARG;
96
+ }
97
+ return ParsePropDictionaryValue(name, resValue);
98
+ }
99
+
100
+ bool StringToBool(const UString &s, bool &res)
101
+ {
102
+ if (s.IsEmpty() || s.CompareNoCase(L"ON") == 0 || s.Compare(L"+") == 0)
103
+ {
104
+ res = true;
105
+ return true;
106
+ }
107
+ if (s.CompareNoCase(L"OFF") == 0 || s.Compare(L"-") == 0)
108
+ {
109
+ res = false;
110
+ return true;
111
+ }
112
+ return false;
113
+ }
114
+
115
+ HRESULT SetBoolProperty(bool &dest, const PROPVARIANT &value)
116
+ {
117
+ switch(value.vt)
118
+ {
119
+ case VT_EMPTY:
120
+ dest = true;
121
+ return S_OK;
122
+ case VT_BOOL:
123
+ dest = (value.boolVal != VARIANT_FALSE);
124
+ return S_OK;
125
+ /*
126
+ case VT_UI4:
127
+ dest = (value.ulVal != 0);
128
+ break;
129
+ */
130
+ case VT_BSTR:
131
+ return StringToBool(value.bstrVal, dest) ? S_OK : E_INVALIDARG;
132
+ }
133
+ return E_INVALIDARG;
134
+ }
135
+
136
+ int ParseStringToUInt32(const UString &srcString, UInt32 &number)
137
+ {
138
+ const wchar_t *start = srcString;
139
+ const wchar_t *end;
140
+ UInt64 number64 = ConvertStringToUInt64(start, &end);
141
+ if (number64 > 0xFFFFFFFF)
142
+ {
143
+ number = 0;
144
+ return 0;
145
+ }
146
+ number = (UInt32)number64;
147
+ return (int)(end - start);
148
+ }
149
+
150
+ HRESULT ParseMtProp(const UString &name, const PROPVARIANT &prop, UInt32 defaultNumThreads, UInt32 &numThreads)
151
+ {
152
+ if (name.IsEmpty())
153
+ {
154
+ switch(prop.vt)
155
+ {
156
+ case VT_UI4:
157
+ numThreads = prop.ulVal;
158
+ break;
159
+ default:
160
+ {
161
+ bool val;
162
+ RINOK(SetBoolProperty(val, prop));
163
+ numThreads = (val ? defaultNumThreads : 1);
164
+ break;
165
+ }
166
+ }
167
+ }
168
+ else
169
+ {
170
+ UInt32 number;
171
+ int index = ParseStringToUInt32(name, number);
172
+ if (index != name.Length())
173
+ return E_INVALIDARG;
174
+ numThreads = number;
175
+ }
176
+ return S_OK;
177
+ }
@@ -0,0 +1,18 @@
1
+ // ParseProperties.h
2
+
3
+ #ifndef __PARSEPROPERTIES_H
4
+ #define __PARSEPROPERTIES_H
5
+
6
+ #include "Common/MyString.h"
7
+ #include "Common/Types.h"
8
+
9
+ HRESULT ParsePropValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue);
10
+ HRESULT ParsePropDictionaryValue(const UString &srcStringSpec, UInt32 &dicSize);
11
+ HRESULT ParsePropDictionaryValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue);
12
+
13
+ bool StringToBool(const UString &s, bool &res);
14
+ HRESULT SetBoolProperty(bool &dest, const PROPVARIANT &value);
15
+ int ParseStringToUInt32(const UString &srcString, UInt32 &number);
16
+ HRESULT ParseMtProp(const UString &name, const PROPVARIANT &prop, UInt32 defaultNumThreads, UInt32 &numThreads);
17
+
18
+ #endif
@@ -0,0 +1,624 @@
1
+ // CpioHandler.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "Common/ComTry.h"
6
+ #include "Common/StringConvert.h"
7
+ #include "Common/StringToInt.h"
8
+
9
+ #include "Windows/PropVariant.h"
10
+ #include "Windows/Time.h"
11
+
12
+ #include "../Common/LimitedStreams.h"
13
+ #include "../Common/ProgressUtils.h"
14
+ #include "../Common/RegisterArc.h"
15
+ #include "../Common/StreamUtils.h"
16
+
17
+ #include "../Compress/CopyCoder.h"
18
+
19
+ #include "Common/ItemNameUtils.h"
20
+
21
+ namespace NArchive {
22
+ namespace NCpio {
23
+
24
+ namespace NFileHeader
25
+ {
26
+ namespace NMagic
27
+ {
28
+ const char *kMagic1 = "070701";
29
+ const char *kMagic2 = "070702";
30
+ const char *kMagic3 = "070707";
31
+ const char *kEndName = "TRAILER!!!";
32
+
33
+ const Byte kMagicForRecord2[2] = { 0xC7, 0x71 };
34
+ }
35
+
36
+ const UInt32 kRecord2Size = 26;
37
+ /*
38
+ struct CRecord2
39
+ {
40
+ unsigned short c_magic;
41
+ short c_dev;
42
+ unsigned short c_ino;
43
+ unsigned short c_mode;
44
+ unsigned short c_uid;
45
+ unsigned short c_gid;
46
+ unsigned short c_nlink;
47
+ short c_rdev;
48
+ unsigned short c_mtimes[2];
49
+ unsigned short c_namesize;
50
+ unsigned short c_filesizes[2];
51
+ };
52
+ */
53
+
54
+ const UInt32 kRecordSize = 110;
55
+ /*
56
+ struct CRecord
57
+ {
58
+ char Magic[6]; // "070701" for "new" portable format, "070702" for CRC format
59
+ char inode[8];
60
+ char Mode[8];
61
+ char UID[8];
62
+ char GID[8];
63
+ char nlink[8];
64
+ char mtime[8];
65
+ char Size[8]; // must be 0 for FIFOs and directories
66
+ char DevMajor[8];
67
+ char DevMinor[8];
68
+ char RDevMajor[8]; //only valid for chr and blk special files
69
+ char RDevMinor[8]; //only valid for chr and blk special files
70
+ char NameSize[8]; // count includes terminating NUL in pathname
71
+ char ChkSum[8]; // 0 for "new" portable format; for CRC format the sum of all the bytes in the file
72
+ bool CheckMagic() const
73
+ { return memcmp(Magic, NMagic::kMagic1, 6) == 0 ||
74
+ memcmp(Magic, NMagic::kMagic2, 6) == 0; };
75
+ };
76
+ */
77
+
78
+ const UInt32 kOctRecordSize = 76;
79
+
80
+ }
81
+
82
+ struct CItem
83
+ {
84
+ AString Name;
85
+ UInt32 inode;
86
+ UInt32 Mode;
87
+ UInt32 UID;
88
+ UInt32 GID;
89
+ UInt32 Size;
90
+ UInt32 MTime;
91
+
92
+ // char LinkFlag;
93
+ // AString LinkName; ?????
94
+ char Magic[8];
95
+ UInt32 NumLinks;
96
+ UInt32 DevMajor;
97
+ UInt32 DevMinor;
98
+ UInt32 RDevMajor;
99
+ UInt32 RDevMinor;
100
+ UInt32 ChkSum;
101
+
102
+ UInt32 Align;
103
+
104
+ bool IsDir() const { return (Mode & 0170000) == 0040000; }
105
+ };
106
+
107
+ class CItemEx: public CItem
108
+ {
109
+ public:
110
+ UInt64 HeaderPosition;
111
+ UInt32 HeaderSize;
112
+ UInt64 GetDataPosition() const { return HeaderPosition + HeaderSize; };
113
+ };
114
+
115
+ const UInt32 kMaxBlockSize = NFileHeader::kRecordSize;
116
+
117
+ class CInArchive
118
+ {
119
+ CMyComPtr<IInStream> m_Stream;
120
+ UInt64 m_Position;
121
+
122
+ UInt16 _blockSize;
123
+ Byte _block[kMaxBlockSize];
124
+ UInt32 _blockPos;
125
+ Byte ReadByte();
126
+ UInt16 ReadUInt16();
127
+ UInt32 ReadUInt32();
128
+
129
+ bool ReadNumber(UInt32 &resultValue);
130
+ bool ReadOctNumber(int size, UInt32 &resultValue);
131
+
132
+ HRESULT ReadBytes(void *data, UInt32 size, UInt32 &processedSize);
133
+ public:
134
+ HRESULT Open(IInStream *inStream);
135
+ HRESULT GetNextItem(bool &filled, CItemEx &itemInfo);
136
+ HRESULT Skip(UInt64 numBytes);
137
+ HRESULT SkipDataRecords(UInt64 dataSize, UInt32 align);
138
+ };
139
+
140
+ HRESULT CInArchive::ReadBytes(void *data, UInt32 size, UInt32 &processedSize)
141
+ {
142
+ size_t realProcessedSize = size;
143
+ RINOK(ReadStream(m_Stream, data, &realProcessedSize));
144
+ processedSize = (UInt32)realProcessedSize;
145
+ m_Position += processedSize;
146
+ return S_OK;
147
+ }
148
+
149
+ Byte CInArchive::ReadByte()
150
+ {
151
+ if (_blockPos >= _blockSize)
152
+ throw "Incorrect cpio archive";
153
+ return _block[_blockPos++];
154
+ }
155
+
156
+ UInt16 CInArchive::ReadUInt16()
157
+ {
158
+ UInt16 value = 0;
159
+ for (int i = 0; i < 2; i++)
160
+ {
161
+ Byte b = ReadByte();
162
+ value |= (UInt16(b) << (8 * i));
163
+ }
164
+ return value;
165
+ }
166
+
167
+ UInt32 CInArchive::ReadUInt32()
168
+ {
169
+ UInt32 value = 0;
170
+ for (int i = 0; i < 4; i++)
171
+ {
172
+ Byte b = ReadByte();
173
+ value |= (UInt32(b) << (8 * i));
174
+ }
175
+ return value;
176
+ }
177
+
178
+ HRESULT CInArchive::Open(IInStream *inStream)
179
+ {
180
+ RINOK(inStream->Seek(0, STREAM_SEEK_CUR, &m_Position));
181
+ m_Stream = inStream;
182
+ return S_OK;
183
+ }
184
+
185
+ bool CInArchive::ReadNumber(UInt32 &resultValue)
186
+ {
187
+ resultValue = 0;
188
+ for (int i = 0; i < 8; i++)
189
+ {
190
+ char c = char(ReadByte());
191
+ int d;
192
+ if (c >= '0' && c <= '9')
193
+ d = c - '0';
194
+ else if (c >= 'A' && c <= 'F')
195
+ d = 10 + c - 'A';
196
+ else if (c >= 'a' && c <= 'f')
197
+ d = 10 + c - 'a';
198
+ else
199
+ return false;
200
+ resultValue *= 0x10;
201
+ resultValue += d;
202
+ }
203
+ return true;
204
+ }
205
+
206
+ static bool OctalToNumber(const char *s, UInt64 &res)
207
+ {
208
+ const char *end;
209
+ res = ConvertOctStringToUInt64(s, &end);
210
+ return (*end == ' ' || *end == 0);
211
+ }
212
+
213
+ static bool OctalToNumber32(const char *s, UInt32 &res)
214
+ {
215
+ UInt64 res64;
216
+ if (!OctalToNumber(s, res64))
217
+ return false;
218
+ res = (UInt32)res64;
219
+ return (res64 <= 0xFFFFFFFF);
220
+ }
221
+
222
+ bool CInArchive::ReadOctNumber(int size, UInt32 &resultValue)
223
+ {
224
+ char sz[32 + 4];
225
+ int i;
226
+ for (i = 0; i < size && i < 32; i++)
227
+ sz[i] = (char)ReadByte();
228
+ sz[i] = 0;
229
+ return OctalToNumber32(sz, resultValue);
230
+ }
231
+
232
+ #define GetFromHex(y) { if (!ReadNumber(y)) return S_FALSE; }
233
+ #define GetFromOct6(y) { if (!ReadOctNumber(6, y)) return S_FALSE; }
234
+ #define GetFromOct11(y) { if (!ReadOctNumber(11, y)) return S_FALSE; }
235
+
236
+ static unsigned short ConvertValue(unsigned short value, bool convert)
237
+ {
238
+ if (!convert)
239
+ return value;
240
+ return (unsigned short)((((unsigned short)(value & 0xFF)) << 8) | (value >> 8));
241
+ }
242
+
243
+ static UInt32 GetAlignedSize(UInt32 size, UInt32 align)
244
+ {
245
+ while ((size & (align - 1)) != 0)
246
+ size++;
247
+ return size;
248
+ }
249
+
250
+
251
+ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item)
252
+ {
253
+ filled = false;
254
+
255
+ UInt32 processedSize;
256
+ item.HeaderPosition = m_Position;
257
+
258
+ _blockSize = kMaxBlockSize;
259
+ RINOK(ReadBytes(_block, 2, processedSize));
260
+ if (processedSize != 2)
261
+ return S_FALSE;
262
+ _blockPos = 0;
263
+
264
+ UInt32 nameSize;
265
+
266
+ bool oldBE =
267
+ _block[0] == NFileHeader::NMagic::kMagicForRecord2[1] &&
268
+ _block[1] == NFileHeader::NMagic::kMagicForRecord2[0];
269
+
270
+ bool binMode = (_block[0] == NFileHeader::NMagic::kMagicForRecord2[0] &&
271
+ _block[1] == NFileHeader::NMagic::kMagicForRecord2[1]) ||
272
+ oldBE;
273
+
274
+ if (binMode)
275
+ {
276
+ RINOK(ReadBytes(_block + 2, NFileHeader::kRecord2Size - 2, processedSize));
277
+ if (processedSize != NFileHeader::kRecord2Size - 2)
278
+ return S_FALSE;
279
+ item.Align = 2;
280
+ _blockPos = 2;
281
+ item.DevMajor = 0;
282
+ item.DevMinor = ConvertValue(ReadUInt16(), oldBE);
283
+ item.inode = ConvertValue(ReadUInt16(), oldBE);
284
+ item.Mode = ConvertValue(ReadUInt16(), oldBE);
285
+ item.UID = ConvertValue(ReadUInt16(), oldBE);
286
+ item.GID = ConvertValue(ReadUInt16(), oldBE);
287
+ item.NumLinks = ConvertValue(ReadUInt16(), oldBE);
288
+ item.RDevMajor =0;
289
+ item.RDevMinor = ConvertValue(ReadUInt16(), oldBE);
290
+ UInt16 timeHigh = ConvertValue(ReadUInt16(), oldBE);
291
+ UInt16 timeLow = ConvertValue(ReadUInt16(), oldBE);
292
+ item.MTime = (UInt32(timeHigh) << 16) + timeLow;
293
+ nameSize = ConvertValue(ReadUInt16(), oldBE);
294
+ UInt16 sizeHigh = ConvertValue(ReadUInt16(), oldBE);
295
+ UInt16 sizeLow = ConvertValue(ReadUInt16(), oldBE);
296
+ item.Size = (UInt32(sizeHigh) << 16) + sizeLow;
297
+
298
+ item.ChkSum = 0;
299
+ item.HeaderSize = GetAlignedSize(
300
+ nameSize + NFileHeader::kRecord2Size, item.Align);
301
+ nameSize = item.HeaderSize - NFileHeader::kRecord2Size;
302
+ }
303
+ else
304
+ {
305
+ RINOK(ReadBytes(_block + 2, 4, processedSize));
306
+ if (processedSize != 4)
307
+ return S_FALSE;
308
+
309
+ bool magicOK =
310
+ memcmp(_block, NFileHeader::NMagic::kMagic1, 6) == 0 ||
311
+ memcmp(_block, NFileHeader::NMagic::kMagic2, 6) == 0;
312
+ _blockPos = 6;
313
+ if (magicOK)
314
+ {
315
+ RINOK(ReadBytes(_block + 6, NFileHeader::kRecordSize - 6, processedSize));
316
+ if (processedSize != NFileHeader::kRecordSize - 6)
317
+ return S_FALSE;
318
+ item.Align = 4;
319
+
320
+ GetFromHex(item.inode);
321
+ GetFromHex(item.Mode);
322
+ GetFromHex(item.UID);
323
+ GetFromHex(item.GID);
324
+ GetFromHex(item.NumLinks);
325
+ UInt32 mTime;
326
+ GetFromHex(mTime);
327
+ item.MTime = mTime;
328
+ GetFromHex(item.Size);
329
+ GetFromHex(item.DevMajor);
330
+ GetFromHex(item.DevMinor);
331
+ GetFromHex(item.RDevMajor);
332
+ GetFromHex(item.RDevMinor);
333
+ GetFromHex(nameSize);
334
+ GetFromHex(item.ChkSum);
335
+ item.HeaderSize = GetAlignedSize(
336
+ nameSize + NFileHeader::kRecordSize, item.Align);
337
+ nameSize = item.HeaderSize - NFileHeader::kRecordSize;
338
+ }
339
+ else
340
+ {
341
+ if (!memcmp(_block, NFileHeader::NMagic::kMagic3, 6) == 0)
342
+ return S_FALSE;
343
+ RINOK(ReadBytes(_block + 6, NFileHeader::kOctRecordSize - 6, processedSize));
344
+ if (processedSize != NFileHeader::kOctRecordSize - 6)
345
+ return S_FALSE;
346
+ item.Align = 1;
347
+ item.DevMajor = 0;
348
+ GetFromOct6(item.DevMinor);
349
+ GetFromOct6(item.inode);
350
+ GetFromOct6(item.Mode);
351
+ GetFromOct6(item.UID);
352
+ GetFromOct6(item.GID);
353
+ GetFromOct6(item.NumLinks);
354
+ item.RDevMajor = 0;
355
+ GetFromOct6(item.RDevMinor);
356
+ UInt32 mTime;
357
+ GetFromOct11(mTime);
358
+ item.MTime = mTime;
359
+ GetFromOct6(nameSize);
360
+ GetFromOct11(item.Size); // ?????
361
+ item.HeaderSize = GetAlignedSize(
362
+ nameSize + NFileHeader::kOctRecordSize, item.Align);
363
+ nameSize = item.HeaderSize - NFileHeader::kOctRecordSize;
364
+ }
365
+ }
366
+ if (nameSize == 0 || nameSize >= (1 << 27))
367
+ return E_FAIL;
368
+ RINOK(ReadBytes(item.Name.GetBuffer(nameSize), nameSize, processedSize));
369
+ if (processedSize != nameSize)
370
+ return E_FAIL;
371
+ item.Name.ReleaseBuffer();
372
+ if (strcmp(item.Name, NFileHeader::NMagic::kEndName) == 0)
373
+ return S_OK;
374
+ filled = true;
375
+ return S_OK;
376
+ }
377
+
378
+ HRESULT CInArchive::Skip(UInt64 numBytes)
379
+ {
380
+ UInt64 newPostion;
381
+ RINOK(m_Stream->Seek(numBytes, STREAM_SEEK_CUR, &newPostion));
382
+ m_Position += numBytes;
383
+ if (m_Position != newPostion)
384
+ return E_FAIL;
385
+ return S_OK;
386
+ }
387
+
388
+ HRESULT CInArchive::SkipDataRecords(UInt64 dataSize, UInt32 align)
389
+ {
390
+ while ((dataSize & (align - 1)) != 0)
391
+ dataSize++;
392
+ return Skip(dataSize);
393
+ }
394
+
395
+
396
+ class CHandler:
397
+ public IInArchive,
398
+ public IInArchiveGetStream,
399
+ public CMyUnknownImp
400
+ {
401
+ CObjectVector<CItemEx> _items;
402
+ CMyComPtr<IInStream> _stream;
403
+ public:
404
+ MY_UNKNOWN_IMP2(IInArchive, IInArchiveGetStream)
405
+ INTERFACE_IInArchive(;)
406
+ STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
407
+ };
408
+
409
+ /*
410
+ enum
411
+ {
412
+ kpidinode = kpidUserDefined,
413
+ kpidiChkSum
414
+ };
415
+ */
416
+
417
+ STATPROPSTG kProps[] =
418
+ {
419
+ { NULL, kpidPath, VT_BSTR},
420
+ { NULL, kpidIsDir, VT_BOOL},
421
+ { NULL, kpidSize, VT_UI8},
422
+ { NULL, kpidPackSize, VT_UI8},
423
+ { NULL, kpidMTime, VT_FILETIME},
424
+ { NULL, kpidPosixAttrib, VT_UI4},
425
+ // { L"inode", kpidinode, VT_UI4}
426
+ // { L"CheckSum", kpidiChkSum, VT_UI4}
427
+ };
428
+
429
+ IMP_IInArchive_Props
430
+ IMP_IInArchive_ArcProps_NO
431
+
432
+ STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 *, IArchiveOpenCallback *callback)
433
+ {
434
+ COM_TRY_BEGIN
435
+ // try
436
+ {
437
+ CInArchive archive;
438
+
439
+ UInt64 endPos = 0;
440
+ bool needSetTotal = true;
441
+
442
+ if (callback != NULL)
443
+ {
444
+ RINOK(stream->Seek(0, STREAM_SEEK_END, &endPos));
445
+ RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL));
446
+ }
447
+
448
+ RINOK(archive.Open(stream));
449
+
450
+ _items.Clear();
451
+
452
+ for (;;)
453
+ {
454
+ CItemEx item;
455
+ bool filled;
456
+ HRESULT result = archive.GetNextItem(filled, item);
457
+ if (result == S_FALSE)
458
+ return S_FALSE;
459
+ if (result != S_OK)
460
+ return S_FALSE;
461
+ if (!filled)
462
+ break;
463
+ _items.Add(item);
464
+ archive.SkipDataRecords(item.Size, item.Align);
465
+ if (callback != NULL)
466
+ {
467
+ if (needSetTotal)
468
+ {
469
+ RINOK(callback->SetTotal(NULL, &endPos));
470
+ needSetTotal = false;
471
+ }
472
+ if (_items.Size() % 100 == 0)
473
+ {
474
+ UInt64 numFiles = _items.Size();
475
+ UInt64 numBytes = item.HeaderPosition;
476
+ RINOK(callback->SetCompleted(&numFiles, &numBytes));
477
+ }
478
+ }
479
+ }
480
+ if (_items.Size() == 0)
481
+ return S_FALSE;
482
+
483
+ _stream = stream;
484
+ }
485
+ /*
486
+ catch(...)
487
+ {
488
+ return S_FALSE;
489
+ }
490
+ */
491
+ return S_OK;
492
+ COM_TRY_END
493
+ }
494
+
495
+ STDMETHODIMP CHandler::Close()
496
+ {
497
+ _items.Clear();
498
+ _stream.Release();
499
+ return S_OK;
500
+ }
501
+
502
+ STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
503
+ {
504
+ *numItems = _items.Size();
505
+ return S_OK;
506
+ }
507
+
508
+ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
509
+ {
510
+ COM_TRY_BEGIN
511
+ NWindows::NCOM::CPropVariant prop;
512
+ const CItemEx &item = _items[index];
513
+
514
+ switch(propID)
515
+ {
516
+ case kpidPath: prop = NItemName::GetOSName(MultiByteToUnicodeString(item.Name, CP_OEMCP)); break;
517
+ case kpidIsDir: prop = item.IsDir(); break;
518
+ case kpidSize:
519
+ case kpidPackSize:
520
+ prop = (UInt64)item.Size;
521
+ break;
522
+ case kpidMTime:
523
+ {
524
+ if (item.MTime != 0)
525
+ {
526
+ FILETIME utc;
527
+ NWindows::NTime::UnixTimeToFileTime(item.MTime, utc);
528
+ prop = utc;
529
+ }
530
+ break;
531
+ }
532
+ case kpidPosixAttrib: prop = item.Mode; break;
533
+ /*
534
+ case kpidinode: prop = item.inode; break;
535
+ case kpidiChkSum: prop = item.ChkSum; break;
536
+ */
537
+ }
538
+ prop.Detach(value);
539
+ return S_OK;
540
+ COM_TRY_END
541
+ }
542
+
543
+ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
544
+ Int32 testMode, IArchiveExtractCallback *extractCallback)
545
+ {
546
+ COM_TRY_BEGIN
547
+ bool allFilesMode = (numItems == (UInt32)-1);
548
+ if (allFilesMode)
549
+ numItems = _items.Size();
550
+ if (numItems == 0)
551
+ return S_OK;
552
+ UInt64 totalSize = 0;
553
+ UInt32 i;
554
+ for (i = 0; i < numItems; i++)
555
+ totalSize += _items[allFilesMode ? i : indices[i]].Size;
556
+ extractCallback->SetTotal(totalSize);
557
+
558
+ UInt64 currentTotalSize = 0;
559
+
560
+ NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder();
561
+ CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
562
+
563
+ CLocalProgress *lps = new CLocalProgress;
564
+ CMyComPtr<ICompressProgressInfo> progress = lps;
565
+ lps->Init(extractCallback, false);
566
+
567
+ CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream;
568
+ CMyComPtr<ISequentialInStream> inStream(streamSpec);
569
+ streamSpec->SetStream(_stream);
570
+
571
+ for (i = 0; i < numItems; i++)
572
+ {
573
+ lps->InSize = lps->OutSize = currentTotalSize;
574
+ RINOK(lps->SetCur());
575
+ CMyComPtr<ISequentialOutStream> outStream;
576
+ Int32 askMode = testMode ?
577
+ NExtract::NAskMode::kTest :
578
+ NExtract::NAskMode::kExtract;
579
+ Int32 index = allFilesMode ? i : indices[i];
580
+ const CItemEx &item = _items[index];
581
+ RINOK(extractCallback->GetStream(index, &outStream, askMode));
582
+ currentTotalSize += item.Size;
583
+ if (item.IsDir())
584
+ {
585
+ RINOK(extractCallback->PrepareOperation(askMode));
586
+ RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK));
587
+ continue;
588
+ }
589
+ if (!testMode && !outStream)
590
+ continue;
591
+ RINOK(extractCallback->PrepareOperation(askMode));
592
+ if (testMode)
593
+ {
594
+ RINOK(extractCallback->SetOperationResult(NExtract::NOperationResult::kOK));
595
+ continue;
596
+ }
597
+ RINOK(_stream->Seek(item.GetDataPosition(), STREAM_SEEK_SET, NULL));
598
+ streamSpec->Init(item.Size);
599
+ RINOK(copyCoder->Code(inStream, outStream, NULL, NULL, progress));
600
+ outStream.Release();
601
+ RINOK(extractCallback->SetOperationResult((copyCoderSpec->TotalSize == item.Size) ?
602
+ NExtract::NOperationResult::kOK:
603
+ NExtract::NOperationResult::kDataError));
604
+ }
605
+ return S_OK;
606
+ COM_TRY_END
607
+ }
608
+
609
+ STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
610
+ {
611
+ COM_TRY_BEGIN
612
+ const CItemEx &item = _items[index];
613
+ return CreateLimitedInStream(_stream, item.GetDataPosition(), item.Size, stream);
614
+ COM_TRY_END
615
+ }
616
+
617
+ static IInArchive *CreateArc() { return new NArchive::NCpio::CHandler; }
618
+
619
+ static CArcInfo g_ArcInfo =
620
+ { L"Cpio", L"cpio", 0, 0xED, { 0 }, 0, false, CreateArc, 0 };
621
+
622
+ REGISTER_ARC(Cpio)
623
+
624
+ }}