finishm 0.0.1

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 (554) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +59 -0
  8. data/Rakefile +51 -0
  9. data/VERSION +1 -0
  10. data/bin/assembly_visualiser +106 -0
  11. data/bin/check_primer_combinations.rb +73 -0
  12. data/bin/contig_joiner.rb +244 -0
  13. data/bin/contigs_against_assembly.rb +153 -0
  14. data/bin/finishm +143 -0
  15. data/bin/finishm_assembler +55 -0
  16. data/bin/finishm_gap_closer.rb +241 -0
  17. data/bin/kmer_abundance_file_tool.rb +49 -0
  18. data/bin/kmer_pattern_to_assembly.rb +377 -0
  19. data/bin/kmer_profile_finder.rb +92 -0
  20. data/bin/kmers_count_parse.d +52 -0
  21. data/bin/kmers_count_tabulate.d +123 -0
  22. data/bin/kmers_count_tabulate.rb +84 -0
  23. data/bin/pcr_result_parser.rb +108 -0
  24. data/bin/primer_finder.rb +119 -0
  25. data/bin/read_selection_by_kmer.d +174 -0
  26. data/bin/scaffold_by_pattern.rb +119 -0
  27. data/bin/scaffold_connection_possibilities_to_knowns.rb +193 -0
  28. data/bin/scaffold_end_coverages.rb +69 -0
  29. data/bin/trail_validator.rb +84 -0
  30. data/ext/mkrf_conf.rb +56 -0
  31. data/ext/src/Makefile +140 -0
  32. data/ext/src/src/allocArray.c +305 -0
  33. data/ext/src/src/allocArray.h +86 -0
  34. data/ext/src/src/autoOpen.c +107 -0
  35. data/ext/src/src/autoOpen.h +18 -0
  36. data/ext/src/src/binarySequences.c +813 -0
  37. data/ext/src/src/binarySequences.h +125 -0
  38. data/ext/src/src/concatenatedGraph.c +233 -0
  39. data/ext/src/src/concatenatedGraph.h +30 -0
  40. data/ext/src/src/concatenatedPreGraph.c +262 -0
  41. data/ext/src/src/concatenatedPreGraph.h +29 -0
  42. data/ext/src/src/correctedGraph.c +2643 -0
  43. data/ext/src/src/correctedGraph.h +32 -0
  44. data/ext/src/src/dfib.c +509 -0
  45. data/ext/src/src/dfib.h +69 -0
  46. data/ext/src/src/dfibHeap.c +89 -0
  47. data/ext/src/src/dfibHeap.h +39 -0
  48. data/ext/src/src/dfibpriv.h +105 -0
  49. data/ext/src/src/fib.c +628 -0
  50. data/ext/src/src/fib.h +78 -0
  51. data/ext/src/src/fibHeap.c +79 -0
  52. data/ext/src/src/fibHeap.h +41 -0
  53. data/ext/src/src/fibpriv.h +110 -0
  54. data/ext/src/src/globals.h +154 -0
  55. data/ext/src/src/graph.c +3932 -0
  56. data/ext/src/src/graph.h +233 -0
  57. data/ext/src/src/graphReConstruction.c +1472 -0
  58. data/ext/src/src/graphReConstruction.h +30 -0
  59. data/ext/src/src/graphStats.c +2167 -0
  60. data/ext/src/src/graphStats.h +72 -0
  61. data/ext/src/src/graphStructures.h +52 -0
  62. data/ext/src/src/kmer.c +652 -0
  63. data/ext/src/src/kmer.h +73 -0
  64. data/ext/src/src/kmerOccurenceTable.c +236 -0
  65. data/ext/src/src/kmerOccurenceTable.h +44 -0
  66. data/ext/src/src/kseq.h +223 -0
  67. data/ext/src/src/locallyCorrectedGraph.c +557 -0
  68. data/ext/src/src/locallyCorrectedGraph.h +40 -0
  69. data/ext/src/src/passageMarker.c +677 -0
  70. data/ext/src/src/passageMarker.h +137 -0
  71. data/ext/src/src/preGraph.c +1717 -0
  72. data/ext/src/src/preGraph.h +106 -0
  73. data/ext/src/src/preGraphConstruction.c +990 -0
  74. data/ext/src/src/preGraphConstruction.h +26 -0
  75. data/ext/src/src/probe_node_finder.c +84 -0
  76. data/ext/src/src/probe_node_finder.h +6 -0
  77. data/ext/src/src/readCoherentGraph.c +557 -0
  78. data/ext/src/src/readCoherentGraph.h +30 -0
  79. data/ext/src/src/readSet.c +1734 -0
  80. data/ext/src/src/readSet.h +67 -0
  81. data/ext/src/src/readToNode.c +218 -0
  82. data/ext/src/src/readToNode.h +35 -0
  83. data/ext/src/src/recycleBin.c +199 -0
  84. data/ext/src/src/recycleBin.h +58 -0
  85. data/ext/src/src/roadMap.c +342 -0
  86. data/ext/src/src/roadMap.h +65 -0
  87. data/ext/src/src/run.c +318 -0
  88. data/ext/src/src/run.h +52 -0
  89. data/ext/src/src/run2.c +744 -0
  90. data/ext/src/src/runReadToNode.c +29 -0
  91. data/ext/src/src/scaffold.c +1876 -0
  92. data/ext/src/src/scaffold.h +64 -0
  93. data/ext/src/src/shortReadPairs.c +1243 -0
  94. data/ext/src/src/shortReadPairs.h +32 -0
  95. data/ext/src/src/splay.c +259 -0
  96. data/ext/src/src/splay.h +43 -0
  97. data/ext/src/src/splayTable.c +1315 -0
  98. data/ext/src/src/splayTable.h +31 -0
  99. data/ext/src/src/tightString.c +362 -0
  100. data/ext/src/src/tightString.h +82 -0
  101. data/ext/src/src/utility.c +199 -0
  102. data/ext/src/src/utility.h +98 -0
  103. data/ext/src/third-party/zlib-1.2.3/ChangeLog +855 -0
  104. data/ext/src/third-party/zlib-1.2.3/FAQ +339 -0
  105. data/ext/src/third-party/zlib-1.2.3/INDEX +51 -0
  106. data/ext/src/third-party/zlib-1.2.3/Makefile +154 -0
  107. data/ext/src/third-party/zlib-1.2.3/Makefile.in +154 -0
  108. data/ext/src/third-party/zlib-1.2.3/README +125 -0
  109. data/ext/src/third-party/zlib-1.2.3/adler32.c +149 -0
  110. data/ext/src/third-party/zlib-1.2.3/adler32.o +0 -0
  111. data/ext/src/third-party/zlib-1.2.3/algorithm.txt +209 -0
  112. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.pup +66 -0
  113. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.sas +65 -0
  114. data/ext/src/third-party/zlib-1.2.3/as400/bndsrc +132 -0
  115. data/ext/src/third-party/zlib-1.2.3/as400/compile.clp +123 -0
  116. data/ext/src/third-party/zlib-1.2.3/as400/readme.txt +111 -0
  117. data/ext/src/third-party/zlib-1.2.3/as400/zlib.inc +331 -0
  118. data/ext/src/third-party/zlib-1.2.3/compress.c +79 -0
  119. data/ext/src/third-party/zlib-1.2.3/compress.o +0 -0
  120. data/ext/src/third-party/zlib-1.2.3/configure +459 -0
  121. data/ext/src/third-party/zlib-1.2.3/contrib/README.contrib +71 -0
  122. data/ext/src/third-party/zlib-1.2.3/contrib/ada/buffer_demo.adb +106 -0
  123. data/ext/src/third-party/zlib-1.2.3/contrib/ada/mtest.adb +156 -0
  124. data/ext/src/third-party/zlib-1.2.3/contrib/ada/read.adb +156 -0
  125. data/ext/src/third-party/zlib-1.2.3/contrib/ada/readme.txt +65 -0
  126. data/ext/src/third-party/zlib-1.2.3/contrib/ada/test.adb +463 -0
  127. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.adb +225 -0
  128. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.ads +114 -0
  129. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.adb +141 -0
  130. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.ads +450 -0
  131. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.adb +701 -0
  132. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.ads +328 -0
  133. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.gpr +20 -0
  134. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/README.586 +43 -0
  135. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/match.S +364 -0
  136. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/README.686 +34 -0
  137. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/match.S +329 -0
  138. data/ext/src/third-party/zlib-1.2.3/contrib/blast/Makefile +8 -0
  139. data/ext/src/third-party/zlib-1.2.3/contrib/blast/README +4 -0
  140. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.c +444 -0
  141. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.h +71 -0
  142. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.pk +0 -0
  143. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.txt +1 -0
  144. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLib.pas +557 -0
  145. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLibConst.pas +11 -0
  146. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/readme.txt +76 -0
  147. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/zlibd32.mak +93 -0
  148. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.build +33 -0
  149. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.chm +0 -0
  150. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.sln +21 -0
  151. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  152. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  153. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  154. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  155. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  156. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  157. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  158. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  159. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  160. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  161. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  162. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/readme.txt +58 -0
  163. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/README +1 -0
  164. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.c +608 -0
  165. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.h +37 -0
  166. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inffix9.h +107 -0
  167. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inflate9.h +47 -0
  168. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.c +323 -0
  169. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.h +55 -0
  170. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffas86.c +1157 -0
  171. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffast.S +1368 -0
  172. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/test.cpp +24 -0
  173. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.cpp +329 -0
  174. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.h +128 -0
  175. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream.h +307 -0
  176. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream_test.cpp +25 -0
  177. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/README +35 -0
  178. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/TODO +17 -0
  179. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/test.cc +50 -0
  180. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.cc +479 -0
  181. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.h +466 -0
  182. data/ext/src/third-party/zlib-1.2.3/contrib/masm686/match.asm +413 -0
  183. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/bld_ml64.bat +2 -0
  184. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.asm +513 -0
  185. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.obj +0 -0
  186. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffas8664.c +186 -0
  187. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.asm +392 -0
  188. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.obj +0 -0
  189. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/readme.txt +28 -0
  190. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/bld_ml32.bat +2 -0
  191. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.asm +972 -0
  192. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.obj +0 -0
  193. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32c.c +62 -0
  194. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.asm +1083 -0
  195. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.obj +0 -0
  196. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/mkasm.bat +3 -0
  197. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/readme.txt +21 -0
  198. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ChangeLogUnzip +67 -0
  199. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/Makefile +25 -0
  200. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/crypt.h +132 -0
  201. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.c +177 -0
  202. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.h +75 -0
  203. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.c +270 -0
  204. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.h +21 -0
  205. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/miniunz.c +585 -0
  206. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/minizip.c +420 -0
  207. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.c +281 -0
  208. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.h +31 -0
  209. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.c +1598 -0
  210. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.h +354 -0
  211. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.c +1219 -0
  212. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.h +235 -0
  213. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/example.pas +599 -0
  214. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/readme.txt +76 -0
  215. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibd32.mak +93 -0
  216. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibpas.pas +236 -0
  217. data/ext/src/third-party/zlib-1.2.3/contrib/puff/Makefile +8 -0
  218. data/ext/src/third-party/zlib-1.2.3/contrib/puff/README +63 -0
  219. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.c +837 -0
  220. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.h +31 -0
  221. data/ext/src/third-party/zlib-1.2.3/contrib/puff/zeros.raw +0 -0
  222. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.c +275 -0
  223. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.txt +10 -0
  224. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile +14 -0
  225. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile.msc +17 -0
  226. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/untgz.c +674 -0
  227. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/readme.txt +73 -0
  228. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/miniunz.vcproj +126 -0
  229. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/minizip.vcproj +126 -0
  230. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/testzlib.vcproj +126 -0
  231. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlib.rc +32 -0
  232. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
  233. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.def +92 -0
  234. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.sln +78 -0
  235. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
  236. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/miniunz.vcproj +566 -0
  237. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/minizip.vcproj +563 -0
  238. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlib.vcproj +948 -0
  239. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
  240. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlib.rc +32 -0
  241. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
  242. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.def +92 -0
  243. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.sln +144 -0
  244. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
  245. data/ext/src/third-party/zlib-1.2.3/crc32.c +423 -0
  246. data/ext/src/third-party/zlib-1.2.3/crc32.h +441 -0
  247. data/ext/src/third-party/zlib-1.2.3/crc32.o +0 -0
  248. data/ext/src/third-party/zlib-1.2.3/deflate.c +1736 -0
  249. data/ext/src/third-party/zlib-1.2.3/deflate.h +331 -0
  250. data/ext/src/third-party/zlib-1.2.3/deflate.o +0 -0
  251. data/ext/src/third-party/zlib-1.2.3/example +0 -0
  252. data/ext/src/third-party/zlib-1.2.3/example.c +565 -0
  253. data/ext/src/third-party/zlib-1.2.3/examples/README.examples +42 -0
  254. data/ext/src/third-party/zlib-1.2.3/examples/fitblk.c +233 -0
  255. data/ext/src/third-party/zlib-1.2.3/examples/gun.c +693 -0
  256. data/ext/src/third-party/zlib-1.2.3/examples/gzappend.c +500 -0
  257. data/ext/src/third-party/zlib-1.2.3/examples/gzjoin.c +448 -0
  258. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.c +413 -0
  259. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.h +58 -0
  260. data/ext/src/third-party/zlib-1.2.3/examples/zlib_how.html +523 -0
  261. data/ext/src/third-party/zlib-1.2.3/examples/zpipe.c +191 -0
  262. data/ext/src/third-party/zlib-1.2.3/examples/zran.c +404 -0
  263. data/ext/src/third-party/zlib-1.2.3/gzio.c +1026 -0
  264. data/ext/src/third-party/zlib-1.2.3/gzio.o +0 -0
  265. data/ext/src/third-party/zlib-1.2.3/infback.c +623 -0
  266. data/ext/src/third-party/zlib-1.2.3/infback.o +0 -0
  267. data/ext/src/third-party/zlib-1.2.3/inffast.c +318 -0
  268. data/ext/src/third-party/zlib-1.2.3/inffast.h +11 -0
  269. data/ext/src/third-party/zlib-1.2.3/inffast.o +0 -0
  270. data/ext/src/third-party/zlib-1.2.3/inffixed.h +94 -0
  271. data/ext/src/third-party/zlib-1.2.3/inflate.c +1368 -0
  272. data/ext/src/third-party/zlib-1.2.3/inflate.h +115 -0
  273. data/ext/src/third-party/zlib-1.2.3/inflate.o +0 -0
  274. data/ext/src/third-party/zlib-1.2.3/inftrees.c +329 -0
  275. data/ext/src/third-party/zlib-1.2.3/inftrees.h +55 -0
  276. data/ext/src/third-party/zlib-1.2.3/inftrees.o +0 -0
  277. data/ext/src/third-party/zlib-1.2.3/libz.a +0 -0
  278. data/ext/src/third-party/zlib-1.2.3/make_vms.com +461 -0
  279. data/ext/src/third-party/zlib-1.2.3/minigzip +0 -0
  280. data/ext/src/third-party/zlib-1.2.3/minigzip.c +322 -0
  281. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.bor +109 -0
  282. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.dj2 +104 -0
  283. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.emx +69 -0
  284. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.msc +106 -0
  285. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.tc +94 -0
  286. data/ext/src/third-party/zlib-1.2.3/old/Makefile.riscos +151 -0
  287. data/ext/src/third-party/zlib-1.2.3/old/README +3 -0
  288. data/ext/src/third-party/zlib-1.2.3/old/descrip.mms +48 -0
  289. data/ext/src/third-party/zlib-1.2.3/old/os2/Makefile.os2 +136 -0
  290. data/ext/src/third-party/zlib-1.2.3/old/os2/zlib.def +51 -0
  291. data/ext/src/third-party/zlib-1.2.3/old/visual-basic.txt +160 -0
  292. data/ext/src/third-party/zlib-1.2.3/old/zlib.html +971 -0
  293. data/ext/src/third-party/zlib-1.2.3/projects/README.projects +41 -0
  294. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/README.txt +73 -0
  295. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/example.dsp +278 -0
  296. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/minigzip.dsp +278 -0
  297. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsp +609 -0
  298. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsw +59 -0
  299. data/ext/src/third-party/zlib-1.2.3/qnx/package.qpg +141 -0
  300. data/ext/src/third-party/zlib-1.2.3/trees.c +1219 -0
  301. data/ext/src/third-party/zlib-1.2.3/trees.h +128 -0
  302. data/ext/src/third-party/zlib-1.2.3/trees.o +0 -0
  303. data/ext/src/third-party/zlib-1.2.3/uncompr.c +61 -0
  304. data/ext/src/third-party/zlib-1.2.3/uncompr.o +0 -0
  305. data/ext/src/third-party/zlib-1.2.3/win32/DLL_FAQ.txt +397 -0
  306. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.bor +107 -0
  307. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.emx +69 -0
  308. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.gcc +141 -0
  309. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.msc +126 -0
  310. data/ext/src/third-party/zlib-1.2.3/win32/VisualC.txt +3 -0
  311. data/ext/src/third-party/zlib-1.2.3/win32/zlib.def +60 -0
  312. data/ext/src/third-party/zlib-1.2.3/win32/zlib1.rc +39 -0
  313. data/ext/src/third-party/zlib-1.2.3/zconf.h +332 -0
  314. data/ext/src/third-party/zlib-1.2.3/zconf.in.h +332 -0
  315. data/ext/src/third-party/zlib-1.2.3/zlib.3 +159 -0
  316. data/ext/src/third-party/zlib-1.2.3/zlib.h +1357 -0
  317. data/ext/src/third-party/zlib-1.2.3/zutil.c +318 -0
  318. data/ext/src/third-party/zlib-1.2.3/zutil.h +269 -0
  319. data/ext/src/third-party/zlib-1.2.3/zutil.o +0 -0
  320. data/lib/assembly/a_b_visualiser.rb +169 -0
  321. data/lib/assembly/acyclic_connection_finder.rb +81 -0
  322. data/lib/assembly/all_orfs.rb +615 -0
  323. data/lib/assembly/bad_format_writer.rb +46 -0
  324. data/lib/assembly/bam_probe_read_selector.rb +48 -0
  325. data/lib/assembly/bubbly_assembler.rb +842 -0
  326. data/lib/assembly/c_probe_node_finder.rb +38 -0
  327. data/lib/assembly/connection_interpreter.rb +350 -0
  328. data/lib/assembly/contig_printer.rb +400 -0
  329. data/lib/assembly/coverage_based_graph_filter.rb +68 -0
  330. data/lib/assembly/depth_first_search.rb +63 -0
  331. data/lib/assembly/dijkstra.rb +216 -0
  332. data/lib/assembly/fluffer.rb +253 -0
  333. data/lib/assembly/graph_explorer.rb +85 -0
  334. data/lib/assembly/graph_generator.rb +315 -0
  335. data/lib/assembly/height_finder.rb +355 -0
  336. data/lib/assembly/hybrid_velvet_graph.rb +70 -0
  337. data/lib/assembly/input_genome.rb +182 -0
  338. data/lib/assembly/kmer_coverage_based_path_filter.rb +65 -0
  339. data/lib/assembly/node_finder.rb +171 -0
  340. data/lib/assembly/oriented_node_trail.rb +507 -0
  341. data/lib/assembly/paired_end_assembler.rb +53 -0
  342. data/lib/assembly/paired_end_neighbour_finder.rb +176 -0
  343. data/lib/assembly/probed_graph.rb +105 -0
  344. data/lib/assembly/read_input.rb +79 -0
  345. data/lib/assembly/read_to_node.rb +37 -0
  346. data/lib/assembly/scaffold_breaker.rb +126 -0
  347. data/lib/assembly/sequence_hasher.rb +71 -0
  348. data/lib/assembly/single_coherent_paths_between_nodes.rb +533 -0
  349. data/lib/assembly/single_coherent_wanderer.rb +261 -0
  350. data/lib/assembly/single_ended_assembler.rb +441 -0
  351. data/lib/assembly/velvet_c_binding.rb +54 -0
  352. data/lib/assembly/velvet_graph_sequence_extractor.rb +123 -0
  353. data/lib/external/VERSION +1 -0
  354. data/lib/finishm/assemble.rb +224 -0
  355. data/lib/finishm/explore.rb +217 -0
  356. data/lib/finishm/finisher.rb +303 -0
  357. data/lib/finishm/fluff.rb +122 -0
  358. data/lib/finishm/gapfiller.rb +325 -0
  359. data/lib/finishm/orfs_finder.rb +88 -0
  360. data/lib/finishm/path_counter.rb +90 -0
  361. data/lib/finishm/primers.rb +425 -0
  362. data/lib/finishm/primers_check.rb +176 -0
  363. data/lib/finishm/roundup.rb +344 -0
  364. data/lib/finishm/sequence.rb +142 -0
  365. data/lib/finishm/visualise.rb +430 -0
  366. data/lib/finishm/wander.rb +270 -0
  367. data/lib/kmer_abundance_pattern.rb +79 -0
  368. data/lib/kmer_multi_abundance_file.rb +48 -0
  369. data/lib/oligo_designer.rb +88 -0
  370. data/lib/priner.rb +66 -0
  371. data/spec/acyclic_connection_finder_spec.rb +551 -0
  372. data/spec/all_orfs_spec.rb +443 -0
  373. data/spec/assemble_spec.rb +186 -0
  374. data/spec/bubbly_assembler_spec.rb +707 -0
  375. data/spec/c_node_finder_spec.rb +58 -0
  376. data/spec/connection_interpreter_spec.rb +284 -0
  377. data/spec/contig_printer_spec.rb +291 -0
  378. data/spec/coverage_based_graph_filter_spec.rb +102 -0
  379. data/spec/data/6_3e4e5e6e.1vANME.bam +0 -0
  380. data/spec/data/6_3e4e5e6e.1vANME.bam.bai +0 -0
  381. data/spec/data/acyclic_connection_finder/1/probes.fa +5 -0
  382. data/spec/data/acyclic_connection_finder/1/random1.fa +2 -0
  383. data/spec/data/acyclic_connection_finder/1/random1.sammy.fa.gz +0 -0
  384. data/spec/data/acyclic_connection_finder/1/random2.fa +2 -0
  385. data/spec/data/acyclic_connection_finder/1/random2.sammy.fa.gz +0 -0
  386. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.fa +39 -0
  387. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.slightly_changed.fa +39 -0
  388. data/spec/data/assembly/1_simple_bubble_uneven_coverage/reads_combined.fa.gz +0 -0
  389. data/spec/data/assembly_visualiser/Contig_6_1_to_250.fa.kmers31 +220 -0
  390. data/spec/data/assembly_visualiser/Contig_7_1_to_250.fa.kmers31 +220 -0
  391. data/spec/data/assembly_visualiser/Graph +46 -0
  392. data/spec/data/assembly_visualiser/start_kmers1 +2 -0
  393. data/spec/data/bands.csv +1 -0
  394. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq +0 -0
  395. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq.names +544 -0
  396. data/spec/data/c_probe_node_finder/1/Graph2 +668 -0
  397. data/spec/data/c_probe_node_finder/1/LastGraph +668 -0
  398. data/spec/data/c_probe_node_finder/1/Log +756 -0
  399. data/spec/data/c_probe_node_finder/1/PreGraph +11 -0
  400. data/spec/data/c_probe_node_finder/1/Roadmaps +2009 -0
  401. data/spec/data/c_probe_node_finder/1/contigs.fa +29 -0
  402. data/spec/data/c_probe_node_finder/1/stats.txt +6 -0
  403. data/spec/data/contig_printer/1/HOWTO_RECREATE +17 -0
  404. data/spec/data/contig_printer/1/contigs.fa +4 -0
  405. data/spec/data/contig_printer/1/seq.fa +2408 -0
  406. data/spec/data/contig_printer/1/seq.fa.svg +153 -0
  407. data/spec/data/contig_printer/1/seq.fa.velvet/Graph2 +2953 -0
  408. data/spec/data/contig_printer/1/seq.fa.velvet/LastGraph +2953 -0
  409. data/spec/data/contig_printer/1/seq.fa.velvet/Log +21 -0
  410. data/spec/data/contig_printer/1/seq.fa.velvet/PreGraph +27 -0
  411. data/spec/data/contig_printer/1/seq.fa.velvet/Roadmaps +5182 -0
  412. data/spec/data/contig_printer/1/seq.fa.velvet/Sequences +3612 -0
  413. data/spec/data/contig_printer/1/seq.fa.velvet/contigs.fa +36 -0
  414. data/spec/data/contig_printer/1/seq.fa.velvet/stats.txt +14 -0
  415. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam +0 -0
  416. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam.bai +0 -0
  417. data/spec/data/contig_printer/1/seq.node12.fa +4 -0
  418. data/spec/data/contig_printer/1/seq1_1to550.fa +2 -0
  419. data/spec/data/contig_printer/1/seq2_1to550.fa +2 -0
  420. data/spec/data/contig_printer/1/seq2_1to550.fa.fai +1 -0
  421. data/spec/data/explore/1/2seqs.sammy.fa +12004 -0
  422. data/spec/data/explore/1/HOWTO_RECREATE.txt +6 -0
  423. data/spec/data/explore/1/a.fa +2 -0
  424. data/spec/data/explore/1/seq1_and_a.fa +3 -0
  425. data/spec/data/explore/1/seq2.fa +2 -0
  426. data/spec/data/fluff/1/2seqs.sammy.fa +12004 -0
  427. data/spec/data/fluff/1/HOWTO_RECREATE.txt +5 -0
  428. data/spec/data/fluff/1/seq1.fa +2 -0
  429. data/spec/data/fluff/1/seq2.fa +2 -0
  430. data/spec/data/gapfilling/1/reads.fa +171 -0
  431. data/spec/data/gapfilling/1/trail_with_Ns.fa +5 -0
  432. data/spec/data/gapfilling/1/velvetAssembly/Graph2 +130 -0
  433. data/spec/data/gapfilling/1/velvetAssembly/LastGraph +130 -0
  434. data/spec/data/gapfilling/1/velvetAssembly/Log +199 -0
  435. data/spec/data/gapfilling/1/velvetAssembly/PreGraph +7 -0
  436. data/spec/data/gapfilling/1/velvetAssembly/Roadmaps +239 -0
  437. data/spec/data/gapfilling/1/velvetAssembly/Sequences +281 -0
  438. data/spec/data/gapfilling/1/velvetAssembly/contigs.fa +12 -0
  439. data/spec/data/gapfilling/1/velvetAssembly/stats.txt +4 -0
  440. data/spec/data/gapfilling/2/HOWTO_recreate +17 -0
  441. data/spec/data/gapfilling/2/reference.fa +2 -0
  442. data/spec/data/gapfilling/2/reference_part1.fa +4 -0
  443. data/spec/data/gapfilling/2/reference_part2.fa +4 -0
  444. data/spec/data/gapfilling/2/sammy_reads.fa.gz +0 -0
  445. data/spec/data/gapfilling/2/with_gaps.fa +4 -0
  446. data/spec/data/gapfilling/3/HOWTO_recreate +4 -0
  447. data/spec/data/gapfilling/3/reads.fa.gz +0 -0
  448. data/spec/data/gapfilling/3/reference_part1.fa +4 -0
  449. data/spec/data/gapfilling/3/reference_part2.fa +4 -0
  450. data/spec/data/gapfilling/3/with_gaps.fa +4 -0
  451. data/spec/data/gapfilling/4/HOWTO_recreate +1 -0
  452. data/spec/data/gapfilling/4/reads.fa.gz +0 -0
  453. data/spec/data/gapfilling/5/HOWTO_RECREATE +7 -0
  454. data/spec/data/gapfilling/5/answer.fna +2 -0
  455. data/spec/data/gapfilling/5/gappy.fna +2 -0
  456. data/spec/data/gapfilling/5/reads.fa +17961 -0
  457. data/spec/data/gapfilling/5/velvet51_3.5/LastGraph +8337 -0
  458. data/spec/data/gapfilling/5/velvet51_3.5/Sequences +20921 -0
  459. data/spec/data/gapfilling/6/random1.fa +28 -0
  460. data/spec/data/gapfilling/6/random2.fa +28 -0
  461. data/spec/data/gapfilling/6/random_sequence_length_2000 +0 -0
  462. data/spec/data/gapfilling/6/reads.random1.fa.gz +0 -0
  463. data/spec/data/gapfilling/6/reads.random2.fa.gz +0 -0
  464. data/spec/data/gapfilling/6/to_gapfill.fa +22 -0
  465. data/spec/data/kmer_profile_to_assembly/multiple_abundance_file1.csv +2 -0
  466. data/spec/data/kmers_count1.csv +2 -0
  467. data/spec/data/kmers_count2.csv +3 -0
  468. data/spec/data/out +3 -0
  469. data/spec/data/positive_latching_pair.fa +2 -0
  470. data/spec/data/primers.csv +4 -0
  471. data/spec/data/read_selection_by_kmer/blacklist1.txt +1 -0
  472. data/spec/data/read_selection_by_kmer/input.fasta +6 -0
  473. data/spec/data/read_selection_by_kmer/whitelist1.txt +1 -0
  474. data/spec/data/read_selection_by_kmer/whitelist2.txt +2 -0
  475. data/spec/data/read_to_node/1_a_graph/HOWTO_RECREATE.txt +2 -0
  476. data/spec/data/read_to_node/1_a_graph/LastGraph +6695 -0
  477. data/spec/data/read_to_node/1_a_graph/ReadToNode.bin +0 -0
  478. data/spec/data/read_to_node/2_no_read256_or_259/HOWTO_RECREATE.txt +3 -0
  479. data/spec/data/read_to_node/2_no_read256_or_259/LastGraph +6693 -0
  480. data/spec/data/read_to_node/2_no_read256_or_259/ReadToNode.bin +0 -0
  481. data/spec/data/read_to_node/3_no_last_read/LastGraph +6694 -0
  482. data/spec/data/read_to_node/3_no_last_read/ReadToNode.bin +0 -0
  483. data/spec/data/t/details.txt +5 -0
  484. data/spec/data/t/details.txt.srt +5 -0
  485. data/spec/data/t/location.txt +3 -0
  486. data/spec/data/t/location.txt.srt +3 -0
  487. data/spec/data/tweak/1_gap_then_unscaffolded/answer.fa +2 -0
  488. data/spec/data/tweak/1_gap_then_unscaffolded/reads.fa.gz +0 -0
  489. data/spec/data/tweak/1_gap_then_unscaffolded/scaffolds.fa +6 -0
  490. data/spec/data/tweak/2_second_genome/answer2.fa +2 -0
  491. data/spec/data/tweak/2_second_genome/reads.fa.gz +0 -0
  492. data/spec/data/tweak/3_variant/answer.fa +2 -0
  493. data/spec/data/tweak/3_variant/lesser_answer.fa +2 -0
  494. data/spec/data/tweak/3_variant/reads.fa.gz +0 -0
  495. data/spec/data/tweak/3_variant/with_gaps.fa +2 -0
  496. data/spec/data/velvet_test_trails/Assem/Graph +17 -0
  497. data/spec/data/velvet_test_trails/Assem/Graph2 +40 -0
  498. data/spec/data/velvet_test_trails/Assem/LastGraph +40 -0
  499. data/spec/data/velvet_test_trails/Assem/Log +35 -0
  500. data/spec/data/velvet_test_trails/Assem/PreGraph +9 -0
  501. data/spec/data/velvet_test_trails/Assem/Roadmaps +89 -0
  502. data/spec/data/velvet_test_trails/Assem/Sequences +50 -0
  503. data/spec/data/velvet_test_trails/Assem/a.svg +53 -0
  504. data/spec/data/velvet_test_trails/Assem/contigs.fa +15 -0
  505. data/spec/data/velvet_test_trails/Assem/stats.txt +5 -0
  506. data/spec/data/velvet_test_trails/node_fwds.fa +8 -0
  507. data/spec/data/velvet_test_trails/node_seqs.fa +9 -0
  508. data/spec/data/velvet_test_trails/nodes_fwd_rev.fa +16 -0
  509. data/spec/data/velvet_test_trails/read1.fa +2 -0
  510. data/spec/data/velvet_test_trails/reads.fa +50 -0
  511. data/spec/data/velvet_test_trails_reverse/Assem/LastGraph +17 -0
  512. data/spec/data/velvet_test_trails_reverse/Assem/a.svg +53 -0
  513. data/spec/data/velvet_test_trails_reverse/reads_reversed.fa +10 -0
  514. data/spec/data/visualise/1/LastGraph +6695 -0
  515. data/spec/data/visualise/2_paired_end/HOWTO_RECREATE.txt +10 -0
  516. data/spec/data/visualise/2_paired_end/rand1.fa +2 -0
  517. data/spec/data/visualise/2_paired_end/rand2.fa +2 -0
  518. data/spec/data/visualise/2_paired_end/with_gaps.fa +8 -0
  519. data/spec/data/visualise/2_paired_end/with_gaps.read_pairs.fa.gz +0 -0
  520. data/spec/data/wander/1/random1.fa +2 -0
  521. data/spec/data/wander/1/random1.sammy.fa +804 -0
  522. data/spec/depth_first_search_spec.rb +190 -0
  523. data/spec/dijkstra_spec.rb +143 -0
  524. data/spec/explore_spec.rb +29 -0
  525. data/spec/fluffer_spec.rb +155 -0
  526. data/spec/gapfiller_spec.rb +107 -0
  527. data/spec/graph_explorer_spec.rb +475 -0
  528. data/spec/graph_generator_spec.rb +99 -0
  529. data/spec/height_finder_spec.rb +306 -0
  530. data/spec/kmer_abundance_pattern_spec.rb +56 -0
  531. data/spec/kmer_coverage_based_path_filter_spec.rb +73 -0
  532. data/spec/kmer_profile_finder_spec.rb +38 -0
  533. data/spec/kmers_count_tabulate_spec.rb +120 -0
  534. data/spec/oriented_node_trail_spec.rb +221 -0
  535. data/spec/paired_end_neighbours_spec.rb +126 -0
  536. data/spec/paths_between_nodes_spec.rb +349 -0
  537. data/spec/priner_spec.rb +7 -0
  538. data/spec/read_input_spec.rb +23 -0
  539. data/spec/read_selection_by_kmer_spec.rb +166 -0
  540. data/spec/read_to_node_spec.rb +35 -0
  541. data/spec/roundup_spec.rb +366 -0
  542. data/spec/scaffold_breaker_spec.rb +144 -0
  543. data/spec/sequence_spec.rb +43 -0
  544. data/spec/single_coherent_paths_between_nodes_spec.rb +492 -0
  545. data/spec/single_coherent_wanderer_spec.rb +120 -0
  546. data/spec/single_ended_assembler_spec.rb +398 -0
  547. data/spec/spec_helper.rb +310 -0
  548. data/spec/velvet_graph_sequence_extractor_spec.rb +80 -0
  549. data/spec/visualise_spec.rb +105 -0
  550. data/spec/wander_spec.rb +119 -0
  551. data/spec/watch_for_changes.sh +16 -0
  552. data/validation/fasta_compare.rb +72 -0
  553. data/validation/gapfill_simulate_perfect.rb +108 -0
  554. metadata +899 -0
