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,43 @@
1
+ // NSisHandler.h
2
+
3
+ #ifndef __NSIS_HANDLER_H
4
+ #define __NSIS_HANDLER_H
5
+
6
+ #include "Common/MyCom.h"
7
+ #include "../IArchive.h"
8
+
9
+ #include "NsisIn.h"
10
+
11
+ #include "../../Common/CreateCoder.h"
12
+
13
+ namespace NArchive {
14
+ namespace NNsis {
15
+
16
+ class CHandler:
17
+ public IInArchive,
18
+ PUBLIC_ISetCompressCodecsInfo
19
+ public CMyUnknownImp
20
+ {
21
+ CMyComPtr<IInStream> _inStream;
22
+ CInArchive _archive;
23
+
24
+ DECL_EXTERNAL_CODECS_VARS
25
+
26
+ bool GetUncompressedSize(int index, UInt32 &size);
27
+ bool GetCompressedSize(int index, UInt32 &size);
28
+
29
+ AString GetMethod(bool useItemFilter, UInt32 dictionary) const;
30
+ public:
31
+ MY_QUERYINTERFACE_BEGIN2(IInArchive)
32
+ QUERY_ENTRY_ISetCompressCodecsInfo
33
+ MY_QUERYINTERFACE_END
34
+ MY_ADDREF_RELEASE
35
+
36
+ INTERFACE_IInArchive(;)
37
+
38
+ DECL_ISetCompressCodecsInfo
39
+ };
40
+
41
+ }}
42
+
43
+ #endif
@@ -0,0 +1,1461 @@
1
+ // NsisIn.cpp
2
+
3
+ #include "StdAfx.h"
4
+
5
+ #include "../../../../C/CpuArch.h"
6
+
7
+ #include "Common/IntToString.h"
8
+
9
+ #include "../../Common/StreamUtils.h"
10
+
11
+ #include "NsisIn.h"
12
+
13
+ #define Get32(p) GetUi32(p)
14
+
15
+ namespace NArchive {
16
+ namespace NNsis {
17
+
18
+ Byte kSignature[kSignatureSize] = NSIS_SIGNATURE;
19
+
20
+ #ifdef NSIS_SCRIPT
21
+ static const char *kCrLf = "\x0D\x0A";
22
+ #endif
23
+
24
+ #define NS_UN_SKIP_CODE 0xE000
25
+ #define NS_UN_VAR_CODE 0xE001
26
+ #define NS_UN_SHELL_CODE 0xE002
27
+ #define NS_UN_LANG_CODE 0xE003
28
+ #define NS_UN_CODES_START NS_UN_SKIP_CODE
29
+ #define NS_UN_CODES_END NS_UN_LANG_CODE
30
+
31
+ Byte CInArchive::ReadByte()
32
+ {
33
+ if (_posInData >= _size)
34
+ throw 1;
35
+ return _data[_posInData++];
36
+ }
37
+
38
+ UInt32 CInArchive::ReadUInt32()
39
+ {
40
+ UInt32 value = 0;
41
+ for (int i = 0; i < 4; i++)
42
+ value |= ((UInt32)(ReadByte()) << (8 * i));
43
+ return value;
44
+ }
45
+
46
+ void CInArchive::ReadBlockHeader(CBlockHeader &bh)
47
+ {
48
+ bh.Offset = ReadUInt32();
49
+ bh.Num = ReadUInt32();
50
+ }
51
+
52
+ #define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }
53
+
54
+ static int CompareItems(void *const *p1, void *const *p2, void * /* param */)
55
+ {
56
+ const CItem &i1 = **(CItem **)p1;
57
+ const CItem &i2 = **(CItem **)p2;
58
+ RINOZ(MyCompare(i1.Pos, i2.Pos));
59
+ if (i1.IsUnicode)
60
+ {
61
+ RINOZ(i1.PrefixU.Compare(i2.PrefixU));
62
+ RINOZ(i1.NameU.Compare(i2.NameU));
63
+ }
64
+ else
65
+ {
66
+ RINOZ(i1.PrefixA.Compare(i2.PrefixA));
67
+ RINOZ(i1.NameA.Compare(i2.NameA));
68
+ }
69
+ return 0;
70
+ }
71
+
72
+ static AString UIntToString(UInt32 v)
73
+ {
74
+ char sz[32];
75
+ ConvertUInt64ToString(v, sz);
76
+ return sz;
77
+ }
78
+
79
+ static AString IntToString(Int32 v)
80
+ {
81
+ char sz[32];
82
+ ConvertInt64ToString(v, sz);
83
+ return sz;
84
+ }
85
+
86
+ AString CInArchive::ReadStringA(UInt32 pos) const
87
+ {
88
+ AString s;
89
+ if (pos >= _size)
90
+ return IntToString((Int32)pos);
91
+ UInt32 offset = GetOffset() + _stringsPos + pos;
92
+ for (;;)
93
+ {
94
+ if (offset >= _size)
95
+ break; // throw 1;
96
+ char c = _data[offset++];
97
+ if (c == 0)
98
+ break;
99
+ s += c;
100
+ }
101
+ return s;
102
+ }
103
+
104
+ UString CInArchive::ReadStringU(UInt32 pos) const
105
+ {
106
+ UString s;
107
+ UInt32 offset = GetOffset() + _stringsPos + (pos * 2);
108
+ for (;;)
109
+ {
110
+ if (offset >= _size || offset + 1 >= _size)
111
+ return s; // throw 1;
112
+ char c0 = _data[offset++];
113
+ char c1 = _data[offset++];
114
+ wchar_t c = (c0 | ((wchar_t)c1 << 8));
115
+ if (c == 0)
116
+ break;
117
+ s += c;
118
+ }
119
+ return s;
120
+ }
121
+
122
+ /*
123
+ static AString ParsePrefix(const AString &prefix)
124
+ {
125
+ AString res = prefix;
126
+ if (prefix.Length() >= 3)
127
+ {
128
+ if ((Byte)prefix[0] == 0xFD && (Byte)prefix[1] == 0x95 && (Byte)prefix[2] == 0x80)
129
+ res = "$INSTDIR" + prefix.Mid(3);
130
+ else if ((Byte)prefix[0] == 0xFD && (Byte)prefix[1] == 0x96 && (Byte)prefix[2] == 0x80)
131
+ res = "$OUTDIR" + prefix.Mid(3);
132
+ }
133
+ return res;
134
+ }
135
+ */
136
+
137
+ #define SYSREGKEY "Software\\Microsoft\\Windows\\CurrentVersion"
138
+
139
+ /*
140
+ # define CSIDL_PROGRAMS 0x2
141
+ # define CSIDL_PRINTERS 0x4
142
+ # define CSIDL_PERSONAL 0x5
143
+ # define CSIDL_FAVORITES 0x6
144
+ # define CSIDL_STARTUP 0x7
145
+ # define CSIDL_RECENT 0x8
146
+ # define CSIDL_SENDTO 0x9
147
+ # define CSIDL_STARTMENU 0xB
148
+ # define CSIDL_MYMUSIC 0xD
149
+ # define CSIDL_MYVIDEO 0xE
150
+
151
+ # define CSIDL_DESKTOPDIRECTORY 0x10
152
+ # define CSIDL_NETHOOD 0x13
153
+ # define CSIDL_FONTS 0x14
154
+ # define CSIDL_TEMPLATES 0x15
155
+ # define CSIDL_COMMON_STARTMENU 0x16
156
+ # define CSIDL_COMMON_PROGRAMS 0x17
157
+ # define CSIDL_COMMON_STARTUP 0x18
158
+ # define CSIDL_COMMON_DESKTOPDIRECTORY 0x19
159
+ # define CSIDL_APPDATA 0x1A
160
+ # define CSIDL_PRINTHOOD 0x1B
161
+ # define CSIDL_LOCAL_APPDATA 0x1C
162
+ # define CSIDL_ALTSTARTUP 0x1D
163
+ # define CSIDL_COMMON_ALTSTARTUP 0x1E
164
+ # define CSIDL_COMMON_FAVORITES 0x1F
165
+
166
+ # define CSIDL_INTERNET_CACHE 0x20
167
+ # define CSIDL_COOKIES 0x21
168
+ # define CSIDL_HISTORY 0x22
169
+ # define CSIDL_COMMON_APPDATA 0x23
170
+ # define CSIDL_WINDOWS 0x24
171
+ # define CSIDL_SYSTEM 0x25
172
+ # define CSIDL_PROGRAM_FILES 0x26
173
+ # define CSIDL_MYPICTURES 0x27
174
+ # define CSIDL_PROFILE 0x28
175
+ # define CSIDL_PROGRAM_FILES_COMMON 0x2B
176
+ # define CSIDL_COMMON_TEMPLATES 0x2D
177
+ # define CSIDL_COMMON_DOCUMENTS 0x2E
178
+ # define CSIDL_COMMON_ADMINTOOLS 0x2F
179
+
180
+ # define CSIDL_ADMINTOOLS 0x30
181
+ # define CSIDL_COMMON_MUSIC 0x35
182
+ # define CSIDL_COMMON_PICTURES 0x36
183
+ # define CSIDL_COMMON_VIDEO 0x37
184
+ # define CSIDL_RESOURCES 0x38
185
+ # define CSIDL_RESOURCES_LOCALIZED 0x39
186
+ # define CSIDL_CDBURN_AREA 0x3B
187
+ */
188
+
189
+ struct CCommandPair
190
+ {
191
+ int NumParams;
192
+ const char *Name;
193
+ };
194
+
195
+ enum
196
+ {
197
+ // 0
198
+ EW_INVALID_OPCODE, // zero is invalid. useful for catching errors. (otherwise an all zeroes instruction
199
+ // does nothing, which is easily ignored but means something is wrong.
200
+ EW_RET, // return from function call
201
+ EW_NOP, // Nop/Jump, do nothing: 1, [?new address+1:advance one]
202
+ EW_ABORT, // Abort: 1 [status]
203
+ EW_QUIT, // Quit: 0
204
+ EW_CALL, // Call: 1 [new address+1]
205
+ EW_UPDATETEXT, // Update status text: 2 [update str, ui_st_updateflag=?ui_st_updateflag:this]
206
+ EW_SLEEP, // Sleep: 1 [sleep time in milliseconds]
207
+ EW_BRINGTOFRONT, // BringToFront: 0
208
+ EW_CHDETAILSVIEW, // SetDetailsView: 2 [listaction,buttonaction]
209
+
210
+ // 10
211
+ EW_SETFILEATTRIBUTES, // SetFileAttributes: 2 [filename, attributes]
212
+ EW_CREATEDIR, // Create directory: 2, [path, ?update$INSTDIR]
213
+ EW_IFFILEEXISTS, // IfFileExists: 3, [file name, jump amount if exists, jump amount if not exists]
214
+ EW_SETFLAG, // Sets a flag: 2 [id, data]
215
+ EW_IFFLAG, // If a flag: 4 [on, off, id, new value mask]
216
+ EW_GETFLAG, // Gets a flag: 2 [output, id]
217
+ EW_RENAME, // Rename: 3 [old, new, rebootok]
218
+ EW_GETFULLPATHNAME, // GetFullPathName: 2 [output, input, ?lfn:sfn]
219
+ EW_SEARCHPATH, // SearchPath: 2 [output, filename]
220
+ EW_GETTEMPFILENAME, // GetTempFileName: 2 [output, base_dir]
221
+
222
+ // 20
223
+ EW_EXTRACTFILE, // File to extract: 6 [overwriteflag, output filename, compressed filedata, filedatetimelow, filedatetimehigh, allow ignore]
224
+ // overwriteflag: 0x1 = no. 0x0=force, 0x2=try, 0x3=if date is newer
225
+ EW_DELETEFILE, // Delete File: 2, [filename, rebootok]
226
+ EW_MESSAGEBOX, // MessageBox: 5,[MB_flags,text,retv1:retv2,moveonretv1:moveonretv2]
227
+ EW_RMDIR, // RMDir: 2 [path, recursiveflag]
228
+ EW_STRLEN, // StrLen: 2 [output, input]
229
+ EW_ASSIGNVAR, // Assign: 4 [variable (0-9) to assign, string to assign, maxlen, startpos]
230
+ EW_STRCMP, // StrCmp: 5 [str1, str2, jump_if_equal, jump_if_not_equal, case-sensitive?]
231
+ EW_READENVSTR, // ReadEnvStr/ExpandEnvStrings: 3 [output, string_with_env_variables, IsRead]
232
+ EW_INTCMP, // IntCmp: 6 [val1, val2, equal, val1<val2, val1>val2, unsigned?]
233
+ EW_INTOP, // IntOp: 4 [output, input1, input2, op] where op: 0=add, 1=sub, 2=mul, 3=div, 4=bor, 5=band, 6=bxor, 7=bnot input1, 8=lnot input1, 9=lor, 10=land], 11=1%2
234
+
235
+ // 30
236
+ EW_INTFMT, // IntFmt: [output, format, input]
237
+ EW_PUSHPOP, // Push/Pop/Exchange: 3 [variable/string, ?pop:push, ?exch]
238
+ EW_FINDWINDOW, // FindWindow: 5, [outputvar, window class,window name, window_parent, window_after]
239
+ EW_SENDMESSAGE, // SendMessage: 6 [output, hwnd, msg, wparam, lparam, [wparamstring?1:0 | lparamstring?2:0 | timeout<<2]
240
+ EW_ISWINDOW, // IsWindow: 3 [hwnd, jump_if_window, jump_if_notwindow]
241
+ EW_GETDLGITEM, // GetDlgItem: 3: [outputvar, dialog, item_id]
242
+ EW_SETCTLCOLORS, // SerCtlColors: 3: [hwnd, pointer to struct colors]
243
+ EW_SETBRANDINGIMAGE, // SetBrandingImage: 1: [Bitmap file]
244
+ EW_CREATEFONT, // CreateFont: 5: [handle output, face name, height, weight, flags]
245
+ EW_SHOWWINDOW, // ShowWindow: 2: [hwnd, show state]
246
+
247
+ // 40
248
+ EW_SHELLEXEC, // ShellExecute program: 4, [shell action, complete commandline, parameters, showwindow]
249
+ EW_EXECUTE, // Execute program: 3,[complete command line,waitflag,>=0?output errorcode]
250
+ EW_GETFILETIME, // GetFileTime; 3 [file highout lowout]
251
+ EW_GETDLLVERSION, // GetDLLVersion: 3 [file highout lowout]
252
+ EW_REGISTERDLL, // Register DLL: 3,[DLL file name, string ptr of function to call, text to put in display (<0 if none/pass parms), 1 - no unload, 0 - unload]
253
+ EW_CREATESHORTCUT, // Make Shortcut: 5, [link file, target file, parameters, icon file, iconindex|show mode<<8|hotkey<<16]
254
+ EW_COPYFILES, // CopyFiles: 3 [source mask, destination location, flags]
255
+ EW_REBOOT, // Reboot: 0
256
+ EW_WRITEINI, // Write INI String: 4, [Section, Name, Value, INI File]
257
+ EW_READINISTR, // ReadINIStr: 4 [output, section, name, ini_file]
258
+
259
+ // 50
260
+ EW_DELREG, // DeleteRegValue/DeleteRegKey: 4, [root key(int), KeyName, ValueName, delkeyonlyifempty]. ValueName is -1 if delete key
261
+ EW_WRITEREG, // Write Registry value: 5, [RootKey(int),KeyName,ItemName,ItemData,typelen]
262
+ // typelen=1 for str, 2 for dword, 3 for binary, 0 for expanded str
263
+ EW_READREGSTR, // ReadRegStr: 5 [output, rootkey(int), keyname, itemname, ==1?int::str]
264
+ EW_REGENUM, // RegEnum: 5 [output, rootkey, keyname, index, ?key:value]
265
+ EW_FCLOSE, // FileClose: 1 [handle]
266
+ EW_FOPEN, // FileOpen: 4 [name, openmode, createmode, outputhandle]
267
+ EW_FPUTS, // FileWrite: 3 [handle, string, ?int:string]
268
+ EW_FGETS, // FileRead: 4 [handle, output, maxlen, ?getchar:gets]
269
+ EW_FSEEK, // FileSeek: 4 [handle, offset, mode, >=0?positionoutput]
270
+ EW_FINDCLOSE, // FindClose: 1 [handle]
271
+
272
+ // 60
273
+ EW_FINDNEXT, // FindNext: 2 [output, handle]
274
+ EW_FINDFIRST, // FindFirst: 2 [filespec, output, handleoutput]
275
+ EW_WRITEUNINSTALLER, // WriteUninstaller: 3 [name, offset, icon_size]
276
+ EW_LOG, // LogText: 2 [0, text] / LogSet: [1, logstate]
277
+ EW_SECTIONSET, // SectionSetText: 3: [idx, 0, text]
278
+ // SectionGetText: 3: [idx, 1, output]
279
+ // SectionSetFlags: 3: [idx, 2, flags]
280
+ // SectionGetFlags: 3: [idx, 3, output]
281
+ EW_INSTTYPESET, // InstTypeSetFlags: 3: [idx, 0, flags]
282
+ // InstTypeGetFlags: 3: [idx, 1, output]
283
+ // instructions not actually implemented in exehead, but used in compiler.
284
+ EW_GETLABELADDR, // both of these get converted to EW_ASSIGNVAR
285
+ EW_GETFUNCTIONADDR,
286
+
287
+ EW_LOCKWINDOW
288
+ };
289
+
290
+ #ifdef NSIS_SCRIPT
291
+ static CCommandPair kCommandPairs[] =
292
+ {
293
+ { 0, "Invalid" },
294
+ { 0, "Return" },
295
+ { 1, "Goto" },
296
+ { 0, "Abort" },
297
+ { 0, "Quit" },
298
+ { 1, "Call" },
299
+ { 2, "UpdateSatusText" },
300
+ { 1, "Sleep" },
301
+ { 0, "BringToFront" },
302
+ { 2, "SetDetailsView" },
303
+
304
+ { 2, "SetFileAttributes" },
305
+ { 2, "SetOutPath" },
306
+ { 3, "IfFileExists" },
307
+ { 2, "SetFlag" },
308
+ { 4, "IfFlag" },
309
+ { 2, "GetFlag" },
310
+ { 3, "Rename" },
311
+ { 2, "GetFullPathName" },
312
+ { 2, "SearchPath" },
313
+ { 2, "GetTempFileName" },
314
+
315
+ { 6, "File" },
316
+ { 2, "Delete" },
317
+ { 5, "MessageBox" },
318
+ { 2, "RMDir" },
319
+ { 2, "StrLen" },
320
+ { 4, "StrCpy" },
321
+ { 5, "StrCmp" },
322
+ { 3, "ReadEnvStr" },
323
+ { 6, "IntCmp" },
324
+ { 4, "IntOp" },
325
+
326
+ { 3, "IntFmt" },
327
+ { 3, "PushPop" },
328
+ { 5, "FindWindow" },
329
+ { 6, "SendMessage" },
330
+ { 3, "IsWindow" },
331
+ { 3, "GetDlgItem" },
332
+ { 3, "SerCtlColors" },
333
+ { 1, "SetBrandingImage" },
334
+ { 5, "CreateFont" },
335
+ { 2, "ShowWindow" },
336
+
337
+ { 4, "ShellExecute" },
338
+ { 3, "Execute" },
339
+ { 3, "GetFileTime" },
340
+ { 3, "GetDLLVersion" },
341
+ { 3, "RegisterDLL" },
342
+ { 5, "CreateShortCut" },
343
+ { 3, "CopyFiles" },
344
+ { 0, "Reboot" },
345
+ { 4, "WriteINIStr" },
346
+ { 4, "ReadINIStr" },
347
+
348
+ { 4, "DelReg" },
349
+ { 5, "WriteReg" },
350
+ { 5, "ReadRegStr" },
351
+ { 5, "RegEnum" },
352
+ { 1, "FileClose" },
353
+ { 4, "FileOpen" },
354
+ { 3, "FileWrite" },
355
+ { 4, "FileRead" },
356
+ { 4, "FileSeek" },
357
+ { 1, "FindClose" },
358
+
359
+ { 2, "FindNext" },
360
+ { 2, "FindFirst" },
361
+ { 3, "WriteUninstaller" },
362
+ { 2, "LogText" },
363
+ { 3, "Section?etText" },
364
+ { 3, "InstType?etFlags" },
365
+ { 6, "GetLabelAddr" },
366
+ { 2, "GetFunctionAddress" },
367
+ { 6, "LockWindow" }
368
+ };
369
+
370
+ #endif
371
+
372
+ static const char *kShellStrings[] =
373
+ {
374
+ "",
375
+ "",
376
+
377
+ "SMPROGRAMS",
378
+ "",
379
+ "PRINTERS",
380
+ "DOCUMENTS",
381
+ "FAVORITES",
382
+ "SMSTARTUP",
383
+ "RECENT",
384
+ "SENDTO",
385
+ "",
386
+ "STARTMENU",
387
+ "",
388
+ "MUSIC",
389
+ "VIDEO",
390
+ "",
391
+
392
+ "DESKTOP",
393
+ "",
394
+ "",
395
+ "NETHOOD",
396
+ "FONTS",
397
+ "TEMPLATES",
398
+ "COMMONSTARTMENU",
399
+ "COMMONFILES",
400
+ "COMMON_STARTUP",
401
+ "COMMON_DESKTOPDIRECTORY",
402
+ "QUICKLAUNCH",
403
+ "PRINTHOOD",
404
+ "LOCALAPPDATA",
405
+ "ALTSTARTUP",
406
+ "ALTSTARTUP",
407
+ "FAVORITES",
408
+
409
+ "INTERNET_CACHE",
410
+ "COOKIES",
411
+ "HISTORY",
412
+ "APPDATA",
413
+ "WINDIR",
414
+ "SYSDIR",
415
+ "PROGRAMFILES",
416
+ "PICTURES",
417
+ "PROFILE",
418
+ "",
419
+ "",
420
+ "COMMONFILES",
421
+ "",
422
+ "TEMPLATES",
423
+ "DOCUMENTS",
424
+ "ADMINTOOLS",
425
+
426
+ "ADMINTOOLS",
427
+ "",
428
+ "",
429
+ "",
430
+ "",
431
+ "MUSIC",
432
+ "PICTURES",
433
+ "VIDEO",
434
+ "RESOURCES",
435
+ "RESOURCES_LOCALIZED",
436
+ "",
437
+ "CDBURN_AREA"
438
+ };
439
+
440
+ static const int kNumShellStrings = sizeof(kShellStrings) / sizeof(kShellStrings[0]);
441
+
442
+ /*
443
+ # define CMDLINE 20 // everything before here doesn't have trailing slash removal
444
+ # define INSTDIR 21
445
+ # define OUTDIR 22
446
+ # define EXEDIR 23
447
+ # define LANGUAGE 24
448
+ # define TEMP 25
449
+ # define PLUGINSDIR 26
450
+ # define HWNDPARENT 27
451
+ # define _CLICK 28
452
+ # define _OUTDIR 29
453
+ */
454
+
455
+ static const char *kVarStrings[] =
456
+ {
457
+ "CMDLINE",
458
+ "INSTDIR",
459
+ "OUTDIR",
460
+ "EXEDIR",
461
+ "LANGUAGE",
462
+ "TEMP",
463
+ "PLUGINSDIR",
464
+ "EXEPATH", // test it
465
+ "EXEFILE", // test it
466
+ "HWNDPARENT",
467
+ "_CLICK",
468
+ "_OUTDIR"
469
+ };
470
+
471
+ static const int kNumVarStrings = sizeof(kVarStrings) / sizeof(kVarStrings[0]);
472
+
473
+
474
+ static AString GetVar(UInt32 index)
475
+ {
476
+ AString res = "$";
477
+ if (index < 10)
478
+ res += UIntToString(index);
479
+ else if (index < 20)
480
+ {
481
+ res += "R";
482
+ res += UIntToString(index - 10);
483
+ }
484
+ else if (index < 20 + kNumVarStrings)
485
+ res += kVarStrings[index - 20];
486
+ else
487
+ {
488
+ res += "[";
489
+ res += UIntToString(index);
490
+ res += "]";
491
+ }
492
+ return res;
493
+ }
494
+
495
+ #define NS_SKIP_CODE 252
496
+ #define NS_VAR_CODE 253
497
+ #define NS_SHELL_CODE 254
498
+ #define NS_LANG_CODE 255
499
+ #define NS_CODES_START NS_SKIP_CODE
500
+
501
+ static AString GetShellString(int index)
502
+ {
503
+ AString res = "$";
504
+ if (index < kNumShellStrings)
505
+ {
506
+ const char *sz = kShellStrings[index];
507
+ if (sz[0] != 0)
508
+ return res + sz;
509
+ }
510
+ res += "SHELL[";
511
+ res += UIntToString(index);
512
+ res += "]";
513
+ return res;
514
+ }
515
+
516
+ // Based on Dave Laundon's simplified process_string
517
+ AString GetNsisString(const AString &s)
518
+ {
519
+ AString res;
520
+ for (int i = 0; i < s.Length();)
521
+ {
522
+ unsigned char nVarIdx = s[i++];
523
+ if (nVarIdx > NS_CODES_START && i + 2 <= s.Length())
524
+ {
525
+ int nData = s[i++] & 0x7F;
526
+ unsigned char c1 = s[i++];
527
+ nData |= (((int)(c1 & 0x7F)) << 7);
528
+
529
+ if (nVarIdx == NS_SHELL_CODE)
530
+ res += GetShellString(c1);
531
+ else if (nVarIdx == NS_VAR_CODE)
532
+ res += GetVar(nData);
533
+ else if (nVarIdx == NS_LANG_CODE)
534
+ res += "NS_LANG_CODE";
535
+ }
536
+ else if (nVarIdx == NS_SKIP_CODE)
537
+ {
538
+ if (i < s.Length())
539
+ res += s[i++];
540
+ }
541
+ else // Normal char
542
+ res += (char)nVarIdx;
543
+ }
544
+ return res;
545
+ }
546
+
547
+ UString GetNsisString(const UString &s)
548
+ {
549
+ UString res;
550
+ for (int i = 0; i < s.Length();)
551
+ {
552
+ wchar_t nVarIdx = s[i++];
553
+ if (nVarIdx > NS_UN_CODES_START && nVarIdx <= NS_UN_CODES_END)
554
+ {
555
+ if (i == s.Length())
556
+ break;
557
+ int nData = s[i++] & 0x7FFF;
558
+
559
+ if (nVarIdx == NS_UN_SHELL_CODE)
560
+ res += GetUnicodeString(GetShellString(nData >> 8));
561
+ else if (nVarIdx == NS_UN_VAR_CODE)
562
+ res += GetUnicodeString(GetVar(nData));
563
+ else if (nVarIdx == NS_UN_LANG_CODE)
564
+ res += L"NS_LANG_CODE";
565
+ }
566
+ else if (nVarIdx == NS_UN_SKIP_CODE)
567
+ {
568
+ if (i == s.Length())
569
+ break;
570
+ res += s[i++];
571
+ }
572
+ else // Normal char
573
+ res += (char)nVarIdx;
574
+ }
575
+ return res;
576
+ }
577
+
578
+ AString CInArchive::ReadString2A(UInt32 pos) const
579
+ {
580
+ return GetNsisString(ReadStringA(pos));
581
+ }
582
+
583
+ UString CInArchive::ReadString2U(UInt32 pos) const
584
+ {
585
+ return GetNsisString(ReadStringU(pos));
586
+ }
587
+
588
+ AString CInArchive::ReadString2(UInt32 pos) const
589
+ {
590
+ if (IsUnicode)
591
+ return UnicodeStringToMultiByte(ReadString2U(pos));
592
+ else
593
+ return ReadString2A(pos);
594
+ }
595
+
596
+ AString CInArchive::ReadString2Qw(UInt32 pos) const
597
+ {
598
+ return "\"" + ReadString2(pos) + "\"";
599
+ }
600
+
601
+ #define DEL_DIR 1
602
+ #define DEL_RECURSE 2
603
+ #define DEL_REBOOT 4
604
+ // #define DEL_SIMPLE 8
605
+
606
+ static const int kNumEntryParams = 6;
607
+
608
+ struct CEntry
609
+ {
610
+ UInt32 Which;
611
+ UInt32 Params[kNumEntryParams];
612
+ AString GetParamsString(int numParams);
613
+ CEntry()
614
+ {
615
+ Which = 0;
616
+ for (UInt32 j = 0; j < kNumEntryParams; j++)
617
+ Params[j] = 0;
618
+ }
619
+ };
620
+
621
+ AString CEntry::GetParamsString(int numParams)
622
+ {
623
+ AString s;
624
+ for (int i = 0; i < numParams; i++)
625
+ {
626
+ s += " ";
627
+ UInt32 v = Params[i];
628
+ if (v > 0xFFF00000)
629
+ s += IntToString((Int32)Params[i]);
630
+ else
631
+ s += UIntToString(Params[i]);
632
+ }
633
+ return s;
634
+ }
635
+
636
+ #ifdef NSIS_SCRIPT
637
+
638
+ static AString GetRegRootID(UInt32 val)
639
+ {
640
+ const char *s;
641
+ switch(val)
642
+ {
643
+ case 0: s = "SHCTX"; break;
644
+ case 0x80000000: s = "HKCR"; break;
645
+ case 0x80000001: s = "HKCU"; break;
646
+ case 0x80000002: s = "HKLM"; break;
647
+ case 0x80000003: s = "HKU"; break;
648
+ case 0x80000004: s = "HKPD"; break;
649
+ case 0x80000005: s = "HKCC"; break;
650
+ case 0x80000006: s = "HKDD"; break;
651
+ case 0x80000050: s = "HKPT"; break;
652
+ case 0x80000060: s = "HKPN"; break;
653
+ default:
654
+ return UIntToString(val); break;
655
+ }
656
+ return s;
657
+ }
658
+
659
+ #endif
660
+
661
+ HRESULT CInArchive::ReadEntries(const CBlockHeader &bh)
662
+ {
663
+ _posInData = bh.Offset + GetOffset();
664
+ AString prefixA;
665
+ UString prefixU;
666
+ for (UInt32 i = 0; i < bh.Num; i++)
667
+ {
668
+ CEntry e;
669
+ e.Which = ReadUInt32();
670
+ for (UInt32 j = 0; j < kNumEntryParams; j++)
671
+ e.Params[j] = ReadUInt32();
672
+ #ifdef NSIS_SCRIPT
673
+ if (e.Which != EW_PUSHPOP && e.Which < sizeof(kCommandPairs) / sizeof(kCommandPairs[0]))
674
+ {
675
+ const CCommandPair &pair = kCommandPairs[e.Which];
676
+ Script += pair.Name;
677
+ }
678
+ #endif
679
+
680
+ switch (e.Which)
681
+ {
682
+ case EW_CREATEDIR:
683
+ {
684
+ if (IsUnicode)
685
+ {
686
+ prefixU.Empty();
687
+ prefixU = ReadString2U(e.Params[0]);
688
+ }
689
+ else
690
+ {
691
+ prefixA.Empty();
692
+ prefixA = ReadString2A(e.Params[0]);
693
+ }
694
+ #ifdef NSIS_SCRIPT
695
+ Script += " ";
696
+ if (IsUnicode)
697
+ Script += UnicodeStringToMultiByte(prefixU);
698
+ else
699
+ Script += prefixA;
700
+ #endif
701
+ break;
702
+ }
703
+
704
+ case EW_EXTRACTFILE:
705
+ {
706
+ CItem item;
707
+ item.IsUnicode = IsUnicode;
708
+ if (IsUnicode)
709
+ {
710
+ item.PrefixU = prefixU;
711
+ item.NameU = ReadString2U(e.Params[1]);
712
+ }
713
+ else
714
+ {
715
+ item.PrefixA = prefixA;
716
+ item.NameA = ReadString2A(e.Params[1]);
717
+ }
718
+ /* UInt32 overwriteFlag = e.Params[0]; */
719
+ item.Pos = e.Params[2];
720
+ item.MTime.dwLowDateTime = e.Params[3];
721
+ item.MTime.dwHighDateTime = e.Params[4];
722
+ /* UInt32 allowIgnore = e.Params[5]; */
723
+ if (Items.Size() > 0)
724
+ {
725
+ /*
726
+ if (item.Pos == Items.Back().Pos)
727
+ continue;
728
+ */
729
+ }
730
+ Items.Add(item);
731
+ #ifdef NSIS_SCRIPT
732
+ Script += " ";
733
+
734
+ if (IsUnicode)
735
+ Script += UnicodeStringToMultiByte(item.NameU);
736
+ else
737
+ Script += item.NameA;
738
+ #endif
739
+ break;
740
+ }
741
+
742
+
743
+ #ifdef NSIS_SCRIPT
744
+ case EW_UPDATETEXT:
745
+ {
746
+ Script += " ";
747
+ Script += ReadString2(e.Params[0]);
748
+ Script += " ";
749
+ Script += UIntToString(e.Params[1]);
750
+ break;
751
+ }
752
+ case EW_SETFILEATTRIBUTES:
753
+ {
754
+ Script += " ";
755
+ Script += ReadString2(e.Params[0]);
756
+ Script += " ";
757
+ Script += UIntToString(e.Params[1]);
758
+ break;
759
+ }
760
+ case EW_IFFILEEXISTS:
761
+ {
762
+ Script += " ";
763
+ Script += ReadString2(e.Params[0]);
764
+ Script += " ";
765
+ Script += UIntToString(e.Params[1]);
766
+ Script += " ";
767
+ Script += UIntToString(e.Params[2]);
768
+ break;
769
+ }
770
+ case EW_RENAME:
771
+ {
772
+ Script += " ";
773
+ Script += ReadString2(e.Params[0]);
774
+ Script += " ";
775
+ Script += ReadString2(e.Params[1]);
776
+ Script += " ";
777
+ Script += UIntToString(e.Params[2]);
778
+ break;
779
+ }
780
+ case EW_GETFULLPATHNAME:
781
+ {
782
+ Script += " ";
783
+ Script += ReadString2(e.Params[0]);
784
+ Script += " ";
785
+ Script += ReadString2(e.Params[1]);
786
+ Script += " ";
787
+ Script += UIntToString(e.Params[2]);
788
+ break;
789
+ }
790
+ case EW_SEARCHPATH:
791
+ {
792
+ Script += " ";
793
+ Script += ReadString2(e.Params[0]);
794
+ Script += " ";
795
+ Script += ReadString2(e.Params[1]);
796
+ break;
797
+ }
798
+ case EW_GETTEMPFILENAME:
799
+ {
800
+ AString s;
801
+ Script += " ";
802
+ Script += ReadString2(e.Params[0]);
803
+ Script += " ";
804
+ Script += ReadString2(e.Params[1]);
805
+ break;
806
+ }
807
+
808
+ case EW_DELETEFILE:
809
+ {
810
+ UInt64 flag = e.Params[1];
811
+ if (flag != 0)
812
+ {
813
+ Script += " ";
814
+ if (flag == DEL_REBOOT)
815
+ Script += "/REBOOTOK";
816
+ else
817
+ Script += UIntToString(e.Params[1]);
818
+ }
819
+ Script += " ";
820
+ Script += ReadString2(e.Params[0]);
821
+ break;
822
+ }
823
+ case EW_RMDIR:
824
+ {
825
+ UInt64 flag = e.Params[1];
826
+ if (flag != 0)
827
+ {
828
+ if ((flag & DEL_REBOOT) != 0)
829
+ Script += " /REBOOTOK";
830
+ if ((flag & DEL_RECURSE) != 0)
831
+ Script += " /r";
832
+ }
833
+ Script += " ";
834
+ Script += ReadString2(e.Params[0]);
835
+ break;
836
+ }
837
+ case EW_STRLEN:
838
+ {
839
+ Script += " ";
840
+ Script += GetVar(e.Params[0]);;
841
+ Script += " ";
842
+ Script += ReadString2Qw(e.Params[1]);
843
+ break;
844
+ }
845
+ case EW_ASSIGNVAR:
846
+ {
847
+ Script += " ";
848
+ Script += GetVar(e.Params[0]);;
849
+ Script += " ";
850
+ Script += ReadString2Qw(e.Params[1]);
851
+ AString maxLen, startOffset;
852
+ if (e.Params[2] != 0)
853
+ maxLen = ReadString2(e.Params[2]);
854
+ if (e.Params[3] != 0)
855
+ startOffset = ReadString2(e.Params[3]);
856
+ if (!maxLen.IsEmpty() || !startOffset.IsEmpty())
857
+ {
858
+ Script += " ";
859
+ if (maxLen.IsEmpty())
860
+ Script += "\"\"";
861
+ else
862
+ Script += maxLen;
863
+ if (!startOffset.IsEmpty())
864
+ {
865
+ Script += " ";
866
+ Script += startOffset;
867
+ }
868
+ }
869
+ break;
870
+ }
871
+ case EW_STRCMP:
872
+ {
873
+ Script += " ";
874
+
875
+ Script += " ";
876
+ Script += ReadString2Qw(e.Params[0]);
877
+
878
+ Script += " ";
879
+ Script += ReadString2Qw(e.Params[1]);
880
+
881
+ for (int j = 2; j < 5; j++)
882
+ {
883
+ Script += " ";
884
+ Script += UIntToString(e.Params[j]);
885
+ }
886
+ break;
887
+ }
888
+ case EW_INTCMP:
889
+ {
890
+ if (e.Params[5] != 0)
891
+ Script += "U";
892
+
893
+ Script += " ";
894
+ Script += ReadString2(e.Params[0]);
895
+ Script += " ";
896
+ Script += ReadString2(e.Params[1]);
897
+
898
+ for (int i = 2; i < 5; i++)
899
+ {
900
+ Script += " ";
901
+ Script += UIntToString(e.Params[i]);
902
+ }
903
+ break;
904
+ }
905
+ case EW_INTOP:
906
+ {
907
+ Script += " ";
908
+ Script += GetVar(e.Params[0]);
909
+ Script += " ";
910
+ int numOps = 2;
911
+ AString op;
912
+ switch (e.Params[3])
913
+ {
914
+ case 0: op = '+'; break;
915
+ case 1: op = '-'; break;
916
+ case 2: op = '*'; break;
917
+ case 3: op = '/'; break;
918
+ case 4: op = '|'; break;
919
+ case 5: op = '&'; break;
920
+ case 6: op = '^'; break;
921
+ case 7: op = '~'; numOps = 1; break;
922
+ case 8: op = '!'; numOps = 1; break;
923
+ case 9: op = "||"; break;
924
+ case 10: op = "&&"; break;
925
+ case 11: op = '%'; break;
926
+ default: op = UIntToString(e.Params[3]);
927
+ }
928
+ AString p1 = ReadString2(e.Params[1]);
929
+ if (numOps == 1)
930
+ {
931
+ Script += op;
932
+ Script += p1;
933
+ }
934
+ else
935
+ {
936
+ Script += p1;
937
+ Script += " ";
938
+ Script += op;
939
+ Script += " ";
940
+ Script += ReadString2(e.Params[2]);
941
+ }
942
+ break;
943
+ }
944
+
945
+ case EW_PUSHPOP:
946
+ {
947
+ int isPop = (e.Params[1] != 0);
948
+ if (isPop)
949
+ {
950
+ Script += "Pop";
951
+ Script += " ";
952
+ Script += GetVar(e.Params[0]);;
953
+ }
954
+ else
955
+ {
956
+ int isExch = (e.Params[2] != 0);
957
+ if (isExch)
958
+ {
959
+ Script += "Exch";
960
+ }
961
+ else
962
+ {
963
+ Script += "Push";
964
+ Script += " ";
965
+ Script += ReadString2(e.Params[0]);
966
+ }
967
+ }
968
+ break;
969
+ }
970
+
971
+ case EW_SENDMESSAGE:
972
+ {
973
+ // SendMessage: 6 [output, hwnd, msg, wparam, lparam, [wparamstring?1:0 | lparamstring?2:0 | timeout<<2]
974
+ Script += " ";
975
+ // Script += ReadString2(e.Params[0]);
976
+ // Script += " ";
977
+ Script += ReadString2(e.Params[1]);
978
+ Script += " ";
979
+ Script += ReadString2(e.Params[2]);
980
+
981
+ Script += " ";
982
+ UInt32 spec = e.Params[5];
983
+ // if (spec & 1)
984
+ Script += IntToString(e.Params[3]);
985
+ // else
986
+ // Script += ReadString2(e.Params[3]);
987
+
988
+ Script += " ";
989
+ // if (spec & 2)
990
+ Script += IntToString(e.Params[4]);
991
+ // else
992
+ // Script += ReadString2(e.Params[4]);
993
+
994
+ if ((Int32)e.Params[0] >= 0)
995
+ {
996
+ Script += " ";
997
+ Script += GetVar(e.Params[1]);
998
+ }
999
+
1000
+ spec >>= 2;
1001
+ if (spec != 0)
1002
+ {
1003
+ Script += " /TIMEOUT=";
1004
+ Script += IntToString(spec);
1005
+ }
1006
+ break;
1007
+ }
1008
+
1009
+ case EW_GETDLGITEM:
1010
+ {
1011
+ Script += " ";
1012
+ Script += GetVar(e.Params[0]);;
1013
+ Script += " ";
1014
+ Script += ReadString2(e.Params[1]);
1015
+ Script += " ";
1016
+ Script += ReadString2(e.Params[2]);
1017
+ break;
1018
+ }
1019
+
1020
+
1021
+ case EW_REGISTERDLL:
1022
+ {
1023
+ Script += " ";
1024
+ Script += ReadString2(e.Params[0]);
1025
+ Script += " ";
1026
+ Script += ReadString2(e.Params[1]);
1027
+ Script += " ";
1028
+ Script += UIntToString(e.Params[2]);
1029
+ break;
1030
+ }
1031
+
1032
+ case EW_CREATESHORTCUT:
1033
+ {
1034
+ AString s;
1035
+
1036
+ Script += " ";
1037
+ Script += ReadString2Qw(e.Params[0]);
1038
+
1039
+ Script += " ";
1040
+ Script += ReadString2Qw(e.Params[1]);
1041
+
1042
+ for (int j = 2; j < 5; j++)
1043
+ {
1044
+ Script += " ";
1045
+ Script += UIntToString(e.Params[j]);
1046
+ }
1047
+ break;
1048
+ }
1049
+
1050
+ /*
1051
+ case EW_DELREG:
1052
+ {
1053
+ AString keyName, valueName;
1054
+ keyName = ReadString2(e.Params[1]);
1055
+ bool isValue = (e.Params[2] != -1);
1056
+ if (isValue)
1057
+ {
1058
+ valueName = ReadString2(e.Params[2]);
1059
+ Script += "Key";
1060
+ }
1061
+ else
1062
+ Script += "Value";
1063
+ Script += " ";
1064
+ Script += UIntToString(e.Params[0]);
1065
+ Script += " ";
1066
+ Script += keyName;
1067
+ if (isValue)
1068
+ {
1069
+ Script += " ";
1070
+ Script += valueName;
1071
+ }
1072
+ Script += " ";
1073
+ Script += UIntToString(e.Params[3]);
1074
+ break;
1075
+ }
1076
+ */
1077
+
1078
+ case EW_WRITEREG:
1079
+ {
1080
+ AString s;
1081
+ switch(e.Params[4])
1082
+ {
1083
+ case 1: s = "Str"; break;
1084
+ case 2: s = "ExpandStr"; break;
1085
+ case 3: s = "Bin"; break;
1086
+ case 4: s = "DWORD"; break;
1087
+ default: s = "?" + UIntToString(e.Params[4]); break;
1088
+ }
1089
+ Script += s;
1090
+ Script += " ";
1091
+ Script += GetRegRootID(e.Params[0]);
1092
+ Script += " ";
1093
+
1094
+ AString keyName, valueName;
1095
+ keyName = ReadString2Qw(e.Params[1]);
1096
+ Script += keyName;
1097
+ Script += " ";
1098
+
1099
+ valueName = ReadString2Qw(e.Params[2]);
1100
+ Script += valueName;
1101
+ Script += " ";
1102
+
1103
+ valueName = ReadString2Qw(e.Params[3]);
1104
+ Script += valueName;
1105
+ Script += " ";
1106
+
1107
+ break;
1108
+ }
1109
+
1110
+ case EW_WRITEUNINSTALLER:
1111
+ {
1112
+ Script += " ";
1113
+ Script += ReadString2(e.Params[0]);
1114
+ for (int j = 1; j < 3; j++)
1115
+ {
1116
+ Script += " ";
1117
+ Script += UIntToString(e.Params[j]);
1118
+ }
1119
+ break;
1120
+ }
1121
+
1122
+ default:
1123
+ {
1124
+ int numParams = kNumEntryParams;
1125
+ if (e.Which < sizeof(kCommandPairs) / sizeof(kCommandPairs[0]))
1126
+ {
1127
+ const CCommandPair &pair = kCommandPairs[e.Which];
1128
+ // Script += pair.Name;
1129
+ numParams = pair.NumParams;
1130
+ }
1131
+ else
1132
+ {
1133
+ Script += "Unknown";
1134
+ Script += UIntToString(e.Which);
1135
+ }
1136
+ Script += e.GetParamsString(numParams);
1137
+ }
1138
+ #endif
1139
+ }
1140
+ #ifdef NSIS_SCRIPT
1141
+ Script += kCrLf;
1142
+ #endif
1143
+ }
1144
+
1145
+ {
1146
+ Items.Sort(CompareItems, 0);
1147
+ int i;
1148
+ // if (IsSolid)
1149
+ for (i = 0; i + 1 < Items.Size();)
1150
+ {
1151
+ bool sameName = IsUnicode ?
1152
+ (Items[i].NameU == Items[i + 1].NameU) :
1153
+ (Items[i].NameA == Items[i + 1].NameA);
1154
+ if (Items[i].Pos == Items[i + 1].Pos && sameName)
1155
+ Items.Delete(i + 1);
1156
+ else
1157
+ i++;
1158
+ }
1159
+ for (i = 0; i < Items.Size(); i++)
1160
+ {
1161
+ CItem &item = Items[i];
1162
+ UInt32 curPos = item.Pos + 4;
1163
+ for (int nextIndex = i + 1; nextIndex < Items.Size(); nextIndex++)
1164
+ {
1165
+ UInt32 nextPos = Items[nextIndex].Pos;
1166
+ if (curPos <= nextPos)
1167
+ {
1168
+ item.EstimatedSizeIsDefined = true;
1169
+ item.EstimatedSize = nextPos - curPos;
1170
+ break;
1171
+ }
1172
+ }
1173
+ }
1174
+ if (!IsSolid)
1175
+ {
1176
+ for (i = 0; i < Items.Size(); i++)
1177
+ {
1178
+ CItem &item = Items[i];
1179
+ RINOK(_stream->Seek(GetPosOfNonSolidItem(i), STREAM_SEEK_SET, NULL));
1180
+ const UInt32 kSigSize = 4 + 1 + 5;
1181
+ BYTE sig[kSigSize];
1182
+ size_t processedSize = kSigSize;
1183
+ RINOK(ReadStream(_stream, sig, &processedSize));
1184
+ if (processedSize < 4)
1185
+ return S_FALSE;
1186
+ UInt32 size = Get32(sig);
1187
+ if ((size & 0x80000000) != 0)
1188
+ {
1189
+ item.IsCompressed = true;
1190
+ // is compressed;
1191
+ size &= ~0x80000000;
1192
+ if (Method == NMethodType::kLZMA)
1193
+ {
1194
+ if (processedSize < 9)
1195
+ return S_FALSE;
1196
+ if (FilterFlag)
1197
+ item.UseFilter = (sig[4] != 0);
1198
+ item.DictionarySize = Get32(sig + 5 + (FilterFlag ? 1 : 0));
1199
+ }
1200
+ }
1201
+ else
1202
+ {
1203
+ item.IsCompressed = false;
1204
+ item.Size = size;
1205
+ item.SizeIsDefined = true;
1206
+ }
1207
+ item.CompressedSize = size;
1208
+ item.CompressedSizeIsDefined = true;
1209
+ }
1210
+ }
1211
+ }
1212
+ return S_OK;
1213
+ }
1214
+
1215
+ HRESULT CInArchive::Parse()
1216
+ {
1217
+ // UInt32 offset = ReadUInt32();
1218
+ // ???? offset == FirstHeader.HeaderLength
1219
+ /* UInt32 ehFlags = */ ReadUInt32();
1220
+ CBlockHeader bhPages, bhSections, bhEntries, bhStrings, bhLangTables, bhCtlColors, bhData;
1221
+ // CBlockHeader bgFont;
1222
+ ReadBlockHeader(bhPages);
1223
+ ReadBlockHeader(bhSections);
1224
+ ReadBlockHeader(bhEntries);
1225
+ ReadBlockHeader(bhStrings);
1226
+ ReadBlockHeader(bhLangTables);
1227
+ ReadBlockHeader(bhCtlColors);
1228
+ // ReadBlockHeader(bgFont);
1229
+ ReadBlockHeader(bhData);
1230
+
1231
+ _stringsPos = bhStrings.Offset;
1232
+ UInt32 pos = GetOffset() + _stringsPos;
1233
+ int numZeros0 = 0;
1234
+ int numZeros1 = 0;
1235
+ int i;
1236
+ const int kBlockSize = 256;
1237
+ for (i = 0; i < kBlockSize; i++)
1238
+ {
1239
+ if (pos >= _size || pos + 1 >= _size)
1240
+ break;
1241
+ char c0 = _data[pos++];
1242
+ char c1 = _data[pos++];
1243
+ wchar_t c = (c0 | ((wchar_t)c1 << 8));
1244
+
1245
+ if (c >= NS_UN_CODES_START && c < NS_UN_CODES_END)
1246
+ {
1247
+ if (pos >= _size || pos + 1 >= _size)
1248
+ break;
1249
+ pos += 2;
1250
+ numZeros1++;
1251
+ }
1252
+ else
1253
+ {
1254
+ if (c0 == 0 && c1 != 0)
1255
+ numZeros0++;
1256
+ if (c1 == 0)
1257
+ numZeros1++;
1258
+ }
1259
+ // printf("\nnumZeros0 = %2x %2x", _data[pos + 0], _data[pos + 1]);
1260
+ }
1261
+ IsUnicode = (numZeros1 > numZeros0 * 3 + kBlockSize / 16);
1262
+ // printf("\nnumZeros0 = %3d numZeros1 = %3d", numZeros0, numZeros1);
1263
+ return ReadEntries(bhEntries);
1264
+ }
1265
+
1266
+ static bool IsLZMA(const Byte *p, UInt32 &dictionary)
1267
+ {
1268
+ dictionary = Get32(p + 1);
1269
+ return (p[0] == 0x5D && p[1] == 0x00 && p[2] == 0x00 && p[5] == 0x00);
1270
+ }
1271
+
1272
+ static bool IsLZMA(const Byte *p, UInt32 &dictionary, bool &thereIsFlag)
1273
+ {
1274
+ if (IsLZMA(p, dictionary))
1275
+ {
1276
+ thereIsFlag = false;
1277
+ return true;
1278
+ }
1279
+ if (IsLZMA(p + 1, dictionary))
1280
+ {
1281
+ thereIsFlag = true;
1282
+ return true;
1283
+ }
1284
+ return false;
1285
+ }
1286
+
1287
+ static bool IsBZip2(const Byte *p)
1288
+ {
1289
+ return (p[0] == 0x31 && p[1] < 14);
1290
+ }
1291
+
1292
+ HRESULT CInArchive::Open2(
1293
+ DECL_EXTERNAL_CODECS_LOC_VARS2
1294
+ )
1295
+ {
1296
+ RINOK(_stream->Seek(0, STREAM_SEEK_CUR, &StreamOffset));
1297
+
1298
+ const UInt32 kSigSize = 4 + 1 + 5 + 1; // size, flag, lzma props, lzma first byte
1299
+ BYTE sig[kSigSize];
1300
+ RINOK(ReadStream_FALSE(_stream, sig, kSigSize));
1301
+ UInt64 position;
1302
+ RINOK(_stream->Seek(StreamOffset, STREAM_SEEK_SET, &position));
1303
+
1304
+ _headerIsCompressed = true;
1305
+ IsSolid = true;
1306
+ FilterFlag = false;
1307
+ DictionarySize = 1;
1308
+
1309
+ UInt32 compressedHeaderSize = Get32(sig);
1310
+
1311
+ if (compressedHeaderSize == FirstHeader.HeaderLength)
1312
+ {
1313
+ _headerIsCompressed = false;
1314
+ IsSolid = false;
1315
+ Method = NMethodType::kCopy;
1316
+ }
1317
+ else if (IsLZMA(sig, DictionarySize, FilterFlag))
1318
+ {
1319
+ Method = NMethodType::kLZMA;
1320
+ }
1321
+ else if (IsLZMA(sig + 4, DictionarySize, FilterFlag))
1322
+ {
1323
+ IsSolid = false;
1324
+ Method = NMethodType::kLZMA;
1325
+ }
1326
+ else if (sig[3] == 0x80)
1327
+ {
1328
+ IsSolid = false;
1329
+ if (IsBZip2(sig + 4))
1330
+ Method = NMethodType::kBZip2;
1331
+ else
1332
+ Method = NMethodType::kDeflate;
1333
+ }
1334
+ else if (IsBZip2(sig))
1335
+ {
1336
+ Method = NMethodType::kBZip2;
1337
+ }
1338
+ else
1339
+ {
1340
+ Method = NMethodType::kDeflate;
1341
+ }
1342
+
1343
+ _posInData = 0;
1344
+ if (!IsSolid)
1345
+ {
1346
+ _headerIsCompressed = ((compressedHeaderSize & 0x80000000) != 0);
1347
+ if (_headerIsCompressed)
1348
+ compressedHeaderSize &= ~0x80000000;
1349
+ _nonSolidStartOffset = compressedHeaderSize;
1350
+ RINOK(_stream->Seek(StreamOffset + 4, STREAM_SEEK_SET, NULL));
1351
+ }
1352
+ UInt32 unpackSize = FirstHeader.HeaderLength;
1353
+ if (_headerIsCompressed)
1354
+ {
1355
+ // unpackSize = (1 << 23);
1356
+ _data.SetCapacity(unpackSize);
1357
+ RINOK(Decoder.Init(
1358
+ EXTERNAL_CODECS_LOC_VARS
1359
+ _stream, Method, FilterFlag, UseFilter));
1360
+ size_t processedSize = unpackSize;
1361
+ RINOK(Decoder.Read(_data, &processedSize));
1362
+ if (processedSize != unpackSize)
1363
+ return S_FALSE;
1364
+ _size = processedSize;
1365
+ if (IsSolid)
1366
+ {
1367
+ UInt32 size2 = ReadUInt32();
1368
+ if (size2 < _size)
1369
+ _size = size2;
1370
+ }
1371
+ }
1372
+ else
1373
+ {
1374
+ _data.SetCapacity(unpackSize);
1375
+ _size = (size_t)unpackSize;
1376
+ RINOK(ReadStream_FALSE(_stream, (Byte *)_data, unpackSize));
1377
+ }
1378
+ return Parse();
1379
+ }
1380
+
1381
+ /*
1382
+ NsisExe =
1383
+ {
1384
+ ExeStub
1385
+ Archive // must start from 512 * N
1386
+ #ifndef NSIS_CONFIG_CRC_ANAL
1387
+ {
1388
+ Some additional data
1389
+ }
1390
+ }
1391
+
1392
+ Archive
1393
+ {
1394
+ FirstHeader
1395
+ Data
1396
+ #ifdef NSIS_CONFIG_CRC_SUPPORT && FirstHeader.ThereIsCrc()
1397
+ {
1398
+ CRC
1399
+ }
1400
+ }
1401
+
1402
+ FirstHeader
1403
+ {
1404
+ UInt32 Flags;
1405
+ Byte Signature[16];
1406
+ // points to the header+sections+entries+stringtable in the datablock
1407
+ UInt32 HeaderLength;
1408
+ UInt32 ArchiveSize;
1409
+ }
1410
+ */
1411
+
1412
+ HRESULT CInArchive::Open(
1413
+ DECL_EXTERNAL_CODECS_LOC_VARS
1414
+ IInStream *inStream, const UInt64 *maxCheckStartPosition)
1415
+ {
1416
+ Clear();
1417
+ RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL));
1418
+ UInt64 maxSize = ((maxCheckStartPosition != 0) ? *maxCheckStartPosition : 0);
1419
+ const UInt32 kStep = 512;
1420
+ Byte buffer[kStep];
1421
+
1422
+ UInt64 position = 0;
1423
+ for (; position <= maxSize; position += kStep)
1424
+ {
1425
+ RINOK(ReadStream_FALSE(inStream, buffer, kStep));
1426
+ if (memcmp(buffer + 4, kSignature, kSignatureSize) == 0)
1427
+ break;
1428
+ }
1429
+ if (position > maxSize)
1430
+ return S_FALSE;
1431
+ const UInt32 kStartHeaderSize = 4 * 7;
1432
+ RINOK(inStream->Seek(0, STREAM_SEEK_END, &_archiveSize));
1433
+ RINOK(inStream->Seek(position + kStartHeaderSize, STREAM_SEEK_SET, 0));
1434
+ FirstHeader.Flags = Get32(buffer);
1435
+ FirstHeader.HeaderLength = Get32(buffer + kSignatureSize + 4);
1436
+ FirstHeader.ArchiveSize = Get32(buffer + kSignatureSize + 8);
1437
+ if (_archiveSize - position < FirstHeader.ArchiveSize)
1438
+ return S_FALSE;
1439
+
1440
+ try
1441
+ {
1442
+ _stream = inStream;
1443
+ HRESULT res = Open2(EXTERNAL_CODECS_LOC_VARS2);
1444
+ if (res != S_OK)
1445
+ Clear();
1446
+ _stream.Release();
1447
+ return res;
1448
+ }
1449
+ catch(...) { Clear(); return S_FALSE; }
1450
+ }
1451
+
1452
+ void CInArchive::Clear()
1453
+ {
1454
+ #ifdef NSIS_SCRIPT
1455
+ Script.Empty();
1456
+ #endif
1457
+ Items.Clear();
1458
+ _stream.Release();
1459
+ }
1460
+
1461
+ }}