seven_zip_ruby_am 1.2.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (734) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +26 -0
  3. data/.travis.yml +35 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +39 -0
  6. data/README.md +210 -0
  7. data/Rakefile +67 -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/extconf.rb +194 -0
  709. data/ext/seven_zip_ruby/guid_defs.h +29 -0
  710. data/ext/seven_zip_ruby/mutex.h +10 -0
  711. data/ext/seven_zip_ruby/posix/mutex.h +94 -0
  712. data/ext/seven_zip_ruby/seven_zip_archive.cpp +1854 -0
  713. data/ext/seven_zip_ruby/seven_zip_archive.h +548 -0
  714. data/ext/seven_zip_ruby/util_common.cpp +28 -0
  715. data/ext/seven_zip_ruby/util_common.h +467 -0
  716. data/ext/seven_zip_ruby/utils.cpp +575 -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 +27 -0
  720. data/lib/seven_zip_ruby/7z.dll +0 -0
  721. data/lib/seven_zip_ruby/7z.sfx +0 -0
  722. data/lib/seven_zip_ruby/7z64.dll +0 -0
  723. data/lib/seven_zip_ruby/7zCon.sfx +0 -0
  724. data/lib/seven_zip_ruby/archive_info.rb +21 -0
  725. data/lib/seven_zip_ruby/entry_info.rb +46 -0
  726. data/lib/seven_zip_ruby/exception.rb +10 -0
  727. data/lib/seven_zip_ruby/seven_zip_reader.rb +537 -0
  728. data/lib/seven_zip_ruby/seven_zip_writer.rb +502 -0
  729. data/lib/seven_zip_ruby/update_info.rb +116 -0
  730. data/lib/seven_zip_ruby/version.rb +3 -0
  731. data/seven_zip_ruby.gemspec +34 -0
  732. data/spec/seven_zip_ruby_spec.rb +702 -0
  733. data/spec/seven_zip_ruby_spec_helper.rb +129 -0
  734. metadata +823 -0