@@ -0,0 +1,354 @@
1
+ /* unzip.h -- IO for uncompress .zip files using zlib
2
+ Version 1.01e, February 12th, 2005
3
+
4
+ Copyright (C) 1998-2005 Gilles Vollant
5
+
6
+ This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
7
+ WinZip, InfoZip tools and compatible.
8
+
9
+ Multi volume ZipFile (span) are not supported.
10
+ Encryption compatible with pkzip 2.04g only supported
11
+ Old compressions used by old PKZip 1.x are not supported
12
+
13
+
14
+ I WAIT FEEDBACK at mail info@winimage.com
15
+ Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
16
+
17
+ Condition of use and distribution are the same than zlib :
18
+
19
+ This software is provided 'as-is', without any express or implied
20
+ warranty. In no event will the authors be held liable for any damages
21
+ arising from the use of this software.
22
+
23
+ Permission is granted to anyone to use this software for any purpose,
24
+ including commercial applications, and to alter it and redistribute it
25
+ freely, subject to the following restrictions:
26
+
27
+ 1. The origin of this software must not be misrepresented; you must not
28
+ claim that you wrote the original software. If you use this software
29
+ in a product, an acknowledgment in the product documentation would be
30
+ appreciated but is not required.
31
+ 2. Altered source versions must be plainly marked as such, and must not be
32
+ misrepresented as being the original software.
33
+ 3. This notice may not be removed or altered from any source distribution.
34
+
35
+
36
+ */
37
+
38
+ /* for more info about .ZIP format, see
39
+ http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
40
+ http://www.info-zip.org/pub/infozip/doc/
41
+ PkWare has also a specification at :
42
+ ftp://ftp.pkware.com/probdesc.zip
43
+ */
44
+
45
+ #ifndef _unz_H
46
+ #define _unz_H
47
+
48
+ #ifdef __cplusplus
49
+ extern "C" {
50
+ #endif
51
+
52
+ #ifndef _ZLIB_H
53
+ #include "zlib.h"
54
+ #endif
55
+
56
+ #ifndef _ZLIBIOAPI_H
57
+ #include "ioapi.h"
58
+ #endif
59
+
60
+ #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
61
+ /* like the STRICT of WIN32, we define a pointer that cannot be converted
62
+ from (void*) without cast */
63
+ typedef struct TagunzFile__ { int unused; } unzFile__;
64
+ typedef unzFile__ *unzFile;
65
+ #else
66
+ typedef voidp unzFile;
67
+ #endif
68
+
69
+
70
+ #define UNZ_OK (0)
71
+ #define UNZ_END_OF_LIST_OF_FILE (-100)
72
+ #define UNZ_ERRNO (Z_ERRNO)
73
+ #define UNZ_EOF (0)
74
+ #define UNZ_PARAMERROR (-102)
75
+ #define UNZ_BADZIPFILE (-103)
76
+ #define UNZ_INTERNALERROR (-104)
77
+ #define UNZ_CRCERROR (-105)
78
+
79
+ /* tm_unz contain date/time info */
80
+ typedef struct tm_unz_s
81
+ {
82
+ uInt tm_sec; /* seconds after the minute - [0,59] */
83
+ uInt tm_min; /* minutes after the hour - [0,59] */
84
+ uInt tm_hour; /* hours since midnight - [0,23] */
85
+ uInt tm_mday; /* day of the month - [1,31] */
86
+ uInt tm_mon; /* months since January - [0,11] */
87
+ uInt tm_year; /* years - [1980..2044] */
88
+ } tm_unz;
89
+
90
+ /* unz_global_info structure contain global data about the ZIPfile
91
+ These data comes from the end of central dir */
92
+ typedef struct unz_global_info_s
93
+ {
94
+ uLong number_entry; /* total number of entries in
95
+ the central dir on this disk */
96
+ uLong size_comment; /* size of the global comment of the zipfile */
97
+ } unz_global_info;
98
+
99
+
100
+ /* unz_file_info contain information about a file in the zipfile */
101
+ typedef struct unz_file_info_s
102
+ {
103
+ uLong version; /* version made by 2 bytes */
104
+ uLong version_needed; /* version needed to extract 2 bytes */
105
+ uLong flag; /* general purpose bit flag 2 bytes */
106
+ uLong compression_method; /* compression method 2 bytes */
107
+ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
108
+ uLong crc; /* crc-32 4 bytes */
109
+ uLong compressed_size; /* compressed size 4 bytes */
110
+ uLong uncompressed_size; /* uncompressed size 4 bytes */
111
+ uLong size_filename; /* filename length 2 bytes */
112
+ uLong size_file_extra; /* extra field length 2 bytes */
113
+ uLong size_file_comment; /* file comment length 2 bytes */
114
+
115
+ uLong disk_num_start; /* disk number start 2 bytes */
116
+ uLong internal_fa; /* internal file attributes 2 bytes */
117
+ uLong external_fa; /* external file attributes 4 bytes */
118
+
119
+ tm_unz tmu_date;
120
+ } unz_file_info;
121
+
122
+ extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
123
+ const char* fileName2,
124
+ int iCaseSensitivity));
125
+ /*
126
+ Compare two filename (fileName1,fileName2).
127
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
128
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
129
+ or strcasecmp)
130
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
131
+ (like 1 on Unix, 2 on Windows)
132
+ */
133
+
134
+
135
+ extern unzFile ZEXPORT unzOpen OF((const char *path));
136
+ /*
137
+ Open a Zip file. path contain the full pathname (by example,
138
+ on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
139
+ "zlib/zlib113.zip".
140
+ If the zipfile cannot be opened (file don't exist or in not valid), the
141
+ return value is NULL.
142
+ Else, the return value is a unzFile Handle, usable with other function
143
+ of this unzip package.
144
+ */
145
+
146
+ extern unzFile ZEXPORT unzOpen2 OF((const char *path,
147
+ zlib_filefunc_def* pzlib_filefunc_def));
148
+ /*
149
+ Open a Zip file, like unzOpen, but provide a set of file low level API
150
+ for read/write the zip file (see ioapi.h)
151
+ */
152
+
153
+ extern int ZEXPORT unzClose OF((unzFile file));
154
+ /*
155
+ Close a ZipFile opened with unzipOpen.
156
+ If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
157
+ these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
158
+ return UNZ_OK if there is no problem. */
159
+
160
+ extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
161
+ unz_global_info *pglobal_info));
162
+ /*
163
+ Write info about the ZipFile in the *pglobal_info structure.
164
+ No preparation of the structure is needed
165
+ return UNZ_OK if there is no problem. */
166
+
167
+
168
+ extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
169
+ char *szComment,
170
+ uLong uSizeBuf));
171
+ /*
172
+ Get the global comment string of the ZipFile, in the szComment buffer.
173
+ uSizeBuf is the size of the szComment buffer.
174
+ return the number of byte copied or an error code <0
175
+ */
176
+
177
+
178
+ /***************************************************************************/
179
+ /* Unzip package allow you browse the directory of the zipfile */
180
+
181
+ extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
182
+ /*
183
+ Set the current file of the zipfile to the first file.
184
+ return UNZ_OK if there is no problem
185
+ */
186
+
187
+ extern int ZEXPORT unzGoToNextFile OF((unzFile file));
188
+ /*
189
+ Set the current file of the zipfile to the next file.
190
+ return UNZ_OK if there is no problem
191
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
192
+ */
193
+
194
+ extern int ZEXPORT unzLocateFile OF((unzFile file,
195
+ const char *szFileName,
196
+ int iCaseSensitivity));
197
+ /*
198
+ Try locate the file szFileName in the zipfile.
199
+ For the iCaseSensitivity signification, see unzStringFileNameCompare
200
+
201
+ return value :
202
+ UNZ_OK if the file is found. It becomes the current file.
203
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
204
+ */
205
+
206
+
207
+ /* ****************************************** */
208
+ /* Ryan supplied functions */
209
+ /* unz_file_info contain information about a file in the zipfile */
210
+ typedef struct unz_file_pos_s
211
+ {
212
+ uLong pos_in_zip_directory; /* offset in zip file directory */
213
+ uLong num_of_file; /* # of file */
214
+ } unz_file_pos;
215
+
216
+ extern int ZEXPORT unzGetFilePos(
217
+ unzFile file,
218
+ unz_file_pos* file_pos);
219
+
220
+ extern int ZEXPORT unzGoToFilePos(
221
+ unzFile file,
222
+ unz_file_pos* file_pos);
223
+
224
+ /* ****************************************** */
225
+
226
+ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
227
+ unz_file_info *pfile_info,
228
+ char *szFileName,
229
+ uLong fileNameBufferSize,
230
+ void *extraField,
231
+ uLong extraFieldBufferSize,
232
+ char *szComment,
233
+ uLong commentBufferSize));
234
+ /*
235
+ Get Info about the current file
236
+ if pfile_info!=NULL, the *pfile_info structure will contain somes info about
237
+ the current file
238
+ if szFileName!=NULL, the filemane string will be copied in szFileName
239
+ (fileNameBufferSize is the size of the buffer)
240
+ if extraField!=NULL, the extra field information will be copied in extraField
241
+ (extraFieldBufferSize is the size of the buffer).
242
+ This is the Central-header version of the extra field
243
+ if szComment!=NULL, the comment string of the file will be copied in szComment
244
+ (commentBufferSize is the size of the buffer)
245
+ */
246
+
247
+ /***************************************************************************/
248
+ /* for reading the content of the current zipfile, you can open it, read data
249
+ from it, and close it (you can close it before reading all the file)
250
+ */
251
+
252
+ extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
253
+ /*
254
+ Open for reading data the current file in the zipfile.
255
+ If there is no error, the return value is UNZ_OK.
256
+ */
257
+
258
+ extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
259
+ const char* password));
260
+ /*
261
+ Open for reading data the current file in the zipfile.
262
+ password is a crypting password
263
+ If there is no error, the return value is UNZ_OK.
264
+ */
265
+
266
+ extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
267
+ int* method,
268
+ int* level,
269
+ int raw));
270
+ /*
271
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
272
+ if raw==1
273
+ *method will receive method of compression, *level will receive level of
274
+ compression
275
+ note : you can set level parameter as NULL (if you did not want known level,
276
+ but you CANNOT set method parameter as NULL
277
+ */
278
+
279
+ extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
280
+ int* method,
281
+ int* level,
282
+ int raw,
283
+ const char* password));
284
+ /*
285
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
286
+ if raw==1
287
+ *method will receive method of compression, *level will receive level of
288
+ compression
289
+ note : you can set level parameter as NULL (if you did not want known level,
290
+ but you CANNOT set method parameter as NULL
291
+ */
292
+
293
+
294
+ extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
295
+ /*
296
+ Close the file in zip opened with unzOpenCurrentFile
297
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
298
+ */
299
+
300
+ extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
301
+ voidp buf,
302
+ unsigned len));
303
+ /*
304
+ Read bytes from the current file (opened by unzOpenCurrentFile)
305
+ buf contain buffer where data must be copied
306
+ len the size of buf.
307
+
308
+ return the number of byte copied if somes bytes are copied
309
+ return 0 if the end of file was reached
310
+ return <0 with error code if there is an error
311
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
312
+ */
313
+
314
+ extern z_off_t ZEXPORT unztell OF((unzFile file));
315
+ /*
316
+ Give the current position in uncompressed data
317
+ */
318
+
319
+ extern int ZEXPORT unzeof OF((unzFile file));
320
+ /*
321
+ return 1 if the end of file was reached, 0 elsewhere
322
+ */
323
+
324
+ extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
325
+ voidp buf,
326
+ unsigned len));
327
+ /*
328
+ Read extra field from the current file (opened by unzOpenCurrentFile)
329
+ This is the local-header version of the extra field (sometimes, there is
330
+ more info in the local-header version than in the central-header)
331
+
332
+ if buf==NULL, it return the size of the local extra field
333
+
334
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
335
+ buf.
336
+ the return value is the number of bytes copied in buf, or (if <0)
337
+ the error code
338
+ */
339
+
340
+ /***************************************************************************/
341
+
342
+ /* Get the current file offset */
343
+ extern uLong ZEXPORT unzGetOffset (unzFile file);
344
+
345
+ /* Set the current file offset */
346
+ extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
347
+
348
+
349
+
350
+ #ifdef __cplusplus
351
+ }
352
+ #endif
353
+
354
+ #endif /* _unz_H */
@@ -0,0 +1,1219 @@
1
+ /* zip.c -- IO on .zip files using zlib
2
+ Version 1.01e, February 12th, 2005
3
+
4
+ 27 Dec 2004 Rolf Kalbermatter
5
+ Modification to zipOpen2 to support globalComment retrieval.
6
+
7
+ Copyright (C) 1998-2005 Gilles Vollant
8
+
9
+ Read zip.h for more info
10
+ */
11
+
12
+
13
+ #include <stdio.h>
14
+ #include <stdlib.h>
15
+ #include <string.h>
16
+ #include <time.h>
17
+ #include "zlib.h"
18
+ #include "zip.h"
19
+
20
+ #ifdef STDC
21
+ # include <stddef.h>
22
+ # include <string.h>
23
+ # include <stdlib.h>
24
+ #endif
25
+ #ifdef NO_ERRNO_H
26
+ extern int errno;
27
+ #else
28
+ # include <errno.h>
29
+ #endif
30
+
31
+
32
+ #ifndef local
33
+ # define local static
34
+ #endif
35
+ /* compile with -Dlocal if your debugger can't find static symbols */
36
+
37
+ #ifndef VERSIONMADEBY
38
+ # define VERSIONMADEBY (0x0) /* platform depedent */
39
+ #endif
40
+
41
+ #ifndef Z_BUFSIZE
42
+ #define Z_BUFSIZE (16384)
43
+ #endif
44
+
45
+ #ifndef Z_MAXFILENAMEINZIP
46
+ #define Z_MAXFILENAMEINZIP (256)
47
+ #endif
48
+
49
+ #ifndef ALLOC
50
+ # define ALLOC(size) (malloc(size))
51
+ #endif
52
+ #ifndef TRYFREE
53
+ # define TRYFREE(p) {if (p) free(p);}
54
+ #endif
55
+
56
+ /*
57
+ #define SIZECENTRALDIRITEM (0x2e)
58
+ #define SIZEZIPLOCALHEADER (0x1e)
59
+ */
60
+
61
+ /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
62
+
63
+ #ifndef SEEK_CUR
64
+ #define SEEK_CUR 1
65
+ #endif
66
+
67
+ #ifndef SEEK_END
68
+ #define SEEK_END 2
69
+ #endif
70
+
71
+ #ifndef SEEK_SET
72
+ #define SEEK_SET 0
73
+ #endif
74
+
75
+ #ifndef DEF_MEM_LEVEL
76
+ #if MAX_MEM_LEVEL >= 8
77
+ # define DEF_MEM_LEVEL 8
78
+ #else
79
+ # define DEF_MEM_LEVEL MAX_MEM_LEVEL
80
+ #endif
81
+ #endif
82
+ const char zip_copyright[] =
83
+ " zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
84
+
85
+
86
+ #define SIZEDATA_INDATABLOCK (4096-(4*4))
87
+
88
+ #define LOCALHEADERMAGIC (0x04034b50)
89
+ #define CENTRALHEADERMAGIC (0x02014b50)
90
+ #define ENDHEADERMAGIC (0x06054b50)
91
+
92
+ #define FLAG_LOCALHEADER_OFFSET (0x06)
93
+ #define CRC_LOCALHEADER_OFFSET (0x0e)
94
+
95
+ #define SIZECENTRALHEADER (0x2e) /* 46 */
96
+
97
+ typedef struct linkedlist_datablock_internal_s
98
+ {
99
+ struct linkedlist_datablock_internal_s* next_datablock;
100
+ uLong avail_in_this_block;
101
+ uLong filled_in_this_block;
102
+ uLong unused; /* for future use and alignement */
103
+ unsigned char data[SIZEDATA_INDATABLOCK];
104
+ } linkedlist_datablock_internal;
105
+
106
+ typedef struct linkedlist_data_s
107
+ {
108
+ linkedlist_datablock_internal* first_block;
109
+ linkedlist_datablock_internal* last_block;
110
+ } linkedlist_data;
111
+
112
+
113
+ typedef struct
114
+ {
115
+ z_stream stream; /* zLib stream structure for inflate */
116
+ int stream_initialised; /* 1 is stream is initialised */
117
+ uInt pos_in_buffered_data; /* last written byte in buffered_data */
118
+
119
+ uLong pos_local_header; /* offset of the local header of the file
120
+ currenty writing */
121
+ char* central_header; /* central header data for the current file */
122
+ uLong size_centralheader; /* size of the central header for cur file */
123
+ uLong flag; /* flag of the file currently writing */
124
+
125
+ int method; /* compression method of file currenty wr.*/
126
+ int raw; /* 1 for directly writing raw data */
127
+ Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
128
+ uLong dosDate;
129
+ uLong crc32;
130
+ int encrypt;
131
+ #ifndef NOCRYPT
132
+ unsigned long keys[3]; /* keys defining the pseudo-random sequence */
133
+ const unsigned long* pcrc_32_tab;
134
+ int crypt_header_size;
135
+ #endif
136
+ } curfile_info;
137
+
138
+ typedef struct
139
+ {
140
+ zlib_filefunc_def z_filefunc;
141
+ voidpf filestream; /* io structore of the zipfile */
142
+ linkedlist_data central_dir;/* datablock with central dir in construction*/
143
+ int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/
144
+ curfile_info ci; /* info on the file curretly writing */
145
+
146
+ uLong begin_pos; /* position of the beginning of the zipfile */
147
+ uLong add_position_when_writting_offset;
148
+ uLong number_entry;
149
+ #ifndef NO_ADDFILEINEXISTINGZIP
150
+ char *globalcomment;
151
+ #endif
152
+ } zip_internal;
153
+
154
+
155
+
156
+ #ifndef NOCRYPT
157
+ #define INCLUDECRYPTINGCODE_IFCRYPTALLOWED
158
+ #include "crypt.h"
159
+ #endif
160
+
161
+ local linkedlist_datablock_internal* allocate_new_datablock()
162
+ {
163
+ linkedlist_datablock_internal* ldi;
164
+ ldi = (linkedlist_datablock_internal*)
165
+ ALLOC(sizeof(linkedlist_datablock_internal));
166
+ if (ldi!=NULL)
167
+ {
168
+ ldi->next_datablock = NULL ;
169
+ ldi->filled_in_this_block = 0 ;
170
+ ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;
171
+ }
172
+ return ldi;
173
+ }
174
+
175
+ local void free_datablock(ldi)
176
+ linkedlist_datablock_internal* ldi;
177
+ {
178
+ while (ldi!=NULL)
179
+ {
180
+ linkedlist_datablock_internal* ldinext = ldi->next_datablock;
181
+ TRYFREE(ldi);
182
+ ldi = ldinext;
183
+ }
184
+ }
185
+
186
+ local void init_linkedlist(ll)
187
+ linkedlist_data* ll;
188
+ {
189
+ ll->first_block = ll->last_block = NULL;
190
+ }
191
+
192
+ local void free_linkedlist(ll)
193
+ linkedlist_data* ll;
194
+ {
195
+ free_datablock(ll->first_block);
196
+ ll->first_block = ll->last_block = NULL;
197
+ }
198
+
199
+
200
+ local int add_data_in_datablock(ll,buf,len)
201
+ linkedlist_data* ll;
202
+ const void* buf;
203
+ uLong len;
204
+ {
205
+ linkedlist_datablock_internal* ldi;
206
+ const unsigned char* from_copy;
207
+
208
+ if (ll==NULL)
209
+ return ZIP_INTERNALERROR;
210
+
211
+ if (ll->last_block == NULL)
212
+ {
213
+ ll->first_block = ll->last_block = allocate_new_datablock();
214
+ if (ll->first_block == NULL)
215
+ return ZIP_INTERNALERROR;
216
+ }
217
+
218
+ ldi = ll->last_block;
219
+ from_copy = (unsigned char*)buf;
220
+
221
+ while (len>0)
222
+ {
223
+ uInt copy_this;
224
+ uInt i;
225
+ unsigned char* to_copy;
226
+
227
+ if (ldi->avail_in_this_block==0)
228
+ {
229
+ ldi->next_datablock = allocate_new_datablock();
230
+ if (ldi->next_datablock == NULL)
231
+ return ZIP_INTERNALERROR;
232
+ ldi = ldi->next_datablock ;
233
+ ll->last_block = ldi;
234
+ }
235
+
236
+ if (ldi->avail_in_this_block < len)
237
+ copy_this = (uInt)ldi->avail_in_this_block;
238
+ else
239
+ copy_this = (uInt)len;
240
+
241
+ to_copy = &(ldi->data[ldi->filled_in_this_block]);
242
+
243
+ for (i=0;i<copy_this;i++)
244
+ *(to_copy+i)=*(from_copy+i);
245
+
246
+ ldi->filled_in_this_block += copy_this;
247
+ ldi->avail_in_this_block -= copy_this;
248
+ from_copy += copy_this ;
249
+ len -= copy_this;
250
+ }
251
+ return ZIP_OK;
252
+ }
253
+
254
+
255
+
256
+ /****************************************************************************/
257
+
258
+ #ifndef NO_ADDFILEINEXISTINGZIP
259
+ /* ===========================================================================
260
+ Inputs a long in LSB order to the given file
261
+ nbByte == 1, 2 or 4 (byte, short or long)
262
+ */
263
+
264
+ local int ziplocal_putValue OF((const zlib_filefunc_def* pzlib_filefunc_def,
265
+ voidpf filestream, uLong x, int nbByte));
266
+ local int ziplocal_putValue (pzlib_filefunc_def, filestream, x, nbByte)
267
+ const zlib_filefunc_def* pzlib_filefunc_def;
268
+ voidpf filestream;
269
+ uLong x;
270
+ int nbByte;
271
+ {
272
+ unsigned char buf[4];
273
+ int n;
274
+ for (n = 0; n < nbByte; n++)
275
+ {
276
+ buf[n] = (unsigned char)(x & 0xff);
277
+ x >>= 8;
278
+ }
279
+ if (x != 0)
280
+ { /* data overflow - hack for ZIP64 (X Roche) */
281
+ for (n = 0; n < nbByte; n++)
282
+ {
283
+ buf[n] = 0xff;
284
+ }
285
+ }
286
+
287
+ if (ZWRITE(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
288
+ return ZIP_ERRNO;
289
+ else
290
+ return ZIP_OK;
291
+ }
292
+
293
+ local void ziplocal_putValue_inmemory OF((void* dest, uLong x, int nbByte));
294
+ local void ziplocal_putValue_inmemory (dest, x, nbByte)
295
+ void* dest;
296
+ uLong x;
297
+ int nbByte;
298
+ {
299
+ unsigned char* buf=(unsigned char*)dest;
300
+ int n;
301
+ for (n = 0; n < nbByte; n++) {
302
+ buf[n] = (unsigned char)(x & 0xff);
303
+ x >>= 8;
304
+ }
305
+
306
+ if (x != 0)
307
+ { /* data overflow - hack for ZIP64 */
308
+ for (n = 0; n < nbByte; n++)
309
+ {
310
+ buf[n] = 0xff;
311
+ }
312
+ }
313
+ }
314
+
315
+ /****************************************************************************/
316
+
317
+
318
+ local uLong ziplocal_TmzDateToDosDate(ptm,dosDate)
319
+ const tm_zip* ptm;
320
+ uLong dosDate;
321
+ {
322
+ uLong year = (uLong)ptm->tm_year;
323
+ if (year>1980)
324
+ year-=1980;
325
+ else if (year>80)
326
+ year-=80;
327
+ return
328
+ (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
329
+ ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
330
+ }
331
+
332
+
333
+ /****************************************************************************/
334
+
335
+ local int ziplocal_getByte OF((
336
+ const zlib_filefunc_def* pzlib_filefunc_def,
337
+ voidpf filestream,
338
+ int *pi));
339
+
340
+ local int ziplocal_getByte(pzlib_filefunc_def,filestream,pi)
341
+ const zlib_filefunc_def* pzlib_filefunc_def;
342
+ voidpf filestream;
343
+ int *pi;
344
+ {
345
+ unsigned char c;
346
+ int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1);
347
+ if (err==1)
348
+ {
349
+ *pi = (int)c;
350
+ return ZIP_OK;
351
+ }
352
+ else
353
+ {
354
+ if (ZERROR(*pzlib_filefunc_def,filestream))
355
+ return ZIP_ERRNO;
356
+ else
357
+ return ZIP_EOF;
358
+ }
359
+ }
360
+
361
+
362
+ /* ===========================================================================
363
+ Reads a long in LSB order from the given gz_stream. Sets
364
+ */
365
+ local int ziplocal_getShort OF((
366
+ const zlib_filefunc_def* pzlib_filefunc_def,
367
+ voidpf filestream,
368
+ uLong *pX));
369
+
370
+ local int ziplocal_getShort (pzlib_filefunc_def,filestream,pX)
371
+ const zlib_filefunc_def* pzlib_filefunc_def;
372
+ voidpf filestream;
373
+ uLong *pX;
374
+ {
375
+ uLong x ;
376
+ int i;
377
+ int err;
378
+
379
+ err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
380
+ x = (uLong)i;
381
+
382
+ if (err==ZIP_OK)
383
+ err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
384
+ x += ((uLong)i)<<8;
385
+
386
+ if (err==ZIP_OK)
387
+ *pX = x;
388
+ else
389
+ *pX = 0;
390
+ return err;
391
+ }
392
+
393
+ local int ziplocal_getLong OF((
394
+ const zlib_filefunc_def* pzlib_filefunc_def,
395
+ voidpf filestream,
396
+ uLong *pX));
397
+
398
+ local int ziplocal_getLong (pzlib_filefunc_def,filestream,pX)
399
+ const zlib_filefunc_def* pzlib_filefunc_def;
400
+ voidpf filestream;
401
+ uLong *pX;
402
+ {
403
+ uLong x ;
404
+ int i;
405
+ int err;
406
+
407
+ err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
408
+ x = (uLong)i;
409
+
410
+ if (err==ZIP_OK)
411
+ err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
412
+ x += ((uLong)i)<<8;
413
+
414
+ if (err==ZIP_OK)
415
+ err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
416
+ x += ((uLong)i)<<16;
417
+
418
+ if (err==ZIP_OK)
419
+ err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i);
420
+ x += ((uLong)i)<<24;
421
+
422
+ if (err==ZIP_OK)
423
+ *pX = x;
424
+ else
425
+ *pX = 0;
426
+ return err;
427
+ }
428
+
429
+ #ifndef BUFREADCOMMENT
430
+ #define BUFREADCOMMENT (0x400)
431
+ #endif
432
+ /*
433
+ Locate the Central directory of a zipfile (at the end, just before
434
+ the global comment)
435
+ */
436
+ local uLong ziplocal_SearchCentralDir OF((
437
+ const zlib_filefunc_def* pzlib_filefunc_def,
438
+ voidpf filestream));
439
+
440
+ local uLong ziplocal_SearchCentralDir(pzlib_filefunc_def,filestream)
441
+ const zlib_filefunc_def* pzlib_filefunc_def;
442
+ voidpf filestream;
443
+ {
444
+ unsigned char* buf;
445
+ uLong uSizeFile;
446
+ uLong uBackRead;
447
+ uLong uMaxBack=0xffff; /* maximum size of global comment */
448
+ uLong uPosFound=0;
449
+
450
+ if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
451
+ return 0;
452
+
453
+
454
+ uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
455
+
456
+ if (uMaxBack>uSizeFile)
457
+ uMaxBack = uSizeFile;
458
+
459
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
460
+ if (buf==NULL)
461
+ return 0;
462
+
463
+ uBackRead = 4;
464
+ while (uBackRead<uMaxBack)
465
+ {
466
+ uLong uReadSize,uReadPos ;
467
+ int i;
468
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
469
+ uBackRead = uMaxBack;
470
+ else
471
+ uBackRead+=BUFREADCOMMENT;
472
+ uReadPos = uSizeFile-uBackRead ;
473
+
474
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
475
+ (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
476
+ if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
477
+ break;
478
+
479
+ if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
480
+ break;
481
+
482
+ for (i=(int)uReadSize-3; (i--)>0;)
483
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
484
+ ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
485
+ {
486
+ uPosFound = uReadPos+i;
487
+ break;
488
+ }
489
+
490
+ if (uPosFound!=0)
491
+ break;
492
+ }
493
+ TRYFREE(buf);
494
+ return uPosFound;
495
+ }
496
+ #endif /* !NO_ADDFILEINEXISTINGZIP*/
497
+
498
+ /************************************************************/
499
+ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc_def)
500
+ const char *pathname;
501
+ int append;
502
+ zipcharpc* globalcomment;
503
+ zlib_filefunc_def* pzlib_filefunc_def;
504
+ {
505
+ zip_internal ziinit;
506
+ zip_internal* zi;
507
+ int err=ZIP_OK;
508
+
509
+
510
+ if (pzlib_filefunc_def==NULL)
511
+ fill_fopen_filefunc(&ziinit.z_filefunc);
512
+ else
513
+ ziinit.z_filefunc = *pzlib_filefunc_def;
514
+
515
+ ziinit.filestream = (*(ziinit.z_filefunc.zopen_file))
516
+ (ziinit.z_filefunc.opaque,
517
+ pathname,
518
+ (append == APPEND_STATUS_CREATE) ?
519
+ (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
520
+ (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
521
+
522
+ if (ziinit.filestream == NULL)
523
+ return NULL;
524
+ ziinit.begin_pos = ZTELL(ziinit.z_filefunc,ziinit.filestream);
525
+ ziinit.in_opened_file_inzip = 0;
526
+ ziinit.ci.stream_initialised = 0;
527
+ ziinit.number_entry = 0;
528
+ ziinit.add_position_when_writting_offset = 0;
529
+ init_linkedlist(&(ziinit.central_dir));
530
+
531
+
532
+ zi = (zip_internal*)ALLOC(sizeof(zip_internal));
533
+ if (zi==NULL)
534
+ {
535
+ ZCLOSE(ziinit.z_filefunc,ziinit.filestream);
536
+ return NULL;
537
+ }
538
+
539
+ /* now we add file in a zipfile */
540
+ # ifndef NO_ADDFILEINEXISTINGZIP
541
+ ziinit.globalcomment = NULL;
542
+ if (append == APPEND_STATUS_ADDINZIP)
543
+ {
544
+ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
545
+
546
+ uLong size_central_dir; /* size of the central directory */
547
+ uLong offset_central_dir; /* offset of start of central directory */
548
+ uLong central_pos,uL;
549
+
550
+ uLong number_disk; /* number of the current dist, used for
551
+ spaning ZIP, unsupported, always 0*/
552
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
553
+ for spaning ZIP, unsupported, always 0*/
554
+ uLong number_entry;
555
+ uLong number_entry_CD; /* total number of entries in
556
+ the central dir
557
+ (same than number_entry on nospan) */
558
+ uLong size_comment;
559
+
560
+ central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream);
561
+ if (central_pos==0)
562
+ err=ZIP_ERRNO;
563
+
564
+ if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
565
+ central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
566
+ err=ZIP_ERRNO;
567
+
568
+ /* the signature, already checked */
569
+ if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&uL)!=ZIP_OK)
570
+ err=ZIP_ERRNO;
571
+
572
+ /* number of this disk */
573
+ if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk)!=ZIP_OK)
574
+ err=ZIP_ERRNO;
575
+
576
+ /* number of the disk with the start of the central directory */
577
+ if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk_with_CD)!=ZIP_OK)
578
+ err=ZIP_ERRNO;
579
+
580
+ /* total number of entries in the central dir on this disk */
581
+ if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry)!=ZIP_OK)
582
+ err=ZIP_ERRNO;
583
+
584
+ /* total number of entries in the central dir */
585
+ if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry_CD)!=ZIP_OK)
586
+ err=ZIP_ERRNO;
587
+
588
+ if ((number_entry_CD!=number_entry) ||
589
+ (number_disk_with_CD!=0) ||
590
+ (number_disk!=0))
591
+ err=ZIP_BADZIPFILE;
592
+
593
+ /* size of the central directory */
594
+ if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&size_central_dir)!=ZIP_OK)
595
+ err=ZIP_ERRNO;
596
+
597
+ /* offset of start of central directory with respect to the
598
+ starting disk number */
599
+ if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&offset_central_dir)!=ZIP_OK)
600
+ err=ZIP_ERRNO;
601
+
602
+ /* zipfile global comment length */
603
+ if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment)!=ZIP_OK)
604
+ err=ZIP_ERRNO;
605
+
606
+ if ((central_pos<offset_central_dir+size_central_dir) &&
607
+ (err==ZIP_OK))
608
+ err=ZIP_BADZIPFILE;
609
+
610
+ if (err!=ZIP_OK)
611
+ {
612
+ ZCLOSE(ziinit.z_filefunc, ziinit.filestream);
613
+ return NULL;
614
+ }
615
+
616
+ if (size_comment>0)
617
+ {
618
+ ziinit.globalcomment = ALLOC(size_comment+1);
619
+ if (ziinit.globalcomment)
620
+ {
621
+ size_comment = ZREAD(ziinit.z_filefunc, ziinit.filestream,ziinit.globalcomment,size_comment);
622
+ ziinit.globalcomment[size_comment]=0;
623
+ }
624
+ }
625
+
626
+ byte_before_the_zipfile = central_pos -
627
+ (offset_central_dir+size_central_dir);
628
+ ziinit.add_position_when_writting_offset = byte_before_the_zipfile;
629
+
630
+ {
631
+ uLong size_central_dir_to_read = size_central_dir;
632
+ size_t buf_size = SIZEDATA_INDATABLOCK;
633
+ void* buf_read = (void*)ALLOC(buf_size);
634
+ if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
635
+ offset_central_dir + byte_before_the_zipfile,
636
+ ZLIB_FILEFUNC_SEEK_SET) != 0)
637
+ err=ZIP_ERRNO;
638
+
639
+ while ((size_central_dir_to_read>0) && (err==ZIP_OK))
640
+ {
641
+ uLong read_this = SIZEDATA_INDATABLOCK;
642
+ if (read_this > size_central_dir_to_read)
643
+ read_this = size_central_dir_to_read;
644
+ if (ZREAD(ziinit.z_filefunc, ziinit.filestream,buf_read,read_this) != read_this)
645
+ err=ZIP_ERRNO;
646
+
647
+ if (err==ZIP_OK)
648
+ err = add_data_in_datablock(&ziinit.central_dir,buf_read,
649
+ (uLong)read_this);
650
+ size_central_dir_to_read-=read_this;
651
+ }
652
+ TRYFREE(buf_read);
653
+ }
654
+ ziinit.begin_pos = byte_before_the_zipfile;
655
+ ziinit.number_entry = number_entry_CD;
656
+
657
+ if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
658
+ offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
659
+ err=ZIP_ERRNO;
660
+ }
661
+
662
+ if (globalcomment)
663
+ {
664
+ *globalcomment = ziinit.globalcomment;
665
+ }
666
+ # endif /* !NO_ADDFILEINEXISTINGZIP*/
667
+
668
+ if (err != ZIP_OK)
669
+ {
670
+ # ifndef NO_ADDFILEINEXISTINGZIP
671
+ TRYFREE(ziinit.globalcomment);
672
+ # endif /* !NO_ADDFILEINEXISTINGZIP*/
673
+ TRYFREE(zi);
674
+ return NULL;
675
+ }
676
+ else
677
+ {
678
+ *zi = ziinit;
679
+ return (zipFile)zi;
680
+ }
681
+ }
682
+
683
+ extern zipFile ZEXPORT zipOpen (pathname, append)
684
+ const char *pathname;
685
+ int append;
686
+ {
687
+ return zipOpen2(pathname,append,NULL,NULL);
688
+ }
689
+
690
+ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
691
+ extrafield_local, size_extrafield_local,
692
+ extrafield_global, size_extrafield_global,
693
+ comment, method, level, raw,
694
+ windowBits, memLevel, strategy,
695
+ password, crcForCrypting)
696
+ zipFile file;
697
+ const char* filename;
698
+ const zip_fileinfo* zipfi;
699
+ const void* extrafield_local;
700
+ uInt size_extrafield_local;
701
+ const void* extrafield_global;
702
+ uInt size_extrafield_global;
703
+ const char* comment;
704
+ int method;
705
+ int level;
706
+ int raw;
707
+ int windowBits;
708
+ int memLevel;
709
+ int strategy;
710
+ const char* password;
711
+ uLong crcForCrypting;
712
+ {
713
+ zip_internal* zi;
714
+ uInt size_filename;
715
+ uInt size_comment;
716
+ uInt i;
717
+ int err = ZIP_OK;
718
+
719
+ # ifdef NOCRYPT
720
+ if (password != NULL)
721
+ return ZIP_PARAMERROR;
722
+ # endif
723
+
724
+ if (file == NULL)
725
+ return ZIP_PARAMERROR;
726
+ if ((method!=0) && (method!=Z_DEFLATED))
727
+ return ZIP_PARAMERROR;
728
+
729
+ zi = (zip_internal*)file;
730
+
731
+ if (zi->in_opened_file_inzip == 1)
732
+ {
733
+ err = zipCloseFileInZip (file);
734
+ if (err != ZIP_OK)
735
+ return err;
736
+ }
737
+
738
+
739
+ if (filename==NULL)
740
+ filename="-";
741
+
742
+ if (comment==NULL)
743
+ size_comment = 0;
744
+ else
745
+ size_comment = (uInt)strlen(comment);
746
+
747
+ size_filename = (uInt)strlen(filename);
748
+
749
+ if (zipfi == NULL)
750
+ zi->ci.dosDate = 0;
751
+ else
752
+ {
753
+ if (zipfi->dosDate != 0)
754
+ zi->ci.dosDate = zipfi->dosDate;
755
+ else zi->ci.dosDate = ziplocal_TmzDateToDosDate(&zipfi->tmz_date,zipfi->dosDate);
756
+ }
757
+
758
+ zi->ci.flag = 0;
759
+ if ((level==8) || (level==9))
760
+ zi->ci.flag |= 2;
761
+ if ((level==2))
762
+ zi->ci.flag |= 4;
763
+ if ((level==1))
764
+ zi->ci.flag |= 6;
765
+ if (password != NULL)
766
+ zi->ci.flag |= 1;
767
+
768
+ zi->ci.crc32 = 0;
769
+ zi->ci.method = method;
770
+ zi->ci.encrypt = 0;
771
+ zi->ci.stream_initialised = 0;
772
+ zi->ci.pos_in_buffered_data = 0;
773
+ zi->ci.raw = raw;
774
+ zi->ci.pos_local_header = ZTELL(zi->z_filefunc,zi->filestream) ;
775
+ zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename +
776
+ size_extrafield_global + size_comment;
777
+ zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader);
778
+
779
+ ziplocal_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
780
+ /* version info */
781
+ ziplocal_putValue_inmemory(zi->ci.central_header+4,(uLong)VERSIONMADEBY,2);
782
+ ziplocal_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
783
+ ziplocal_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
784
+ ziplocal_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
785
+ ziplocal_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
786
+ ziplocal_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
787
+ ziplocal_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
788
+ ziplocal_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
789
+ ziplocal_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
790
+ ziplocal_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
791
+ ziplocal_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
792
+ ziplocal_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
793
+
794
+ if (zipfi==NULL)
795
+ ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
796
+ else
797
+ ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
798
+
799
+ if (zipfi==NULL)
800
+ ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
801
+ else
802
+ ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
803
+
804
+ ziplocal_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header- zi->add_position_when_writting_offset,4);
805
+
806
+ for (i=0;i<size_filename;i++)
807
+ *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
808
+
809
+ for (i=0;i<size_extrafield_global;i++)
810
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
811
+ *(((const char*)extrafield_global)+i);
812
+
813
+ for (i=0;i<size_comment;i++)
814
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
815
+ size_extrafield_global+i) = *(comment+i);
816
+ if (zi->ci.central_header == NULL)
817
+ return ZIP_INTERNALERROR;
818
+
819
+ /* write the local header */
820
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC,4);
821
+
822
+ if (err==ZIP_OK)
823
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
824
+ if (err==ZIP_OK)
825
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
826
+
827
+ if (err==ZIP_OK)
828
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
829
+
830
+ if (err==ZIP_OK)
831
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
832
+
833
+ if (err==ZIP_OK)
834
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
835
+ if (err==ZIP_OK)
836
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
837
+ if (err==ZIP_OK)
838
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
839
+
840
+ if (err==ZIP_OK)
841
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
842
+
843
+ if (err==ZIP_OK)
844
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield_local,2);
845
+
846
+ if ((err==ZIP_OK) && (size_filename>0))
847
+ if (ZWRITE(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
848
+ err = ZIP_ERRNO;
849
+
850
+ if ((err==ZIP_OK) && (size_extrafield_local>0))
851
+ if (ZWRITE(zi->z_filefunc,zi->filestream,extrafield_local,size_extrafield_local)
852
+ !=size_extrafield_local)
853
+ err = ZIP_ERRNO;
854
+
855
+ zi->ci.stream.avail_in = (uInt)0;
856
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
857
+ zi->ci.stream.next_out = zi->ci.buffered_data;
858
+ zi->ci.stream.total_in = 0;
859
+ zi->ci.stream.total_out = 0;
860
+
861
+ if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
862
+ {
863
+ zi->ci.stream.zalloc = (alloc_func)0;
864
+ zi->ci.stream.zfree = (free_func)0;
865
+ zi->ci.stream.opaque = (voidpf)0;
866
+
867
+ if (windowBits>0)
868
+ windowBits = -windowBits;
869
+
870
+ err = deflateInit2(&zi->ci.stream, level,
871
+ Z_DEFLATED, windowBits, memLevel, strategy);
872
+
873
+ if (err==Z_OK)
874
+ zi->ci.stream_initialised = 1;
875
+ }
876
+ # ifndef NOCRYPT
877
+ zi->ci.crypt_header_size = 0;
878
+ if ((err==Z_OK) && (password != NULL))
879
+ {
880
+ unsigned char bufHead[RAND_HEAD_LEN];
881
+ unsigned int sizeHead;
882
+ zi->ci.encrypt = 1;
883
+ zi->ci.pcrc_32_tab = get_crc_table();
884
+ /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
885
+
886
+ sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
887
+ zi->ci.crypt_header_size = sizeHead;
888
+
889
+ if (ZWRITE(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
890
+ err = ZIP_ERRNO;
891
+ }
892
+ # endif
893
+
894
+ if (err==Z_OK)
895
+ zi->in_opened_file_inzip = 1;
896
+ return err;
897
+ }
898
+
899
+ extern int ZEXPORT zipOpenNewFileInZip2(file, filename, zipfi,
900
+ extrafield_local, size_extrafield_local,
901
+ extrafield_global, size_extrafield_global,
902
+ comment, method, level, raw)
903
+ zipFile file;
904
+ const char* filename;
905
+ const zip_fileinfo* zipfi;
906
+ const void* extrafield_local;
907
+ uInt size_extrafield_local;
908
+ const void* extrafield_global;
909
+ uInt size_extrafield_global;
910
+ const char* comment;
911
+ int method;
912
+ int level;
913
+ int raw;
914
+ {
915
+ return zipOpenNewFileInZip3 (file, filename, zipfi,
916
+ extrafield_local, size_extrafield_local,
917
+ extrafield_global, size_extrafield_global,
918
+ comment, method, level, raw,
919
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
920
+ NULL, 0);
921
+ }
922
+
923
+ extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
924
+ extrafield_local, size_extrafield_local,
925
+ extrafield_global, size_extrafield_global,
926
+ comment, method, level)
927
+ zipFile file;
928
+ const char* filename;
929
+ const zip_fileinfo* zipfi;
930
+ const void* extrafield_local;
931
+ uInt size_extrafield_local;
932
+ const void* extrafield_global;
933
+ uInt size_extrafield_global;
934
+ const char* comment;
935
+ int method;
936
+ int level;
937
+ {
938
+ return zipOpenNewFileInZip2 (file, filename, zipfi,
939
+ extrafield_local, size_extrafield_local,
940
+ extrafield_global, size_extrafield_global,
941
+ comment, method, level, 0);
942
+ }
943
+
944
+ local int zipFlushWriteBuffer(zi)
945
+ zip_internal* zi;
946
+ {
947
+ int err=ZIP_OK;
948
+
949
+ if (zi->ci.encrypt != 0)
950
+ {
951
+ #ifndef NOCRYPT
952
+ uInt i;
953
+ int t;
954
+ for (i=0;i<zi->ci.pos_in_buffered_data;i++)
955
+ zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab,
956
+ zi->ci.buffered_data[i],t);
957
+ #endif
958
+ }
959
+ if (ZWRITE(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data)
960
+ !=zi->ci.pos_in_buffered_data)
961
+ err = ZIP_ERRNO;
962
+ zi->ci.pos_in_buffered_data = 0;
963
+ return err;
964
+ }
965
+
966
+ extern int ZEXPORT zipWriteInFileInZip (file, buf, len)
967
+ zipFile file;
968
+ const void* buf;
969
+ unsigned len;
970
+ {
971
+ zip_internal* zi;
972
+ int err=ZIP_OK;
973
+
974
+ if (file == NULL)
975
+ return ZIP_PARAMERROR;
976
+ zi = (zip_internal*)file;
977
+
978
+ if (zi->in_opened_file_inzip == 0)
979
+ return ZIP_PARAMERROR;
980
+
981
+ zi->ci.stream.next_in = (void*)buf;
982
+ zi->ci.stream.avail_in = len;
983
+ zi->ci.crc32 = crc32(zi->ci.crc32,buf,len);
984
+
985
+ while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
986
+ {
987
+ if (zi->ci.stream.avail_out == 0)
988
+ {
989
+ if (zipFlushWriteBuffer(zi) == ZIP_ERRNO)
990
+ err = ZIP_ERRNO;
991
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
992
+ zi->ci.stream.next_out = zi->ci.buffered_data;
993
+ }
994
+
995
+
996
+ if(err != ZIP_OK)
997
+ break;
998
+
999
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1000
+ {
1001
+ uLong uTotalOutBefore = zi->ci.stream.total_out;
1002
+ err=deflate(&zi->ci.stream, Z_NO_FLUSH);
1003
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
1004
+
1005
+ }
1006
+ else
1007
+ {
1008
+ uInt copy_this,i;
1009
+ if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
1010
+ copy_this = zi->ci.stream.avail_in;
1011
+ else
1012
+ copy_this = zi->ci.stream.avail_out;
1013
+ for (i=0;i<copy_this;i++)
1014
+ *(((char*)zi->ci.stream.next_out)+i) =
1015
+ *(((const char*)zi->ci.stream.next_in)+i);
1016
+ {
1017
+ zi->ci.stream.avail_in -= copy_this;
1018
+ zi->ci.stream.avail_out-= copy_this;
1019
+ zi->ci.stream.next_in+= copy_this;
1020
+ zi->ci.stream.next_out+= copy_this;
1021
+ zi->ci.stream.total_in+= copy_this;
1022
+ zi->ci.stream.total_out+= copy_this;
1023
+ zi->ci.pos_in_buffered_data += copy_this;
1024
+ }
1025
+ }
1026
+ }
1027
+
1028
+ return err;
1029
+ }
1030
+
1031
+ extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32)
1032
+ zipFile file;
1033
+ uLong uncompressed_size;
1034
+ uLong crc32;
1035
+ {
1036
+ zip_internal* zi;
1037
+ uLong compressed_size;
1038
+ int err=ZIP_OK;
1039
+
1040
+ if (file == NULL)
1041
+ return ZIP_PARAMERROR;
1042
+ zi = (zip_internal*)file;
1043
+
1044
+ if (zi->in_opened_file_inzip == 0)
1045
+ return ZIP_PARAMERROR;
1046
+ zi->ci.stream.avail_in = 0;
1047
+
1048
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1049
+ while (err==ZIP_OK)
1050
+ {
1051
+ uLong uTotalOutBefore;
1052
+ if (zi->ci.stream.avail_out == 0)
1053
+ {
1054
+ if (zipFlushWriteBuffer(zi) == ZIP_ERRNO)
1055
+ err = ZIP_ERRNO;
1056
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
1057
+ zi->ci.stream.next_out = zi->ci.buffered_data;
1058
+ }
1059
+ uTotalOutBefore = zi->ci.stream.total_out;
1060
+ err=deflate(&zi->ci.stream, Z_FINISH);
1061
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
1062
+ }
1063
+
1064
+ if (err==Z_STREAM_END)
1065
+ err=ZIP_OK; /* this is normal */
1066
+
1067
+ if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
1068
+ if (zipFlushWriteBuffer(zi)==ZIP_ERRNO)
1069
+ err = ZIP_ERRNO;
1070
+
1071
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1072
+ {
1073
+ err=deflateEnd(&zi->ci.stream);
1074
+ zi->ci.stream_initialised = 0;
1075
+ }
1076
+
1077
+ if (!zi->ci.raw)
1078
+ {
1079
+ crc32 = (uLong)zi->ci.crc32;
1080
+ uncompressed_size = (uLong)zi->ci.stream.total_in;
1081
+ }
1082
+ compressed_size = (uLong)zi->ci.stream.total_out;
1083
+ # ifndef NOCRYPT
1084
+ compressed_size += zi->ci.crypt_header_size;
1085
+ # endif
1086
+
1087
+ ziplocal_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
1088
+ ziplocal_putValue_inmemory(zi->ci.central_header+20,
1089
+ compressed_size,4); /*compr size*/
1090
+ if (zi->ci.stream.data_type == Z_ASCII)
1091
+ ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
1092
+ ziplocal_putValue_inmemory(zi->ci.central_header+24,
1093
+ uncompressed_size,4); /*uncompr size*/
1094
+
1095
+ if (err==ZIP_OK)
1096
+ err = add_data_in_datablock(&zi->central_dir,zi->ci.central_header,
1097
+ (uLong)zi->ci.size_centralheader);
1098
+ free(zi->ci.central_header);
1099
+
1100
+ if (err==ZIP_OK)
1101
+ {
1102
+ long cur_pos_inzip = ZTELL(zi->z_filefunc,zi->filestream);
1103
+ if (ZSEEK(zi->z_filefunc,zi->filestream,
1104
+ zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
1105
+ err = ZIP_ERRNO;
1106
+
1107
+ if (err==ZIP_OK)
1108
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
1109
+
1110
+ if (err==ZIP_OK) /* compressed size, unknown */
1111
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
1112
+
1113
+ if (err==ZIP_OK) /* uncompressed size, unknown */
1114
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
1115
+
1116
+ if (ZSEEK(zi->z_filefunc,zi->filestream,
1117
+ cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
1118
+ err = ZIP_ERRNO;
1119
+ }
1120
+
1121
+ zi->number_entry ++;
1122
+ zi->in_opened_file_inzip = 0;
1123
+
1124
+ return err;
1125
+ }
1126
+
1127
+ extern int ZEXPORT zipCloseFileInZip (file)
1128
+ zipFile file;
1129
+ {
1130
+ return zipCloseFileInZipRaw (file,0,0);
1131
+ }
1132
+
1133
+ extern int ZEXPORT zipClose (file, global_comment)
1134
+ zipFile file;
1135
+ const char* global_comment;
1136
+ {
1137
+ zip_internal* zi;
1138
+ int err = 0;
1139
+ uLong size_centraldir = 0;
1140
+ uLong centraldir_pos_inzip;
1141
+ uInt size_global_comment;
1142
+ if (file == NULL)
1143
+ return ZIP_PARAMERROR;
1144
+ zi = (zip_internal*)file;
1145
+
1146
+ if (zi->in_opened_file_inzip == 1)
1147
+ {
1148
+ err = zipCloseFileInZip (file);
1149
+ }
1150
+
1151
+ #ifndef NO_ADDFILEINEXISTINGZIP
1152
+ if (global_comment==NULL)
1153
+ global_comment = zi->globalcomment;
1154
+ #endif
1155
+ if (global_comment==NULL)
1156
+ size_global_comment = 0;
1157
+ else
1158
+ size_global_comment = (uInt)strlen(global_comment);
1159
+
1160
+ centraldir_pos_inzip = ZTELL(zi->z_filefunc,zi->filestream);
1161
+ if (err==ZIP_OK)
1162
+ {
1163
+ linkedlist_datablock_internal* ldi = zi->central_dir.first_block ;
1164
+ while (ldi!=NULL)
1165
+ {
1166
+ if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
1167
+ if (ZWRITE(zi->z_filefunc,zi->filestream,
1168
+ ldi->data,ldi->filled_in_this_block)
1169
+ !=ldi->filled_in_this_block )
1170
+ err = ZIP_ERRNO;
1171
+
1172
+ size_centraldir += ldi->filled_in_this_block;
1173
+ ldi = ldi->next_datablock;
1174
+ }
1175
+ }
1176
+ free_datablock(zi->central_dir.first_block);
1177
+
1178
+ if (err==ZIP_OK) /* Magic End */
1179
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
1180
+
1181
+ if (err==ZIP_OK) /* number of this disk */
1182
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
1183
+
1184
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
1185
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
1186
+
1187
+ if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
1188
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
1189
+
1190
+ if (err==ZIP_OK) /* total number of entries in the central dir */
1191
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
1192
+
1193
+ if (err==ZIP_OK) /* size of the central directory */
1194
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
1195
+
1196
+ if (err==ZIP_OK) /* offset of start of central directory with respect to the
1197
+ starting disk number */
1198
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,
1199
+ (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
1200
+
1201
+ if (err==ZIP_OK) /* zipfile comment length */
1202
+ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
1203
+
1204
+ if ((err==ZIP_OK) && (size_global_comment>0))
1205
+ if (ZWRITE(zi->z_filefunc,zi->filestream,
1206
+ global_comment,size_global_comment) != size_global_comment)
1207
+ err = ZIP_ERRNO;
1208
+
1209
+ if (ZCLOSE(zi->z_filefunc,zi->filestream) != 0)
1210
+ if (err == ZIP_OK)
1211
+ err = ZIP_ERRNO;
1212
+
1213
+ #ifndef NO_ADDFILEINEXISTINGZIP
1214
+ TRYFREE(zi->globalcomment);
1215
+ #endif
1216
+ TRYFREE(zi);
1217
+
1218
+ return err;
1219
+ }