@@ -0,0 +1,375 @@
1
+ // Archive/UdfIn.h -- UDF / ECMA-167
2
+
3
+ #ifndef __ARCHIVE_UDF_IN_H
4
+ #define __ARCHIVE_UDF_IN_H
5
+
6
+ #include "Common/MyCom.h"
7
+ #include "Common/IntToString.h"
8
+ #include "Common/Buffer.h"
9
+ #include "Common/MyString.h"
10
+ #include "Common/MyMap.h"
11
+
12
+ #include "../../IStream.h"
13
+
14
+ namespace NArchive {
15
+ namespace NUdf {
16
+
17
+ // ---------- ECMA Part 1 ----------
18
+
19
+ // ECMA 1/7.2.12
20
+
21
+ /*
22
+ struct CDString32
23
+ {
24
+ Byte Data[32];
25
+ void Parse(const Byte *buf);
26
+ // UString GetString() const;
27
+ };
28
+ */
29
+
30
+ struct CDString128
31
+ {
32
+ Byte Data[128];
33
+ void Parse(const Byte *buf);
34
+ UString GetString() const;
35
+ };
36
+
37
+ struct CDString
38
+ {
39
+ CByteBuffer Data;
40
+ void Parse(const Byte *p, unsigned size);
41
+ UString GetString() const;
42
+ };
43
+
44
+
45
+ // ECMA 1/7.3
46
+
47
+ struct CTime
48
+ {
49
+ Byte Data[12];
50
+
51
+ unsigned GetType() const { return Data[1] >> 4; }
52
+ bool IsLocal() const { return GetType() == 1; }
53
+ int GetMinutesOffset() const
54
+ {
55
+ int t = (Data[0] | ((UInt16)Data[1] << 8)) & 0xFFF;
56
+ if ((t >> 11) != 0)
57
+ t -= (1 << 12);
58
+ return (t > (60 * 24) || t < -(60 * 24)) ? 0 : t;
59
+ }
60
+ unsigned GetYear() const { return (Data[2] | ((UInt16)Data[3] << 8)); }
61
+ void Parse(const Byte *buf);
62
+ };
63
+
64
+
65
+ // ECMA 1/7.4
66
+
67
+ /*
68
+ struct CRegId
69
+ {
70
+ Byte Flags;
71
+ char Id[23];
72
+ char Suffix[8];
73
+
74
+ void Parse(const Byte *buf);
75
+ };
76
+ */
77
+
78
+ // ---------- ECMA Part 3: Volume Structure ----------
79
+
80
+ // ECMA 3/10.5
81
+
82
+ struct CPartition
83
+ {
84
+ // UInt16 Flags;
85
+ UInt16 Number;
86
+ // CRegId ContentsId;
87
+ // Byte ContentsUse[128];
88
+ // UInt32 AccessType;
89
+
90
+ UInt32 Pos;
91
+ UInt32 Len;
92
+
93
+ // CRegId ImplId;
94
+ // Byte ImplUse[128];
95
+
96
+ int VolIndex;
97
+ CMap32 Map;
98
+
99
+ CPartition(): VolIndex(-1) {}
100
+
101
+ // bool IsNsr() const { return (strncmp(ContentsId.Id, "+NSR0", 5) == 0); }
102
+ // bool IsAllocated() const { return ((Flags & 1) != 0); }
103
+ };
104
+
105
+ struct CLogBlockAddr
106
+ {
107
+ UInt32 Pos;
108
+ UInt16 PartitionRef;
109
+
110
+ void Parse(const Byte *buf);
111
+ };
112
+
113
+ enum EShortAllocDescType
114
+ {
115
+ SHORT_ALLOC_DESC_TYPE_RecordedAndAllocated = 0,
116
+ SHORT_ALLOC_DESC_TYPE_NotRecordedButAllocated = 1,
117
+ SHORT_ALLOC_DESC_TYPE_NotRecordedAndNotAllocated = 2,
118
+ SHORT_ALLOC_DESC_TYPE_NextExtent = 3
119
+ };
120
+
121
+ struct CShortAllocDesc
122
+ {
123
+ UInt32 Len;
124
+ UInt32 Pos;
125
+
126
+ // 4/14.14.1
127
+ // UInt32 GetLen() const { return Len & 0x3FFFFFFF; }
128
+ // UInt32 GetType() const { return Len >> 30; }
129
+ // bool IsRecAndAlloc() const { return GetType() == SHORT_ALLOC_DESC_TYPE_RecordedAndAllocated; }
130
+ void Parse(const Byte *buf);
131
+ };
132
+
133
+ /*
134
+ struct CADImpUse
135
+ {
136
+ UInt16 Flags;
137
+ UInt32 UdfUniqueId;
138
+ void Parse(const Byte *buf);
139
+ };
140
+ */
141
+
142
+ struct CLongAllocDesc
143
+ {
144
+ UInt32 Len;
145
+ CLogBlockAddr Location;
146
+
147
+ // Byte ImplUse[6];
148
+ // CADImpUse adImpUse; // UDF
149
+
150
+ UInt32 GetLen() const { return Len & 0x3FFFFFFF; }
151
+ UInt32 GetType() const { return Len >> 30; }
152
+ bool IsRecAndAlloc() const { return GetType() == SHORT_ALLOC_DESC_TYPE_RecordedAndAllocated; }
153
+ void Parse(const Byte *buf);
154
+ };
155
+
156
+ struct CPartitionMap
157
+ {
158
+ Byte Type;
159
+ // Byte Len;
160
+
161
+ // Type - 1
162
+ // UInt16 VolSeqNumber;
163
+ UInt16 PartitionNumber;
164
+
165
+ // Byte Data[256];
166
+
167
+ int PartitionIndex;
168
+ };
169
+
170
+ // ECMA 4/14.6
171
+
172
+ enum EIcbFileType
173
+ {
174
+ ICB_FILE_TYPE_DIR = 4,
175
+ ICB_FILE_TYPE_FILE = 5
176
+ };
177
+
178
+ enum EIcbDescriptorType
179
+ {
180
+ ICB_DESC_TYPE_SHORT = 0,
181
+ ICB_DESC_TYPE_LONG = 1,
182
+ ICB_DESC_TYPE_EXTENDED = 2,
183
+ ICB_DESC_TYPE_INLINE = 3
184
+ };
185
+
186
+ struct CIcbTag
187
+ {
188
+ // UInt32 PriorDirectNum;
189
+ // UInt16 StrategyType;
190
+ // UInt16 StrategyParam;
191
+ // UInt16 MaxNumOfEntries;
192
+ Byte FileType;
193
+ // CLogBlockAddr ParentIcb;
194
+ UInt16 Flags;
195
+
196
+ bool IsDir() const { return FileType == ICB_FILE_TYPE_DIR; }
197
+ int GetDescriptorType() const { return Flags & 3; }
198
+ void Parse(const Byte *p);
199
+ };
200
+
201
+ // const Byte FILEID_CHARACS_Existance = (1 << 0);
202
+ const Byte FILEID_CHARACS_Parent = (1 << 3);
203
+
204
+ struct CFile
205
+ {
206
+ // UInt16 FileVersion;
207
+ // Byte FileCharacteristics;
208
+ // CByteBuffer ImplUse;
209
+ CDString Id;
210
+
211
+ CFile(): /* FileVersion(0), FileCharacteristics(0), */ ItemIndex(-1) {}
212
+ int ItemIndex;
213
+ UString GetName() const { return Id.GetString(); }
214
+ };
215
+
216
+ struct CMyExtent
217
+ {
218
+ UInt32 Pos;
219
+ UInt32 Len;
220
+ int PartitionRef;
221
+
222
+ UInt32 GetLen() const { return Len & 0x3FFFFFFF; }
223
+ UInt32 GetType() const { return Len >> 30; }
224
+ bool IsRecAndAlloc() const { return GetType() == SHORT_ALLOC_DESC_TYPE_RecordedAndAllocated; }
225
+ };
226
+
227
+ struct CItem
228
+ {
229
+ CIcbTag IcbTag;
230
+
231
+ // UInt32 Uid;
232
+ // UInt32 Gid;
233
+ // UInt32 Permissions;
234
+ // UInt16 FileLinkCount;
235
+ // Byte RecordFormat;
236
+ // Byte RecordDisplayAttr;
237
+ // UInt32 RecordLen;
238
+ UInt64 Size;
239
+ UInt64 NumLogBlockRecorded;
240
+ CTime ATime;
241
+ CTime MTime;
242
+ // CTime AttrtTime;
243
+ // UInt32 CheckPoint;
244
+ // CLongAllocDesc ExtendedAttrIcb;
245
+ // CRegId ImplId;
246
+ // UInt64 UniqueId;
247
+
248
+ bool IsInline;
249
+ CByteBuffer InlineData;
250
+ CRecordVector<CMyExtent> Extents;
251
+ CRecordVector<int> SubFiles;
252
+
253
+ void Parse(const Byte *buf);
254
+
255
+ bool IsRecAndAlloc() const
256
+ {
257
+ for (int i = 0; i < Extents.Size(); i++)
258
+ if (!Extents[i].IsRecAndAlloc())
259
+ return false;
260
+ return true;
261
+ }
262
+
263
+ UInt64 GetChunksSumSize() const
264
+ {
265
+ if (IsInline)
266
+ return InlineData.GetCapacity();
267
+ UInt64 size = 0;
268
+ for (int i = 0; i < Extents.Size(); i++)
269
+ size += Extents[i].GetLen();
270
+ return size;
271
+ }
272
+
273
+ bool CheckChunkSizes() const { return GetChunksSumSize() == Size; }
274
+
275
+ bool IsDir() const { return IcbTag.IsDir(); }
276
+ };
277
+
278
+ struct CRef
279
+ {
280
+ int Parent;
281
+ int FileIndex;
282
+ };
283
+
284
+
285
+ // ECMA 4 / 14.1
286
+ struct CFileSet
287
+ {
288
+ CTime RecodringTime;
289
+ // UInt16 InterchangeLevel;
290
+ // UInt16 MaxInterchangeLevel;
291
+ // UInt32 FileSetNumber;
292
+ // UInt32 FileSetDescNumber;
293
+ // CDString32 Id;
294
+ // CDString32 CopyrightId;
295
+ // CDString32 AbstractId;
296
+
297
+ CLongAllocDesc RootDirICB;
298
+ // CRegId DomainId;
299
+ // CLongAllocDesc SystemStreamDirICB;
300
+
301
+ CRecordVector<CRef> Refs;
302
+ };
303
+
304
+
305
+ // ECMA 3/10.6
306
+
307
+ struct CLogVol
308
+ {
309
+ CDString128 Id;
310
+ UInt32 BlockSize;
311
+ // CRegId DomainId;
312
+
313
+ // Byte ContentsUse[16];
314
+ CLongAllocDesc FileSetLocation; // UDF
315
+
316
+ // CRegId ImplId;
317
+ // Byte ImplUse[128];
318
+
319
+ CObjectVector<CPartitionMap> PartitionMaps;
320
+ CObjectVector<CFileSet> FileSets;
321
+
322
+ UString GetName() const { return Id.GetString(); }
323
+ };
324
+
325
+ struct CProgressVirt
326
+ {
327
+ virtual HRESULT SetTotal(UInt64 numBytes) PURE;
328
+ virtual HRESULT SetCompleted(UInt64 numFiles, UInt64 numBytes) PURE;
329
+ virtual HRESULT SetCompleted() PURE;
330
+ };
331
+
332
+ class CInArchive
333
+ {
334
+ CMyComPtr<IInStream> _stream;
335
+ CProgressVirt *_progress;
336
+
337
+ HRESULT Read(int volIndex, int partitionRef, UInt32 blockPos, UInt32 len, Byte *buf);
338
+ HRESULT Read(int volIndex, const CLongAllocDesc &lad, Byte *buf);
339
+ HRESULT ReadFromFile(int volIndex, const CItem &item, CByteBuffer &buf);
340
+
341
+ HRESULT ReadFileItem(int volIndex, int fsIndex, const CLongAllocDesc &lad, int numRecurseAllowed);
342
+ HRESULT ReadItem(int volIndex, int fsIndex, const CLongAllocDesc &lad, int numRecurseAllowed);
343
+
344
+ HRESULT Open2();
345
+ HRESULT FillRefs(CFileSet &fs, int fileIndex, int parent, int numRecurseAllowed);
346
+
347
+ UInt64 _processedProgressBytes;
348
+
349
+ UInt64 _fileNameLengthTotal;
350
+ int _numRefs;
351
+ UInt32 _numExtents;
352
+ UInt64 _inlineExtentsSize;
353
+ bool CheckExtent(int volIndex, int partitionRef, UInt32 blockPos, UInt32 len) const;
354
+ public:
355
+ HRESULT Open(IInStream *inStream, CProgressVirt *progress);
356
+ void Clear();
357
+
358
+ CObjectVector<CPartition> Partitions;
359
+ CObjectVector<CLogVol> LogVols;
360
+
361
+ CObjectVector<CItem> Items;
362
+ CObjectVector<CFile> Files;
363
+
364
+ int SecLogSize;
365
+
366
+ UString GetComment() const;
367
+ UString GetItemPath(int volIndex, int fsIndex, int refIndex,
368
+ bool showVolName, bool showFsName) const;
369
+
370
+ bool CheckItemExtents(int volIndex, const CItem &item) const;
371
+ };
372
+
373
+ }}
374
+
375
+ #endif
@@ -0,0 +1,13 @@
1
+ // UdfRegister.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "../../Common/RegisterArc.h"
6
+
7
+ #include "UdfHandler.h"
8
+ static IInArchive *CreateArc() { return new NArchive::NUdf::CHandler; }
9
+
10
+ static CArcInfo g_ArcInfo =
11
+ { L"Udf", L"iso img", 0, 0xE0, { 0, 'N', 'S', 'R', '0' }, 5, false, CreateArc, 0 };
12
+
13
+ REGISTER_ARC(Udf)
@@ -0,0 +1,734 @@
1
+ // VhdHandler.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "../../../C/CpuArch.h"
6
+
7
+ #include "Common/Buffer.h"
8
+ #include "Common/ComTry.h"
9
+ #include "Common/IntToString.h"
10
+ #include "Common/MyString.h"
11
+
12
+ #include "Windows/PropVariant.h"
13
+
14
+ #include "../Common/LimitedStreams.h"
15
+ #include "../Common/ProgressUtils.h"
16
+ #include "../Common/RegisterArc.h"
17
+ #include "../Common/StreamUtils.h"
18
+
19
+ #include "../Compress/CopyCoder.h"
20
+
21
+ #define Get16(p) GetBe16(p)
22
+ #define Get32(p) GetBe32(p)
23
+ #define Get64(p) GetBe64(p)
24
+
25
+ #define G32(p, dest) dest = Get32(p);
26
+ #define G64(p, dest) dest = Get64(p);
27
+
28
+ using namespace NWindows;
29
+
30
+ namespace NArchive {
31
+ namespace NVhd {
32
+
33
+ static const UInt32 kUnusedBlock = 0xFFFFFFFF;
34
+
35
+ static const UInt32 kDiskType_Fixed = 2;
36
+ static const UInt32 kDiskType_Dynamic = 3;
37
+ static const UInt32 kDiskType_Diff = 4;
38
+
39
+ static const char *kDiskTypes[] =
40
+ {
41
+ "0",
42
+ "1",
43
+ "Fixed",
44
+ "Dynamic",
45
+ "Differencing"
46
+ };
47
+
48
+ struct CFooter
49
+ {
50
+ // UInt32 Features;
51
+ // UInt32 FormatVersion;
52
+ UInt64 DataOffset;
53
+ UInt32 CTime;
54
+ UInt32 CreatorApp;
55
+ UInt32 CreatorVersion;
56
+ UInt32 CreatorHostOS;
57
+ // UInt64 OriginalSize;
58
+ UInt64 CurrentSize;
59
+ UInt32 DiskGeometry;
60
+ UInt32 Type;
61
+ Byte Id[16];
62
+ Byte SavedState;
63
+
64
+ bool IsFixed() const { return Type == kDiskType_Fixed; }
65
+ bool ThereIsDynamic() const { return Type == kDiskType_Dynamic || Type == kDiskType_Diff; }
66
+ // bool IsSupported() const { return Type == kDiskType_Fixed || Type == kDiskType_Dynamic || Type == kDiskType_Diff; }
67
+ UInt32 NumCyls() const { return DiskGeometry >> 16; }
68
+ UInt32 NumHeads() const { return (DiskGeometry >> 8) & 0xFF; }
69
+ UInt32 NumSectorsPerTrack() const { return DiskGeometry & 0xFF; }
70
+ AString GetTypeString() const;
71
+ bool Parse(const Byte *p);
72
+ };
73
+
74
+ AString CFooter::GetTypeString() const
75
+ {
76
+ if (Type < sizeof(kDiskTypes) / sizeof(kDiskTypes[0]))
77
+ return kDiskTypes[Type];
78
+ char s[16];
79
+ ConvertUInt32ToString(Type, s);
80
+ return s;
81
+ }
82
+
83
+ static bool CheckBlock(const Byte *p, unsigned size, unsigned checkSumOffset, unsigned zeroOffset)
84
+ {
85
+ UInt32 sum = 0;
86
+ unsigned i;
87
+ for (i = 0; i < checkSumOffset; i++)
88
+ sum += p[i];
89
+ for (i = checkSumOffset + 4; i < size; i++)
90
+ sum += p[i];
91
+ if (~sum != Get32(p + checkSumOffset))
92
+ return false;
93
+ for (i = zeroOffset; i < size; i++)
94
+ if (p[i] != 0)
95
+ return false;
96
+ return true;
97
+ }
98
+
99
+ bool CFooter::Parse(const Byte *p)
100
+ {
101
+ if (memcmp(p, "conectix", 8) != 0)
102
+ return false;
103
+ // G32(p + 0x08, Features);
104
+ // G32(p + 0x0C, FormatVersion);
105
+ G64(p + 0x10, DataOffset);
106
+ G32(p + 0x18, CTime);
107
+ G32(p + 0x1C, CreatorApp);
108
+ G32(p + 0x20, CreatorVersion);
109
+ G32(p + 0x24, CreatorHostOS);
110
+ // G64(p + 0x28, OriginalSize);
111
+ G64(p + 0x30, CurrentSize);
112
+ G32(p + 0x38, DiskGeometry);
113
+ G32(p + 0x3C, Type);
114
+ memcpy(Id, p + 0x44, 16);
115
+ SavedState = p[0x54];
116
+ return CheckBlock(p, 512, 0x40, 0x55);
117
+ }
118
+
119
+ /*
120
+ struct CParentLocatorEntry
121
+ {
122
+ UInt32 Code;
123
+ UInt32 DataSpace;
124
+ UInt32 DataLen;
125
+ UInt64 DataOffset;
126
+
127
+ bool Parse(const Byte *p);
128
+ };
129
+ bool CParentLocatorEntry::Parse(const Byte *p)
130
+ {
131
+ G32(p + 0x00, Code);
132
+ G32(p + 0x04, DataSpace);
133
+ G32(p + 0x08, DataLen);
134
+ G32(p + 0x10, DataOffset);
135
+ return (Get32(p + 0x0C) == 0); // Resrved
136
+ }
137
+ */
138
+
139
+ struct CDynHeader
140
+ {
141
+ // UInt64 DataOffset;
142
+ UInt64 TableOffset;
143
+ // UInt32 HeaderVersion;
144
+ UInt32 NumBlocks;
145
+ int BlockSizeLog;
146
+ UInt32 ParentTime;
147
+ Byte ParentId[16];
148
+ UString ParentName;
149
+ // CParentLocatorEntry ParentLocators[8];
150
+
151
+ bool Parse(const Byte *p);
152
+ UInt32 NumBitMapSectors() const
153
+ {
154
+ UInt32 numSectorsInBlock = (1 << (BlockSizeLog - 9));
155
+ return (numSectorsInBlock + 512 * 8 - 1) / (512 * 8);
156
+ }
157
+ };
158
+
159
+ static int GetLog(UInt32 num)
160
+ {
161
+ for (int i = 0; i < 31; i++)
162
+ if (((UInt32)1 << i) == num)
163
+ return i;
164
+ return -1;
165
+ }
166
+
167
+ bool CDynHeader::Parse(const Byte *p)
168
+ {
169
+ if (memcmp(p, "cxsparse", 8) != 0)
170
+ return false;
171
+ // G64(p + 0x08, DataOffset);
172
+ G64(p + 0x10, TableOffset);
173
+ // G32(p + 0x18, HeaderVersion);
174
+ G32(p + 0x1C, NumBlocks);
175
+ BlockSizeLog = GetLog(Get32(p + 0x20));
176
+ if (BlockSizeLog < 9 || BlockSizeLog > 30)
177
+ return false;
178
+ G32(p + 0x38, ParentTime);
179
+ if (Get32(p + 0x3C) != 0) // reserved
180
+ return false;
181
+ memcpy(ParentId, p + 0x28, 16);
182
+ {
183
+ const int kNameLength = 256;
184
+ wchar_t *s = ParentName.GetBuffer(kNameLength);
185
+ for (unsigned i = 0; i < kNameLength; i++)
186
+ s[i] = Get16(p + 0x40 + i * 2);
187
+ s[kNameLength] = 0;
188
+ ParentName.ReleaseBuffer();
189
+ }
190
+ /*
191
+ for (int i = 0; i < 8; i++)
192
+ if (!ParentLocators[i].Parse(p + 0x240 + i * 24))
193
+ return false;
194
+ */
195
+ return CheckBlock(p, 1024, 0x24, 0x240 + 8 * 24);
196
+ }
197
+
198
+ class CHandler:
199
+ public IInStream,
200
+ public IInArchive,
201
+ public IInArchiveGetStream,
202
+ public CMyUnknownImp
203
+ {
204
+ UInt64 _virtPos;
205
+ UInt64 _phyPos;
206
+ UInt64 _phyLimit;
207
+
208
+ CFooter Footer;
209
+ CDynHeader Dyn;
210
+ CRecordVector<UInt32> Bat;
211
+ CByteBuffer BitMap;
212
+ UInt32 BitMapTag;
213
+ UInt32 NumUsedBlocks;
214
+ CMyComPtr<IInStream> Stream;
215
+ CMyComPtr<IInStream> ParentStream;
216
+ CHandler *Parent;
217
+
218
+ HRESULT Seek(UInt64 offset);
219
+ HRESULT InitAndSeek();
220
+ HRESULT ReadPhy(UInt64 offset, void *data, UInt32 size);
221
+
222
+ bool NeedParent() const { return Footer.Type == kDiskType_Diff; }
223
+ UInt64 GetPackSize() const
224
+ { return Footer.ThereIsDynamic() ? ((UInt64)NumUsedBlocks << Dyn.BlockSizeLog) : Footer.CurrentSize; }
225
+
226
+ UString GetParentName() const
227
+ {
228
+ const CHandler *p = this;
229
+ UString res;
230
+ while (p && p->NeedParent())
231
+ {
232
+ if (!res.IsEmpty())
233
+ res += L" -> ";
234
+ res += p->Dyn.ParentName;
235
+ p = p->Parent;
236
+ }
237
+ return res;
238
+ }
239
+
240
+ bool IsOK() const
241
+ {
242
+ const CHandler *p = this;
243
+ while (p->NeedParent())
244
+ {
245
+ p = p->Parent;
246
+ if (p == 0)
247
+ return false;
248
+ }
249
+ return true;
250
+ }
251
+
252
+ HRESULT Open3();
253
+ HRESULT Open2(IInStream *stream, CHandler *child, IArchiveOpenCallback *openArchiveCallback, int level);
254
+
255
+ public:
256
+ MY_UNKNOWN_IMP3(IInArchive, IInArchiveGetStream, IInStream)
257
+
258
+ INTERFACE_IInArchive(;)
259
+ STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
260
+ STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
261
+ STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition);
262
+ };
263
+
264
+ HRESULT CHandler::Seek(UInt64 offset) { return Stream->Seek(offset, STREAM_SEEK_SET, NULL); }
265
+
266
+ HRESULT CHandler::InitAndSeek()
267
+ {
268
+ if (ParentStream)
269
+ {
270
+ RINOK(Parent->InitAndSeek());
271
+ }
272
+ _virtPos = _phyPos = 0;
273
+ BitMapTag = kUnusedBlock;
274
+ BitMap.SetCapacity(Dyn.NumBitMapSectors() << 9);
275
+ return Seek(0);
276
+ }
277
+
278
+ HRESULT CHandler::ReadPhy(UInt64 offset, void *data, UInt32 size)
279
+ {
280
+ if (offset + size > _phyLimit)
281
+ return S_FALSE;
282
+ if (offset != _phyPos)
283
+ {
284
+ _phyPos = offset;
285
+ RINOK(Seek(offset));
286
+ }
287
+ HRESULT res = ReadStream_FALSE(Stream, data, size);
288
+ _phyPos += size;
289
+ return res;
290
+ }
291
+
292
+ HRESULT CHandler::Open3()
293
+ {
294
+ RINOK(Stream->Seek(0, STREAM_SEEK_END, &_phyPos));
295
+ if (_phyPos < 512)
296
+ return S_FALSE;
297
+ const UInt32 kDynSize = 1024;
298
+ Byte buf[kDynSize];
299
+
300
+ _phyLimit = _phyPos;
301
+ RINOK(ReadPhy(_phyLimit - 512, buf, 512));
302
+ if (!Footer.Parse(buf))
303
+ return S_FALSE;
304
+ _phyLimit -= 512;
305
+
306
+ if (!Footer.ThereIsDynamic())
307
+ return S_OK;
308
+
309
+ RINOK(ReadPhy(0, buf + 512, 512));
310
+ if (memcmp(buf, buf + 512, 512) != 0)
311
+ return S_FALSE;
312
+
313
+ RINOK(ReadPhy(Footer.DataOffset, buf, kDynSize));
314
+ if (!Dyn.Parse(buf))
315
+ return S_FALSE;
316
+
317
+ if (Dyn.NumBlocks >= (UInt32)1 << 31)
318
+ return S_FALSE;
319
+ if (Footer.CurrentSize == 0)
320
+ {
321
+ if (Dyn.NumBlocks != 0)
322
+ return S_FALSE;
323
+ }
324
+ else if (((Footer.CurrentSize - 1) >> Dyn.BlockSizeLog) + 1 != Dyn.NumBlocks)
325
+ return S_FALSE;
326
+
327
+ Bat.Reserve(Dyn.NumBlocks);
328
+ while ((UInt32)Bat.Size() < Dyn.NumBlocks)
329
+ {
330
+ RINOK(ReadPhy(Dyn.TableOffset + (UInt64)Bat.Size() * 4, buf, 512));
331
+ for (UInt32 j = 0; j < 512; j += 4)
332
+ {
333
+ UInt32 v = Get32(buf + j);
334
+ if (v != kUnusedBlock)
335
+ NumUsedBlocks++;
336
+ Bat.Add(v);
337
+ if ((UInt32)Bat.Size() >= Dyn.NumBlocks)
338
+ break;
339
+ }
340
+ }
341
+ return S_OK;
342
+ }
343
+
344
+ STDMETHODIMP CHandler::Read(void *data, UInt32 size, UInt32 *processedSize)
345
+ {
346
+ if (processedSize != NULL)
347
+ *processedSize = 0;
348
+ if (_virtPos >= Footer.CurrentSize)
349
+ return (Footer.CurrentSize == _virtPos) ? S_OK: E_FAIL;
350
+ UInt64 rem = Footer.CurrentSize - _virtPos;
351
+ if (size > rem)
352
+ size = (UInt32)rem;
353
+ if (size == 0)
354
+ return S_OK;
355
+ UInt32 blockIndex = (UInt32)(_virtPos >> Dyn.BlockSizeLog);
356
+ UInt32 blockSectIndex = Bat[blockIndex];
357
+ UInt32 blockSize = (UInt32)1 << Dyn.BlockSizeLog;
358
+ UInt32 offsetInBlock = (UInt32)_virtPos & (blockSize - 1);
359
+ size = MyMin(blockSize - offsetInBlock, size);
360
+
361
+ HRESULT res = S_OK;
362
+ if (blockSectIndex == kUnusedBlock)
363
+ {
364
+ if (ParentStream)
365
+ {
366
+ RINOK(ParentStream->Seek(_virtPos, STREAM_SEEK_SET, NULL));
367
+ res = ParentStream->Read(data, size, &size);
368
+ }
369
+ else
370
+ memset(data, 0, size);
371
+ }
372
+ else
373
+ {
374
+ UInt64 newPos = (UInt64)blockSectIndex << 9;
375
+ if (BitMapTag != blockIndex)
376
+ {
377
+ RINOK(ReadPhy(newPos, BitMap, (UInt32)BitMap.GetCapacity()));
378
+ BitMapTag = blockIndex;
379
+ }
380
+ RINOK(ReadPhy(newPos + BitMap.GetCapacity() + offsetInBlock, data, size));
381
+ for (UInt32 cur = 0; cur < size;)
382
+ {
383
+ UInt32 rem = MyMin(0x200 - (offsetInBlock & 0x1FF), size - cur);
384
+ UInt32 bmi = offsetInBlock >> 9;
385
+ if (((BitMap[bmi >> 3] >> (7 - (bmi & 7))) & 1) == 0)
386
+ {
387
+ if (ParentStream)
388
+ {
389
+ RINOK(ParentStream->Seek(_virtPos + cur, STREAM_SEEK_SET, NULL));
390
+ RINOK(ReadStream_FALSE(ParentStream, (Byte *)data + cur, rem));
391
+ }
392
+ else
393
+ {
394
+ const Byte *p = (const Byte *)data + cur;
395
+ for (UInt32 i = 0; i < rem; i++)
396
+ if (p[i] != 0)
397
+ return S_FALSE;
398
+ }
399
+ }
400
+ offsetInBlock += rem;
401
+ cur += rem;
402
+ }
403
+ }
404
+ if (processedSize != NULL)
405
+ *processedSize = size;
406
+ _virtPos += size;
407
+ return res;
408
+ }
409
+
410
+ STDMETHODIMP CHandler::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)
411
+ {
412
+ switch(seekOrigin)
413
+ {
414
+ case STREAM_SEEK_SET: _virtPos = offset; break;
415
+ case STREAM_SEEK_CUR: _virtPos += offset; break;
416
+ case STREAM_SEEK_END: _virtPos = Footer.CurrentSize + offset; break;
417
+ default: return STG_E_INVALIDFUNCTION;
418
+ }
419
+ if (newPosition)
420
+ *newPosition = _virtPos;
421
+ return S_OK;
422
+ }
423
+
424
+ enum
425
+ {
426
+ kpidParent = kpidUserDefined,
427
+ kpidSavedState
428
+ };
429
+
430
+ STATPROPSTG kArcProps[] =
431
+ {
432
+ { NULL, kpidSize, VT_UI8},
433
+ { NULL, kpidCTime, VT_FILETIME},
434
+ { NULL, kpidClusterSize, VT_UI8},
435
+ { NULL, kpidMethod, VT_BSTR},
436
+ { L"Parent", kpidParent, VT_BSTR},
437
+ { NULL, kpidCreatorApp, VT_BSTR},
438
+ { NULL, kpidHostOS, VT_BSTR},
439
+ { L"Saved State", kpidSavedState, VT_BOOL},
440
+ { NULL, kpidId, VT_BSTR}
441
+ };
442
+
443
+ STATPROPSTG kProps[] =
444
+ {
445
+ { NULL, kpidSize, VT_UI8},
446
+ { NULL, kpidPackSize, VT_UI8},
447
+ { NULL, kpidCTime, VT_FILETIME}
448
+
449
+ /*
450
+ { NULL, kpidNumCyls, VT_UI4},
451
+ { NULL, kpidNumHeads, VT_UI4},
452
+ { NULL, kpidSectorsPerTrack, VT_UI4}
453
+ */
454
+ };
455
+
456
+ IMP_IInArchive_Props
457
+ IMP_IInArchive_ArcProps_WITH_NAME
458
+
459
+ // VHD start time: 2000-01-01
460
+ static const UInt64 kVhdTimeStartValue = (UInt64)3600 * 24 * (399 * 365 + 24 * 4);
461
+
462
+ static void VhdTimeToFileTime(UInt32 vhdTime, NCOM::CPropVariant &prop)
463
+ {
464
+ FILETIME ft, utc;
465
+ UInt64 v = (kVhdTimeStartValue + vhdTime) * 10000000;
466
+ ft.dwLowDateTime = (DWORD)v;
467
+ ft.dwHighDateTime = (DWORD)(v >> 32);
468
+ // specification says that it's UTC time, but Virtual PC 6 writes local time. Why?
469
+ LocalFileTimeToFileTime(&ft, &utc);
470
+ prop = utc;
471
+ }
472
+
473
+ static void StringToAString(char *dest, UInt32 s)
474
+ {
475
+ for (int i = 24; i >= 0; i -= 8)
476
+ {
477
+ Byte b = (Byte)((s >> i) & 0xFF);
478
+ if (b < 0x20 || b > 0x7F)
479
+ break;
480
+ *dest++ = b;
481
+ }
482
+ *dest = 0;
483
+ }
484
+
485
+ static void ConvertByteToHex(unsigned value, char *s)
486
+ {
487
+ for (int i = 0; i < 2; i++)
488
+ {
489
+ unsigned t = value & 0xF;
490
+ value >>= 4;
491
+ s[1 - i] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
492
+ }
493
+ }
494
+
495
+ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
496
+ {
497
+ COM_TRY_BEGIN
498
+ NCOM::CPropVariant prop;
499
+ switch(propID)
500
+ {
501
+ case kpidMainSubfile: prop = (UInt32)0; break;
502
+ case kpidCTime: VhdTimeToFileTime(Footer.CTime, prop); break;
503
+ case kpidClusterSize: if (Footer.ThereIsDynamic()) prop = (UInt32)1 << Dyn.BlockSizeLog; break;
504
+ case kpidMethod:
505
+ {
506
+ AString s = Footer.GetTypeString();
507
+ if (NeedParent())
508
+ {
509
+ s += " -> ";
510
+ const CHandler *p = this;
511
+ while (p != 0 && p->NeedParent())
512
+ p = p->Parent;
513
+ if (p == 0)
514
+ s += '?';
515
+ else
516
+ s += p->Footer.GetTypeString();
517
+ }
518
+ prop = s;
519
+ break;
520
+ }
521
+ case kpidCreatorApp:
522
+ {
523
+ char s[16];
524
+ StringToAString(s, Footer.CreatorApp);
525
+ AString res = s;
526
+ res.Trim();
527
+ ConvertUInt32ToString(Footer.CreatorVersion >> 16, s);
528
+ res += ' ';
529
+ res += s;
530
+ res += '.';
531
+ ConvertUInt32ToString(Footer.CreatorVersion & 0xFFFF, s);
532
+ res += s;
533
+ prop = res;
534
+ break;
535
+ }
536
+ case kpidHostOS:
537
+ {
538
+ if (Footer.CreatorHostOS == 0x5769326b)
539
+ prop = "Windows";
540
+ else
541
+ {
542
+ char s[16];
543
+ StringToAString(s, Footer.CreatorHostOS);
544
+ prop = s;
545
+ }
546
+ break;
547
+ }
548
+ case kpidId:
549
+ {
550
+ char s[32 + 4];
551
+ for (int i = 0; i < 16; i++)
552
+ ConvertByteToHex(Footer.Id[i], s + i * 2);
553
+ s[32] = 0;
554
+ prop = s;
555
+ break;
556
+ }
557
+ case kpidSavedState: prop = Footer.SavedState ? true : false; break;
558
+ case kpidParent: if (NeedParent()) prop = GetParentName(); break;
559
+ }
560
+ prop.Detach(value);
561
+ return S_OK;
562
+ COM_TRY_END
563
+ }
564
+
565
+ HRESULT CHandler::Open2(IInStream *stream, CHandler *child, IArchiveOpenCallback *openArchiveCallback, int level)
566
+ {
567
+ Close();
568
+ Stream = stream;
569
+ if (level > 32)
570
+ return S_FALSE;
571
+ RINOK(Open3());
572
+ if (child && memcmp(child->Dyn.ParentId, Footer.Id, 16) != 0)
573
+ return S_FALSE;
574
+ if (Footer.Type != kDiskType_Diff)
575
+ return S_OK;
576
+ CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
577
+ if (openArchiveCallback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback) != S_OK)
578
+ return S_FALSE;
579
+ CMyComPtr<IInStream> nextStream;
580
+ HRESULT res = openVolumeCallback->GetStream(Dyn.ParentName, &nextStream);
581
+ if (res == S_FALSE)
582
+ return S_OK;
583
+ RINOK(res);
584
+
585
+ Parent = new CHandler;
586
+ ParentStream = Parent;
587
+ return Parent->Open2(nextStream, this, openArchiveCallback, level + 1);
588
+ }
589
+
590
+ STDMETHODIMP CHandler::Open(IInStream *stream,
591
+ const UInt64 * /* maxCheckStartPosition */,
592
+ IArchiveOpenCallback * openArchiveCallback)
593
+ {
594
+ COM_TRY_BEGIN
595
+ {
596
+ HRESULT res;
597
+ try
598
+ {
599
+ res = Open2(stream, NULL, openArchiveCallback, 0);
600
+ if (res == S_OK)
601
+ return S_OK;
602
+ }
603
+ catch(...)
604
+ {
605
+ Close();
606
+ throw;
607
+ }
608
+ Close();
609
+ return res;
610
+ }
611
+ COM_TRY_END
612
+ }
613
+
614
+ STDMETHODIMP CHandler::Close()
615
+ {
616
+ Bat.Clear();
617
+ NumUsedBlocks = 0;
618
+ Parent = 0;
619
+ Stream.Release();
620
+ ParentStream.Release();
621
+ return S_OK;
622
+ }
623
+
624
+ STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
625
+ {
626
+ *numItems = 1;
627
+ return S_OK;
628
+ }
629
+
630
+ STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value)
631
+ {
632
+ COM_TRY_BEGIN
633
+ NWindows::NCOM::CPropVariant prop;
634
+
635
+ switch(propID)
636
+ {
637
+ case kpidSize: prop = Footer.CurrentSize; break;
638
+ case kpidPackSize: prop = GetPackSize(); break;
639
+ case kpidCTime: VhdTimeToFileTime(Footer.CTime, prop); break;
640
+ /*
641
+ case kpidNumCyls: prop = Footer.NumCyls(); break;
642
+ case kpidNumHeads: prop = Footer.NumHeads(); break;
643
+ case kpidSectorsPerTrack: prop = Footer.NumSectorsPerTrack(); break;
644
+ */
645
+ }
646
+ prop.Detach(value);
647
+ return S_OK;
648
+ COM_TRY_END
649
+ }
650
+
651
+ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
652
+ Int32 testMode, IArchiveExtractCallback *extractCallback)
653
+ {
654
+ COM_TRY_BEGIN
655
+ if (numItems == 0)
656
+ return S_OK;
657
+ if (numItems != (UInt32)-1 && (numItems != 1 || indices[0] != 0))
658
+ return E_INVALIDARG;
659
+
660
+ RINOK(extractCallback->SetTotal(Footer.CurrentSize));
661
+ CMyComPtr<ISequentialOutStream> outStream;
662
+ Int32 askMode = testMode ?
663
+ NExtract::NAskMode::kTest :
664
+ NExtract::NAskMode::kExtract;
665
+ RINOK(extractCallback->GetStream(0, &outStream, askMode));
666
+ if (!testMode && !outStream)
667
+ return S_OK;
668
+ RINOK(extractCallback->PrepareOperation(askMode));
669
+
670
+ NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder();
671
+ CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
672
+
673
+ CLocalProgress *lps = new CLocalProgress;
674
+ CMyComPtr<ICompressProgressInfo> progress = lps;
675
+ lps->Init(extractCallback, false);
676
+
677
+ int res = NExtract::NOperationResult::kDataError;
678
+ CMyComPtr<ISequentialInStream> inStream;
679
+ HRESULT hres = GetStream(0, &inStream);
680
+ if (hres == S_FALSE)
681
+ res = NExtract::NOperationResult::kUnSupportedMethod;
682
+ else
683
+ {
684
+ RINOK(hres);
685
+ HRESULT hres = copyCoder->Code(inStream, outStream, NULL, NULL, progress);
686
+ if (hres == S_OK)
687
+ {
688
+ if (copyCoderSpec->TotalSize == Footer.CurrentSize)
689
+ res = NExtract::NOperationResult::kOK;
690
+ }
691
+ else
692
+ {
693
+ if (hres != S_FALSE)
694
+ {
695
+ RINOK(hres);
696
+ }
697
+ }
698
+ }
699
+ outStream.Release();
700
+ return extractCallback->SetOperationResult(res);
701
+ COM_TRY_END
702
+ }
703
+
704
+ STDMETHODIMP CHandler::GetStream(UInt32 /* index */, ISequentialInStream **stream)
705
+ {
706
+ COM_TRY_BEGIN
707
+ *stream = 0;
708
+ if (Footer.IsFixed())
709
+ {
710
+ CLimitedInStream *streamSpec = new CLimitedInStream;
711
+ CMyComPtr<ISequentialInStream> streamTemp = streamSpec;
712
+ streamSpec->SetStream(Stream);
713
+ streamSpec->InitAndSeek(0, Footer.CurrentSize);
714
+ RINOK(streamSpec->SeekToStart());
715
+ *stream = streamTemp.Detach();
716
+ return S_OK;
717
+ }
718
+ if (!Footer.ThereIsDynamic() || !IsOK())
719
+ return S_FALSE;
720
+ CMyComPtr<ISequentialInStream> streamTemp = this;
721
+ RINOK(InitAndSeek());
722
+ *stream = streamTemp.Detach();
723
+ return S_OK;
724
+ COM_TRY_END
725
+ }
726
+
727
+ static IInArchive *CreateArc() { return new CHandler; }
728
+
729
+ static CArcInfo g_ArcInfo =
730
+ { L"VHD", L"vhd", L".mbr", 0xDC, { 'c', 'o', 'n', 'e', 'c', 't', 'i', 'x', 0, 0 }, 10, false, CreateArc, 0 };
731
+
732
+ REGISTER_ARC(Vhd)
733
+
734
+ }}