libarchive-static 1.0.6 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (295) hide show
  1. checksums.yaml +4 -4
  2. data/ext/extconf.rb +2 -9
  3. data/ext/libarchive-0.1.1/ext/archive_read_support_compression.c +6 -6
  4. data/ext/libarchive-0.1.1/ext/archive_read_support_compression.o +0 -0
  5. data/ext/libarchive-0.1.1/ext/archive_read_support_format.o +0 -0
  6. data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.c +1 -1
  7. data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.o +0 -0
  8. data/ext/libarchive-0.1.1/ext/archive_write_set_compression.c +5 -5
  9. data/ext/libarchive-0.1.1/ext/archive_write_set_compression.o +0 -0
  10. data/ext/libarchive-0.1.1/ext/config.h +23 -0
  11. data/ext/libarchive-0.1.1/ext/config.log +230 -0
  12. data/ext/libarchive-0.1.1/ext/config.status +671 -0
  13. data/ext/libarchive-0.1.1/ext/libarchive.c +1 -1
  14. data/ext/libarchive-0.1.1/ext/libarchive.o +0 -0
  15. data/ext/libarchive-0.1.1/ext/libarchive_archive.c +7 -7
  16. data/ext/libarchive-0.1.1/ext/libarchive_archive.o +0 -0
  17. data/ext/libarchive-0.1.1/ext/libarchive_entry.c +6 -0
  18. data/ext/libarchive-0.1.1/ext/libarchive_entry.o +0 -0
  19. data/ext/libarchive-0.1.1/ext/libarchive_reader.c +6 -4
  20. data/ext/libarchive-0.1.1/ext/libarchive_reader.o +0 -0
  21. data/ext/libarchive-0.1.1/ext/libarchive_ruby.so +0 -0
  22. data/ext/libarchive-0.1.1/ext/libarchive_win32.h +1 -1
  23. data/ext/libarchive-0.1.1/ext/libarchive_writer.c +2 -2
  24. data/ext/libarchive-0.1.1/ext/libarchive_writer.o +0 -0
  25. data/ext/libarchive-3.6.2/Makefile.in +16892 -0
  26. data/ext/libarchive-3.6.2/build/autoconf/ax_append_compile_flags.m4 +67 -0
  27. data/ext/libarchive-3.6.2/build/autoconf/ax_append_flag.m4 +71 -0
  28. data/ext/libarchive-3.6.2/build/autoconf/ax_check_compile_flag.m4 +74 -0
  29. data/ext/libarchive-3.6.2/build/autoconf/ax_require_defined.m4 +37 -0
  30. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/autoconf/check_stdcall_func.m4 +0 -0
  31. data/ext/libarchive-3.6.2/build/autoconf/compile +348 -0
  32. data/ext/libarchive-3.6.2/build/autoconf/config.guess +1754 -0
  33. data/ext/libarchive-3.6.2/build/autoconf/config.rpath +696 -0
  34. data/ext/libarchive-3.6.2/build/autoconf/config.sub +1890 -0
  35. data/ext/libarchive-3.6.2/build/autoconf/depcomp +791 -0
  36. data/ext/libarchive-3.6.2/build/autoconf/iconv.m4 +271 -0
  37. data/ext/libarchive-3.6.2/build/autoconf/install-sh +541 -0
  38. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/autoconf/la_uid_t.m4 +0 -0
  39. data/ext/libarchive-3.6.2/build/autoconf/lib-ld.m4 +109 -0
  40. data/ext/libarchive-3.6.2/build/autoconf/lib-link.m4 +777 -0
  41. data/ext/libarchive-3.6.2/build/autoconf/lib-prefix.m4 +224 -0
  42. data/ext/libarchive-3.6.2/build/autoconf/ltmain.sh +11251 -0
  43. data/ext/libarchive-3.6.2/build/autoconf/m4_ax_compile_check_sizeof.m4 +115 -0
  44. data/ext/libarchive-3.6.2/build/autoconf/missing +215 -0
  45. data/ext/libarchive-3.6.2/build/autoconf/test-driver +153 -0
  46. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/pkgconfig/libarchive.pc.in +4 -1
  47. data/ext/libarchive-3.6.2/config.h.in +1504 -0
  48. data/ext/libarchive-3.6.2/configure +25558 -0
  49. data/ext/libarchive-3.6.2/libarchive/archive.h +1212 -0
  50. data/ext/libarchive-3.6.2/libarchive/archive_acl.c +2097 -0
  51. data/ext/libarchive-3.6.2/libarchive/archive_acl_private.h +83 -0
  52. data/ext/libarchive-3.6.2/libarchive/archive_blake2.h +197 -0
  53. data/ext/libarchive-3.6.2/libarchive/archive_blake2_impl.h +161 -0
  54. data/ext/libarchive-3.6.2/libarchive/archive_blake2s_ref.c +369 -0
  55. data/ext/libarchive-3.6.2/libarchive/archive_blake2sp_ref.c +361 -0
  56. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_check_magic.c +63 -22
  57. data/ext/libarchive-3.6.2/libarchive/archive_cmdline.c +227 -0
  58. data/ext/libarchive-3.6.2/libarchive/archive_cmdline_private.h +47 -0
  59. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_crc32.h +17 -0
  60. data/ext/libarchive-3.6.2/libarchive/archive_cryptor.c +534 -0
  61. data/ext/libarchive-3.6.2/libarchive/archive_cryptor_private.h +188 -0
  62. data/ext/libarchive-3.6.2/libarchive/archive_digest.c +1505 -0
  63. data/ext/libarchive-3.6.2/libarchive/archive_digest_private.h +416 -0
  64. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_darwin.c +559 -0
  65. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_freebsd.c +712 -0
  66. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_linux.c +760 -0
  67. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_sunos.c +824 -0
  68. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_endian.h +48 -15
  69. data/ext/libarchive-3.6.2/libarchive/archive_entry.c +2149 -0
  70. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry.h +305 -106
  71. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_copy_bhfi.c +5 -4
  72. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_copy_stat.c +9 -3
  73. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_link_resolver.c +104 -62
  74. data/ext/libarchive-3.6.2/libarchive/archive_entry_locale.h +92 -0
  75. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_private.h +65 -49
  76. data/ext/libarchive-3.6.2/libarchive/archive_entry_sparse.c +156 -0
  77. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_stat.c +6 -6
  78. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_strmode.c +1 -1
  79. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_xattr.c +4 -6
  80. data/ext/libarchive-3.6.2/libarchive/archive_getdate.c +1165 -0
  81. data/ext/libarchive-3.6.2/libarchive/archive_getdate.h +39 -0
  82. data/ext/libarchive-3.6.2/libarchive/archive_hmac.c +334 -0
  83. data/ext/libarchive-3.6.2/libarchive/archive_hmac_private.h +117 -0
  84. data/ext/libarchive-3.6.2/libarchive/archive_match.c +1875 -0
  85. data/ext/libarchive-3.6.2/libarchive/archive_openssl_evp_private.h +53 -0
  86. data/ext/libarchive-3.6.2/libarchive/archive_openssl_hmac_private.h +54 -0
  87. data/ext/libarchive-3.6.2/libarchive/archive_options.c +218 -0
  88. data/ext/libarchive-3.6.2/libarchive/archive_options_private.h +51 -0
  89. data/ext/libarchive-3.6.2/libarchive/archive_pack_dev.c +337 -0
  90. data/ext/libarchive-3.6.2/libarchive/archive_pack_dev.h +49 -0
  91. data/ext/libarchive-3.6.2/libarchive/archive_pathmatch.c +463 -0
  92. data/ext/libarchive-3.6.2/libarchive/archive_pathmatch.h +52 -0
  93. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_platform.h +77 -9
  94. data/ext/libarchive-3.6.2/libarchive/archive_platform_acl.h +55 -0
  95. data/ext/libarchive-3.6.2/libarchive/archive_platform_xattr.h +47 -0
  96. data/ext/libarchive-3.6.2/libarchive/archive_ppmd7.c +1168 -0
  97. data/ext/libarchive-3.6.2/libarchive/archive_ppmd7_private.h +119 -0
  98. data/ext/libarchive-3.6.2/libarchive/archive_ppmd8.c +1287 -0
  99. data/ext/libarchive-3.6.2/libarchive/archive_ppmd8_private.h +148 -0
  100. data/ext/libarchive-3.6.2/libarchive/archive_ppmd_private.h +151 -0
  101. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_private.h +74 -18
  102. data/ext/libarchive-3.6.2/libarchive/archive_random.c +272 -0
  103. data/ext/libarchive-3.6.2/libarchive/archive_random_private.h +36 -0
  104. data/ext/libarchive-3.6.2/libarchive/archive_rb.c +709 -0
  105. data/ext/libarchive-3.6.2/libarchive/archive_rb.h +113 -0
  106. data/ext/libarchive-3.6.2/libarchive/archive_read.c +1756 -0
  107. data/ext/libarchive-3.6.2/libarchive/archive_read_add_passphrase.c +190 -0
  108. data/ext/libarchive-3.6.2/libarchive/archive_read_append_filter.c +204 -0
  109. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_data_into_fd.c +64 -18
  110. data/ext/libarchive-3.6.2/libarchive/archive_read_disk_entry_from_file.c +1086 -0
  111. data/ext/libarchive-3.6.2/libarchive/archive_read_disk_posix.c +2732 -0
  112. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_disk_private.h +40 -4
  113. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_disk_set_standard_lookup.c +21 -11
  114. data/ext/libarchive-3.6.2/libarchive/archive_read_disk_windows.c +2479 -0
  115. data/ext/libarchive-3.6.2/libarchive/archive_read_extract.c +60 -0
  116. data/ext/{libarchive-2.8.4/libarchive/archive_read_extract.c → libarchive-3.6.2/libarchive/archive_read_extract2.c} +34 -61
  117. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_fd.c +70 -49
  118. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_file.c +38 -23
  119. data/ext/libarchive-3.6.2/libarchive/archive_read_open_filename.c +586 -0
  120. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_memory.c +58 -28
  121. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_private.h +127 -59
  122. data/ext/libarchive-3.6.2/libarchive/archive_read_set_format.c +117 -0
  123. data/ext/libarchive-3.6.2/libarchive/archive_read_set_options.c +133 -0
  124. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_all.c → libarchive-3.6.2/libarchive/archive_read_support_filter_all.c} +35 -10
  125. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_by_code.c +83 -0
  126. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_bzip2.c → libarchive-3.6.2/libarchive/archive_read_support_filter_bzip2.c} +38 -26
  127. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_compress.c → libarchive-3.6.2/libarchive/archive_read_support_filter_compress.c} +52 -44
  128. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_grzip.c +112 -0
  129. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_gzip.c → libarchive-3.6.2/libarchive/archive_read_support_filter_gzip.c} +108 -37
  130. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lrzip.c +122 -0
  131. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lz4.c +742 -0
  132. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lzop.c +499 -0
  133. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_none.c → libarchive-3.6.2/libarchive/archive_read_support_filter_none.c} +15 -3
  134. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_program.c → libarchive-3.6.2/libarchive/archive_read_support_filter_program.c} +114 -77
  135. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_rpm.c → libarchive-3.6.2/libarchive/archive_read_support_filter_rpm.c} +31 -31
  136. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_uu.c → libarchive-3.6.2/libarchive/archive_read_support_filter_uu.c} +141 -85
  137. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_xz.c → libarchive-3.6.2/libarchive/archive_read_support_filter_xz.c} +369 -284
  138. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_zstd.c +297 -0
  139. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_7zip.c +3900 -0
  140. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_all.c +89 -0
  141. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_ar.c +126 -72
  142. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_by_code.c +92 -0
  143. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_cab.c +3228 -0
  144. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_cpio.c +1104 -0
  145. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_empty.c +14 -11
  146. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_iso9660.c +990 -541
  147. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_lha.c +2916 -0
  148. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_mtree.c +2150 -0
  149. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_rar.c +3797 -0
  150. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_rar5.c +4251 -0
  151. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_raw.c +38 -31
  152. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_tar.c +1157 -629
  153. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_warc.c +848 -0
  154. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_xar.c +439 -258
  155. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_zip.c +4270 -0
  156. data/ext/libarchive-3.6.2/libarchive/archive_string.c +4240 -0
  157. data/ext/libarchive-3.6.2/libarchive/archive_string.h +243 -0
  158. data/ext/libarchive-3.6.2/libarchive/archive_string_composition.h +2292 -0
  159. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_string_sprintf.c +44 -16
  160. data/ext/libarchive-3.6.2/libarchive/archive_util.c +655 -0
  161. data/ext/libarchive-3.6.2/libarchive/archive_version_details.c +151 -0
  162. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_virtual.c +85 -16
  163. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_windows.c +214 -541
  164. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_windows.h +74 -106
  165. data/ext/libarchive-3.6.2/libarchive/archive_write.c +828 -0
  166. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter.c +72 -0
  167. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_b64encode.c +304 -0
  168. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_by_name.c +77 -0
  169. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_bzip2.c +401 -0
  170. data/ext/{libarchive-2.8.4/libarchive/archive_write_set_compression_compress.c → libarchive-3.6.2/libarchive/archive_write_add_filter_compress.c} +86 -131
  171. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_grzip.c +135 -0
  172. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_gzip.c +442 -0
  173. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lrzip.c +197 -0
  174. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lz4.c +700 -0
  175. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lzop.c +478 -0
  176. data/ext/{libarchive-2.8.4/libarchive/archive_read_support_format_all.c → libarchive-3.6.2/libarchive/archive_write_add_filter_none.c} +11 -11
  177. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_program.c +391 -0
  178. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_uuencode.c +295 -0
  179. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_xz.c +545 -0
  180. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_zstd.c +418 -0
  181. data/ext/libarchive-3.6.2/libarchive/archive_write_disk_posix.c +4711 -0
  182. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_disk_private.h +9 -2
  183. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_disk_set_standard_lookup.c +30 -29
  184. data/ext/libarchive-3.6.2/libarchive/archive_write_disk_windows.c +2842 -0
  185. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_fd.c +15 -10
  186. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_file.c +15 -9
  187. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_filename.c +128 -20
  188. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_memory.c +7 -18
  189. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_private.h +72 -29
  190. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format.c +56 -3
  191. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_7zip.c +2322 -0
  192. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_ar.c +54 -34
  193. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_by_name.c +20 -2
  194. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio.c +11 -0
  195. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_binary.c +610 -0
  196. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_newc.c +457 -0
  197. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_odc.c +500 -0
  198. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_filter_by_ext.c +142 -0
  199. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_gnutar.c +755 -0
  200. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_iso9660.c +8165 -0
  201. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_mtree.c +2217 -0
  202. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_pax.c +1049 -387
  203. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_private.h +42 -0
  204. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_raw.c +125 -0
  205. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_shar.c +62 -47
  206. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_ustar.c +279 -108
  207. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_v7tar.c +638 -0
  208. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_warc.c +453 -0
  209. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_xar.c +3259 -0
  210. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_zip.c +1704 -0
  211. data/ext/libarchive-3.6.2/libarchive/archive_write_set_options.c +130 -0
  212. data/ext/libarchive-3.6.2/libarchive/archive_write_set_passphrase.c +95 -0
  213. data/ext/libarchive-3.6.2/libarchive/archive_xxhash.h +48 -0
  214. data/ext/libarchive-3.6.2/libarchive/config_freebsd.h +271 -0
  215. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/filter_fork.h +10 -5
  216. data/ext/{libarchive-2.8.4/libarchive/filter_fork.c → libarchive-3.6.2/libarchive/filter_fork_posix.c} +98 -19
  217. data/ext/libarchive-3.6.2/libarchive/filter_fork_windows.c +236 -0
  218. data/ext/libarchive-3.6.2/libarchive/xxhash.c +525 -0
  219. data/ext/libarchive-static-makefile +144 -80
  220. data/ext/libarchive-static-wrapper-makefile +1 -1
  221. data/ext/zlib-1.2.13/Makefile.in +404 -0
  222. data/ext/{zlib-1.2.5 → zlib-1.2.13}/adler32.c +51 -34
  223. data/ext/{zlib-1.2.5 → zlib-1.2.13}/compress.c +27 -21
  224. data/ext/zlib-1.2.13/configure +922 -0
  225. data/ext/zlib-1.2.13/crc32.c +1125 -0
  226. data/ext/zlib-1.2.13/crc32.h +9446 -0
  227. data/ext/{zlib-1.2.5 → zlib-1.2.13}/deflate.c +842 -459
  228. data/ext/{zlib-1.2.5 → zlib-1.2.13}/deflate.h +37 -33
  229. data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzclose.c +0 -0
  230. data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzguts.h +103 -16
  231. data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzlib.c +155 -53
  232. data/ext/zlib-1.2.13/gzread.c +650 -0
  233. data/ext/zlib-1.2.13/gzwrite.c +677 -0
  234. data/ext/{zlib-1.2.5 → zlib-1.2.13}/infback.c +24 -12
  235. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffast.c +49 -66
  236. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffast.h +0 -0
  237. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffixed.h +3 -3
  238. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inflate.c +209 -94
  239. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inflate.h +9 -5
  240. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inftrees.c +24 -50
  241. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inftrees.h +1 -1
  242. data/ext/{zlib-1.2.5 → zlib-1.2.13}/trees.c +135 -198
  243. data/ext/{zlib-1.2.5 → zlib-1.2.13}/trees.h +0 -0
  244. data/ext/zlib-1.2.13/uncompr.c +93 -0
  245. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zconf.h +182 -63
  246. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zlib.h +617 -295
  247. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zutil.c +50 -41
  248. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zutil.h +83 -82
  249. metadata +241 -133
  250. data/ext/libarchive-0.1.1/libarchive.c +0 -1762
  251. data/ext/libarchive-2.8.4/Makefile.in +0 -7076
  252. data/ext/libarchive-2.8.4/build/autoconf/compile +0 -143
  253. data/ext/libarchive-2.8.4/build/autoconf/config.guess +0 -1502
  254. data/ext/libarchive-2.8.4/build/autoconf/config.sub +0 -1708
  255. data/ext/libarchive-2.8.4/build/autoconf/depcomp +0 -630
  256. data/ext/libarchive-2.8.4/build/autoconf/install-sh +0 -291
  257. data/ext/libarchive-2.8.4/build/autoconf/ltmain.sh +0 -8406
  258. data/ext/libarchive-2.8.4/build/autoconf/missing +0 -376
  259. data/ext/libarchive-2.8.4/config.h.in +0 -772
  260. data/ext/libarchive-2.8.4/configure +0 -17916
  261. data/ext/libarchive-2.8.4/libarchive/archive.h +0 -741
  262. data/ext/libarchive-2.8.4/libarchive/archive_entry.c +0 -2202
  263. data/ext/libarchive-2.8.4/libarchive/archive_hash.h +0 -281
  264. data/ext/libarchive-2.8.4/libarchive/archive_read.c +0 -1249
  265. data/ext/libarchive-2.8.4/libarchive/archive_read_disk.c +0 -198
  266. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_entry_from_file.c +0 -570
  267. data/ext/libarchive-2.8.4/libarchive/archive_read_open_filename.c +0 -272
  268. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_cpio.c +0 -777
  269. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_mtree.c +0 -1304
  270. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_zip.c +0 -903
  271. data/ext/libarchive-2.8.4/libarchive/archive_string.c +0 -453
  272. data/ext/libarchive-2.8.4/libarchive/archive_string.h +0 -148
  273. data/ext/libarchive-2.8.4/libarchive/archive_util.c +0 -391
  274. data/ext/libarchive-2.8.4/libarchive/archive_write.c +0 -466
  275. data/ext/libarchive-2.8.4/libarchive/archive_write_disk.c +0 -2628
  276. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_bzip2.c +0 -408
  277. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_gzip.c +0 -477
  278. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_none.c +0 -257
  279. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_program.c +0 -347
  280. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_xz.c +0 -438
  281. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio.c +0 -344
  282. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio_newc.c +0 -295
  283. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_mtree.c +0 -1050
  284. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_zip.c +0 -667
  285. data/ext/libarchive-2.8.4/libarchive/config_freebsd.h +0 -154
  286. data/ext/libarchive-2.8.4/libarchive/filter_fork_windows.c +0 -113
  287. data/ext/zlib-1.2.5/Makefile.in +0 -257
  288. data/ext/zlib-1.2.5/configure +0 -596
  289. data/ext/zlib-1.2.5/crc32.c +0 -442
  290. data/ext/zlib-1.2.5/crc32.h +0 -441
  291. data/ext/zlib-1.2.5/example.c +0 -565
  292. data/ext/zlib-1.2.5/gzread.c +0 -653
  293. data/ext/zlib-1.2.5/gzwrite.c +0 -531
  294. data/ext/zlib-1.2.5/minigzip.c +0 -440
  295. data/ext/zlib-1.2.5/uncompr.c +0 -59
@@ -1,1249 +0,0 @@
1
- /*-
2
- * Copyright (c) 2003-2007 Tim Kientzle
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions
7
- * are met:
8
- * 1. Redistributions of source code must retain the above copyright
9
- * notice, this list of conditions and the following disclaimer.
10
- * 2. Redistributions in binary form must reproduce the above copyright
11
- * notice, this list of conditions and the following disclaimer in the
12
- * documentation and/or other materials provided with the distribution.
13
- *
14
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
- */
25
-
26
- /*
27
- * This file contains the "essential" portions of the read API, that
28
- * is, stuff that will probably always be used by any client that
29
- * actually needs to read an archive. Optional pieces have been, as
30
- * far as possible, separated out into separate files to avoid
31
- * needlessly bloating statically-linked clients.
32
- */
33
-
34
- #include "archive_platform.h"
35
- __FBSDID("$FreeBSD: head/lib/libarchive/archive_read.c 201157 2009-12-29 05:30:23Z kientzle $");
36
-
37
- #ifdef HAVE_ERRNO_H
38
- #include <errno.h>
39
- #endif
40
- #include <stdio.h>
41
- #ifdef HAVE_STDLIB_H
42
- #include <stdlib.h>
43
- #endif
44
- #ifdef HAVE_STRING_H
45
- #include <string.h>
46
- #endif
47
- #ifdef HAVE_UNISTD_H
48
- #include <unistd.h>
49
- #endif
50
-
51
- #include "archive.h"
52
- #include "archive_entry.h"
53
- #include "archive_private.h"
54
- #include "archive_read_private.h"
55
-
56
- #define minimum(a, b) (a < b ? a : b)
57
-
58
- static int build_stream(struct archive_read *);
59
- static int choose_format(struct archive_read *);
60
- static int cleanup_filters(struct archive_read *);
61
- static struct archive_vtable *archive_read_vtable(void);
62
- static int _archive_read_close(struct archive *);
63
- static int _archive_read_finish(struct archive *);
64
-
65
- static struct archive_vtable *
66
- archive_read_vtable(void)
67
- {
68
- static struct archive_vtable av;
69
- static int inited = 0;
70
-
71
- if (!inited) {
72
- av.archive_finish = _archive_read_finish;
73
- av.archive_close = _archive_read_close;
74
- }
75
- return (&av);
76
- }
77
-
78
- /*
79
- * Allocate, initialize and return a struct archive object.
80
- */
81
- struct archive *
82
- archive_read_new(void)
83
- {
84
- struct archive_read *a;
85
-
86
- a = (struct archive_read *)malloc(sizeof(*a));
87
- if (a == NULL)
88
- return (NULL);
89
- memset(a, 0, sizeof(*a));
90
- a->archive.magic = ARCHIVE_READ_MAGIC;
91
-
92
- a->archive.state = ARCHIVE_STATE_NEW;
93
- a->entry = archive_entry_new();
94
- a->archive.vtable = archive_read_vtable();
95
-
96
- return (&a->archive);
97
- }
98
-
99
- /*
100
- * Record the do-not-extract-to file. This belongs in archive_read_extract.c.
101
- */
102
- void
103
- archive_read_extract_set_skip_file(struct archive *_a, dev_t d, ino_t i)
104
- {
105
- struct archive_read *a = (struct archive_read *)_a;
106
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_ANY,
107
- "archive_read_extract_set_skip_file");
108
- a->skip_file_dev = d;
109
- a->skip_file_ino = i;
110
- }
111
-
112
- /*
113
- * Set read options for the format.
114
- */
115
- int
116
- archive_read_set_format_options(struct archive *_a, const char *s)
117
- {
118
- struct archive_read *a;
119
- struct archive_format_descriptor *format;
120
- char key[64], val[64];
121
- char *valp;
122
- size_t i;
123
- int len, r;
124
-
125
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
126
- "archive_read_set_format_options");
127
-
128
- if (s == NULL || *s == '\0')
129
- return (ARCHIVE_OK);
130
- a = (struct archive_read *)_a;
131
- __archive_check_magic(&a->archive, ARCHIVE_READ_MAGIC,
132
- ARCHIVE_STATE_NEW, "archive_read_set_format_options");
133
- len = 0;
134
- for (i = 0; i < sizeof(a->formats)/sizeof(a->formats[0]); i++) {
135
- format = &a->formats[i];
136
- if (format == NULL || format->options == NULL ||
137
- format->name == NULL)
138
- /* This format does not support option. */
139
- continue;
140
-
141
- while ((len = __archive_parse_options(s, format->name,
142
- sizeof(key), key, sizeof(val), val)) > 0) {
143
- valp = val[0] == '\0' ? NULL : val;
144
- a->format = format;
145
- r = format->options(a, key, valp);
146
- a->format = NULL;
147
- if (r == ARCHIVE_FATAL)
148
- return (r);
149
- s += len;
150
- }
151
- }
152
- if (len < 0) {
153
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
154
- "Illegal format options.");
155
- return (ARCHIVE_WARN);
156
- }
157
- return (ARCHIVE_OK);
158
- }
159
-
160
- /*
161
- * Set read options for the filter.
162
- */
163
- int
164
- archive_read_set_filter_options(struct archive *_a, const char *s)
165
- {
166
- struct archive_read *a;
167
- struct archive_read_filter *filter;
168
- struct archive_read_filter_bidder *bidder;
169
- char key[64], val[64];
170
- int len, r;
171
-
172
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
173
- "archive_read_set_filter_options");
174
-
175
- if (s == NULL || *s == '\0')
176
- return (ARCHIVE_OK);
177
- a = (struct archive_read *)_a;
178
- __archive_check_magic(&a->archive, ARCHIVE_READ_MAGIC,
179
- ARCHIVE_STATE_NEW, "archive_read_set_filter_options");
180
- len = 0;
181
- for (filter = a->filter; filter != NULL; filter = filter->upstream) {
182
- bidder = filter->bidder;
183
- if (bidder == NULL)
184
- continue;
185
- if (bidder->options == NULL)
186
- /* This bidder does not support option */
187
- continue;
188
- while ((len = __archive_parse_options(s, filter->name,
189
- sizeof(key), key, sizeof(val), val)) > 0) {
190
- if (val[0] == '\0')
191
- r = bidder->options(bidder, key, NULL);
192
- else
193
- r = bidder->options(bidder, key, val);
194
- if (r == ARCHIVE_FATAL)
195
- return (r);
196
- s += len;
197
- }
198
- }
199
- if (len < 0) {
200
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
201
- "Illegal format options.");
202
- return (ARCHIVE_WARN);
203
- }
204
- return (ARCHIVE_OK);
205
- }
206
-
207
- /*
208
- * Set read options for the format and the filter.
209
- */
210
- int
211
- archive_read_set_options(struct archive *_a, const char *s)
212
- {
213
- int r;
214
-
215
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
216
- "archive_read_set_options");
217
- archive_clear_error(_a);
218
-
219
- r = archive_read_set_format_options(_a, s);
220
- if (r != ARCHIVE_OK)
221
- return (r);
222
- r = archive_read_set_filter_options(_a, s);
223
- if (r != ARCHIVE_OK)
224
- return (r);
225
- return (ARCHIVE_OK);
226
- }
227
-
228
- /*
229
- * Open the archive
230
- */
231
- int
232
- archive_read_open(struct archive *a, void *client_data,
233
- archive_open_callback *client_opener, archive_read_callback *client_reader,
234
- archive_close_callback *client_closer)
235
- {
236
- /* Old archive_read_open() is just a thin shell around
237
- * archive_read_open2. */
238
- return archive_read_open2(a, client_data, client_opener,
239
- client_reader, NULL, client_closer);
240
- }
241
-
242
- static ssize_t
243
- client_read_proxy(struct archive_read_filter *self, const void **buff)
244
- {
245
- ssize_t r;
246
- r = (self->archive->client.reader)(&self->archive->archive,
247
- self->data, buff);
248
- self->archive->archive.raw_position += r;
249
- return (r);
250
- }
251
-
252
- static int64_t
253
- client_skip_proxy(struct archive_read_filter *self, int64_t request)
254
- {
255
- int64_t ask, get, total;
256
- /* Limit our maximum seek request to 1GB on platforms
257
- * with 32-bit off_t (such as Windows). */
258
- int64_t skip_limit = ((int64_t)1) << (sizeof(off_t) * 8 - 2);
259
-
260
- if (self->archive->client.skipper == NULL)
261
- return (0);
262
- total = 0;
263
- for (;;) {
264
- ask = request;
265
- if (ask > skip_limit)
266
- ask = skip_limit;
267
- get = (self->archive->client.skipper)(&self->archive->archive,
268
- self->data, ask);
269
- if (get == 0)
270
- return (total);
271
- request -= get;
272
- self->archive->archive.raw_position += get;
273
- total += get;
274
- }
275
- }
276
-
277
- static int
278
- client_close_proxy(struct archive_read_filter *self)
279
- {
280
- int r = ARCHIVE_OK;
281
-
282
- if (self->archive->client.closer != NULL)
283
- r = (self->archive->client.closer)((struct archive *)self->archive,
284
- self->data);
285
- self->data = NULL;
286
- return (r);
287
- }
288
-
289
-
290
- int
291
- archive_read_open2(struct archive *_a, void *client_data,
292
- archive_open_callback *client_opener,
293
- archive_read_callback *client_reader,
294
- archive_skip_callback *client_skipper,
295
- archive_close_callback *client_closer)
296
- {
297
- struct archive_read *a = (struct archive_read *)_a;
298
- struct archive_read_filter *filter;
299
- int e;
300
-
301
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
302
- "archive_read_open");
303
- archive_clear_error(&a->archive);
304
-
305
- if (client_reader == NULL)
306
- __archive_errx(1,
307
- "No reader function provided to archive_read_open");
308
-
309
- /* Open data source. */
310
- if (client_opener != NULL) {
311
- e =(client_opener)(&a->archive, client_data);
312
- if (e != 0) {
313
- /* If the open failed, call the closer to clean up. */
314
- if (client_closer)
315
- (client_closer)(&a->archive, client_data);
316
- return (e);
317
- }
318
- }
319
-
320
- /* Save the client functions and mock up the initial source. */
321
- a->client.reader = client_reader;
322
- a->client.skipper = client_skipper;
323
- a->client.closer = client_closer;
324
-
325
- filter = calloc(1, sizeof(*filter));
326
- if (filter == NULL)
327
- return (ARCHIVE_FATAL);
328
- filter->bidder = NULL;
329
- filter->upstream = NULL;
330
- filter->archive = a;
331
- filter->data = client_data;
332
- filter->read = client_read_proxy;
333
- filter->skip = client_skip_proxy;
334
- filter->close = client_close_proxy;
335
- filter->name = "none";
336
- filter->code = ARCHIVE_COMPRESSION_NONE;
337
- a->filter = filter;
338
-
339
- /* Build out the input pipeline. */
340
- e = build_stream(a);
341
- if (e == ARCHIVE_OK)
342
- a->archive.state = ARCHIVE_STATE_HEADER;
343
-
344
- return (e);
345
- }
346
-
347
- /*
348
- * Allow each registered stream transform to bid on whether
349
- * it wants to handle this stream. Repeat until we've finished
350
- * building the pipeline.
351
- */
352
- static int
353
- build_stream(struct archive_read *a)
354
- {
355
- int number_bidders, i, bid, best_bid;
356
- struct archive_read_filter_bidder *bidder, *best_bidder;
357
- struct archive_read_filter *filter;
358
- ssize_t avail;
359
- int r;
360
-
361
- for (;;) {
362
- number_bidders = sizeof(a->bidders) / sizeof(a->bidders[0]);
363
-
364
- best_bid = 0;
365
- best_bidder = NULL;
366
-
367
- bidder = a->bidders;
368
- for (i = 0; i < number_bidders; i++, bidder++) {
369
- if (bidder->bid != NULL) {
370
- bid = (bidder->bid)(bidder, a->filter);
371
- if (bid > best_bid) {
372
- best_bid = bid;
373
- best_bidder = bidder;
374
- }
375
- }
376
- }
377
-
378
- /* If no bidder, we're done. */
379
- if (best_bidder == NULL) {
380
- a->archive.compression_name = a->filter->name;
381
- a->archive.compression_code = a->filter->code;
382
- return (ARCHIVE_OK);
383
- }
384
-
385
- filter
386
- = (struct archive_read_filter *)calloc(1, sizeof(*filter));
387
- if (filter == NULL)
388
- return (ARCHIVE_FATAL);
389
- filter->bidder = best_bidder;
390
- filter->archive = a;
391
- filter->upstream = a->filter;
392
- r = (best_bidder->init)(filter);
393
- if (r != ARCHIVE_OK) {
394
- free(filter);
395
- return (r);
396
- }
397
- a->filter = filter;
398
- /* Verify the filter by asking it for some data. */
399
- __archive_read_filter_ahead(filter, 1, &avail);
400
- if (avail < 0) {
401
- cleanup_filters(a);
402
- return (ARCHIVE_FATAL);
403
- }
404
- }
405
- }
406
-
407
- /*
408
- * Read header of next entry.
409
- */
410
- int
411
- archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
412
- {
413
- struct archive_read *a = (struct archive_read *)_a;
414
- int slot, ret;
415
-
416
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC,
417
- ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
418
- "archive_read_next_header");
419
-
420
- ++_a->file_count;
421
- archive_entry_clear(entry);
422
- archive_clear_error(&a->archive);
423
-
424
- /*
425
- * If no format has yet been chosen, choose one.
426
- */
427
- if (a->format == NULL) {
428
- slot = choose_format(a);
429
- if (slot < 0) {
430
- a->archive.state = ARCHIVE_STATE_FATAL;
431
- return (ARCHIVE_FATAL);
432
- }
433
- a->format = &(a->formats[slot]);
434
- }
435
-
436
- /*
437
- * If client didn't consume entire data, skip any remainder
438
- * (This is especially important for GNU incremental directories.)
439
- */
440
- if (a->archive.state == ARCHIVE_STATE_DATA) {
441
- ret = archive_read_data_skip(&a->archive);
442
- if (ret == ARCHIVE_EOF) {
443
- archive_set_error(&a->archive, EIO, "Premature end-of-file.");
444
- a->archive.state = ARCHIVE_STATE_FATAL;
445
- return (ARCHIVE_FATAL);
446
- }
447
- if (ret != ARCHIVE_OK)
448
- return (ret);
449
- }
450
-
451
- /* Record start-of-header. */
452
- a->header_position = a->archive.file_position;
453
-
454
- ret = (a->format->read_header)(a, entry);
455
-
456
- /*
457
- * EOF and FATAL are persistent at this layer. By
458
- * modifying the state, we guarantee that future calls to
459
- * read a header or read data will fail.
460
- */
461
- switch (ret) {
462
- case ARCHIVE_EOF:
463
- a->archive.state = ARCHIVE_STATE_EOF;
464
- break;
465
- case ARCHIVE_OK:
466
- a->archive.state = ARCHIVE_STATE_DATA;
467
- break;
468
- case ARCHIVE_WARN:
469
- a->archive.state = ARCHIVE_STATE_DATA;
470
- break;
471
- case ARCHIVE_RETRY:
472
- break;
473
- case ARCHIVE_FATAL:
474
- a->archive.state = ARCHIVE_STATE_FATAL;
475
- break;
476
- }
477
-
478
- a->read_data_output_offset = 0;
479
- a->read_data_remaining = 0;
480
- return (ret);
481
- }
482
-
483
- int
484
- archive_read_next_header(struct archive *_a, struct archive_entry **entryp)
485
- {
486
- int ret;
487
- struct archive_read *a = (struct archive_read *)_a;
488
- *entryp = NULL;
489
- ret = archive_read_next_header2(_a, a->entry);
490
- *entryp = a->entry;
491
- return ret;
492
- }
493
-
494
- /*
495
- * Allow each registered format to bid on whether it wants to handle
496
- * the next entry. Return index of winning bidder.
497
- */
498
- static int
499
- choose_format(struct archive_read *a)
500
- {
501
- int slots;
502
- int i;
503
- int bid, best_bid;
504
- int best_bid_slot;
505
-
506
- slots = sizeof(a->formats) / sizeof(a->formats[0]);
507
- best_bid = -1;
508
- best_bid_slot = -1;
509
-
510
- /* Set up a->format and a->pformat_data for convenience of bidders. */
511
- a->format = &(a->formats[0]);
512
- for (i = 0; i < slots; i++, a->format++) {
513
- if (a->format->bid) {
514
- bid = (a->format->bid)(a);
515
- if (bid == ARCHIVE_FATAL)
516
- return (ARCHIVE_FATAL);
517
- if ((bid > best_bid) || (best_bid_slot < 0)) {
518
- best_bid = bid;
519
- best_bid_slot = i;
520
- }
521
- }
522
- }
523
-
524
- /*
525
- * There were no bidders; this is a serious programmer error
526
- * and demands a quick and definitive abort.
527
- */
528
- if (best_bid_slot < 0)
529
- __archive_errx(1, "No formats were registered; you must "
530
- "invoke at least one archive_read_support_format_XXX "
531
- "function in order to successfully read an archive.");
532
-
533
- /*
534
- * There were bidders, but no non-zero bids; this means we
535
- * can't support this stream.
536
- */
537
- if (best_bid < 1) {
538
- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
539
- "Unrecognized archive format");
540
- return (ARCHIVE_FATAL);
541
- }
542
-
543
- return (best_bid_slot);
544
- }
545
-
546
- /*
547
- * Return the file offset (within the uncompressed data stream) where
548
- * the last header started.
549
- */
550
- int64_t
551
- archive_read_header_position(struct archive *_a)
552
- {
553
- struct archive_read *a = (struct archive_read *)_a;
554
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC,
555
- ARCHIVE_STATE_ANY, "archive_read_header_position");
556
- return (a->header_position);
557
- }
558
-
559
- /*
560
- * Read data from an archive entry, using a read(2)-style interface.
561
- * This is a convenience routine that just calls
562
- * archive_read_data_block and copies the results into the client
563
- * buffer, filling any gaps with zero bytes. Clients using this
564
- * API can be completely ignorant of sparse-file issues; sparse files
565
- * will simply be padded with nulls.
566
- *
567
- * DO NOT intermingle calls to this function and archive_read_data_block
568
- * to read a single entry body.
569
- */
570
- ssize_t
571
- archive_read_data(struct archive *_a, void *buff, size_t s)
572
- {
573
- struct archive_read *a = (struct archive_read *)_a;
574
- char *dest;
575
- const void *read_buf;
576
- size_t bytes_read;
577
- size_t len;
578
- int r;
579
-
580
- bytes_read = 0;
581
- dest = (char *)buff;
582
-
583
- while (s > 0) {
584
- if (a->read_data_remaining == 0) {
585
- read_buf = a->read_data_block;
586
- r = archive_read_data_block(&a->archive, &read_buf,
587
- &a->read_data_remaining, &a->read_data_offset);
588
- a->read_data_block = read_buf;
589
- if (r == ARCHIVE_EOF)
590
- return (bytes_read);
591
- /*
592
- * Error codes are all negative, so the status
593
- * return here cannot be confused with a valid
594
- * byte count. (ARCHIVE_OK is zero.)
595
- */
596
- if (r < ARCHIVE_OK)
597
- return (r);
598
- }
599
-
600
- if (a->read_data_offset < a->read_data_output_offset) {
601
- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
602
- "Encountered out-of-order sparse blocks");
603
- return (ARCHIVE_RETRY);
604
- }
605
-
606
- /* Compute the amount of zero padding needed. */
607
- if (a->read_data_output_offset + (off_t)s <
608
- a->read_data_offset) {
609
- len = s;
610
- } else if (a->read_data_output_offset <
611
- a->read_data_offset) {
612
- len = a->read_data_offset -
613
- a->read_data_output_offset;
614
- } else
615
- len = 0;
616
-
617
- /* Add zeroes. */
618
- memset(dest, 0, len);
619
- s -= len;
620
- a->read_data_output_offset += len;
621
- dest += len;
622
- bytes_read += len;
623
-
624
- /* Copy data if there is any space left. */
625
- if (s > 0) {
626
- len = a->read_data_remaining;
627
- if (len > s)
628
- len = s;
629
- memcpy(dest, a->read_data_block, len);
630
- s -= len;
631
- a->read_data_block += len;
632
- a->read_data_remaining -= len;
633
- a->read_data_output_offset += len;
634
- a->read_data_offset += len;
635
- dest += len;
636
- bytes_read += len;
637
- }
638
- }
639
- return (bytes_read);
640
- }
641
-
642
- #if ARCHIVE_API_VERSION < 3
643
- /*
644
- * Obsolete function provided for compatibility only. Note that the API
645
- * of this function doesn't allow the caller to detect if the remaining
646
- * data from the archive entry is shorter than the buffer provided, or
647
- * even if an error occurred while reading data.
648
- */
649
- int
650
- archive_read_data_into_buffer(struct archive *a, void *d, ssize_t len)
651
- {
652
-
653
- archive_read_data(a, d, len);
654
- return (ARCHIVE_OK);
655
- }
656
- #endif
657
-
658
- /*
659
- * Skip over all remaining data in this entry.
660
- */
661
- int
662
- archive_read_data_skip(struct archive *_a)
663
- {
664
- struct archive_read *a = (struct archive_read *)_a;
665
- int r;
666
- const void *buff;
667
- size_t size;
668
- off_t offset;
669
-
670
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_DATA,
671
- "archive_read_data_skip");
672
-
673
- if (a->format->read_data_skip != NULL)
674
- r = (a->format->read_data_skip)(a);
675
- else {
676
- while ((r = archive_read_data_block(&a->archive,
677
- &buff, &size, &offset))
678
- == ARCHIVE_OK)
679
- ;
680
- }
681
-
682
- if (r == ARCHIVE_EOF)
683
- r = ARCHIVE_OK;
684
-
685
- a->archive.state = ARCHIVE_STATE_HEADER;
686
- return (r);
687
- }
688
-
689
- /*
690
- * Read the next block of entry data from the archive.
691
- * This is a zero-copy interface; the client receives a pointer,
692
- * size, and file offset of the next available block of data.
693
- *
694
- * Returns ARCHIVE_OK if the operation is successful, ARCHIVE_EOF if
695
- * the end of entry is encountered.
696
- */
697
- int
698
- archive_read_data_block(struct archive *_a,
699
- const void **buff, size_t *size, off_t *offset)
700
- {
701
- struct archive_read *a = (struct archive_read *)_a;
702
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_DATA,
703
- "archive_read_data_block");
704
-
705
- if (a->format->read_data == NULL) {
706
- archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
707
- "Internal error: "
708
- "No format_read_data_block function registered");
709
- return (ARCHIVE_FATAL);
710
- }
711
-
712
- return (a->format->read_data)(a, buff, size, offset);
713
- }
714
-
715
- /*
716
- * Close the file and release most resources.
717
- *
718
- * Be careful: client might just call read_new and then read_finish.
719
- * Don't assume we actually read anything or performed any non-trivial
720
- * initialization.
721
- */
722
- static int
723
- _archive_read_close(struct archive *_a)
724
- {
725
- struct archive_read *a = (struct archive_read *)_a;
726
- int r = ARCHIVE_OK, r1 = ARCHIVE_OK;
727
- size_t i, n;
728
-
729
- __archive_check_magic(&a->archive, ARCHIVE_READ_MAGIC,
730
- ARCHIVE_STATE_ANY, "archive_read_close");
731
- archive_clear_error(&a->archive);
732
- a->archive.state = ARCHIVE_STATE_CLOSED;
733
-
734
-
735
- /* Call cleanup functions registered by optional components. */
736
- if (a->cleanup_archive_extract != NULL)
737
- r = (a->cleanup_archive_extract)(a);
738
-
739
- /* TODO: Clean up the formatters. */
740
-
741
- /* Release the filter objects. */
742
- r1 = cleanup_filters(a);
743
- if (r1 < r)
744
- r = r1;
745
-
746
- /* Release the bidder objects. */
747
- n = sizeof(a->bidders)/sizeof(a->bidders[0]);
748
- for (i = 0; i < n; i++) {
749
- if (a->bidders[i].free != NULL) {
750
- r1 = (a->bidders[i].free)(&a->bidders[i]);
751
- if (r1 < r)
752
- r = r1;
753
- }
754
- }
755
-
756
- return (r);
757
- }
758
-
759
- static int
760
- cleanup_filters(struct archive_read *a)
761
- {
762
- int r = ARCHIVE_OK;
763
- /* Clean up the filter pipeline. */
764
- while (a->filter != NULL) {
765
- struct archive_read_filter *t = a->filter->upstream;
766
- if (a->filter->close != NULL) {
767
- int r1 = (a->filter->close)(a->filter);
768
- if (r1 < r)
769
- r = r1;
770
- }
771
- free(a->filter->buffer);
772
- free(a->filter);
773
- a->filter = t;
774
- }
775
- return r;
776
- }
777
-
778
- /*
779
- * Release memory and other resources.
780
- */
781
- static int
782
- _archive_read_finish(struct archive *_a)
783
- {
784
- struct archive_read *a = (struct archive_read *)_a;
785
- int i;
786
- int slots;
787
- int r = ARCHIVE_OK;
788
-
789
- __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_ANY,
790
- "archive_read_finish");
791
- if (a->archive.state != ARCHIVE_STATE_CLOSED)
792
- r = archive_read_close(&a->archive);
793
-
794
- /* Cleanup format-specific data. */
795
- slots = sizeof(a->formats) / sizeof(a->formats[0]);
796
- for (i = 0; i < slots; i++) {
797
- a->format = &(a->formats[i]);
798
- if (a->formats[i].cleanup)
799
- (a->formats[i].cleanup)(a);
800
- }
801
-
802
- archive_string_free(&a->archive.error_string);
803
- if (a->entry)
804
- archive_entry_free(a->entry);
805
- a->archive.magic = 0;
806
- free(a);
807
- #if ARCHIVE_API_VERSION > 1
808
- return (r);
809
- #endif
810
- }
811
-
812
- /*
813
- * Used internally by read format handlers to register their bid and
814
- * initialization functions.
815
- */
816
- int
817
- __archive_read_register_format(struct archive_read *a,
818
- void *format_data,
819
- const char *name,
820
- int (*bid)(struct archive_read *),
821
- int (*options)(struct archive_read *, const char *, const char *),
822
- int (*read_header)(struct archive_read *, struct archive_entry *),
823
- int (*read_data)(struct archive_read *, const void **, size_t *, off_t *),
824
- int (*read_data_skip)(struct archive_read *),
825
- int (*cleanup)(struct archive_read *))
826
- {
827
- int i, number_slots;
828
-
829
- __archive_check_magic(&a->archive,
830
- ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
831
- "__archive_read_register_format");
832
-
833
- number_slots = sizeof(a->formats) / sizeof(a->formats[0]);
834
-
835
- for (i = 0; i < number_slots; i++) {
836
- if (a->formats[i].bid == bid)
837
- return (ARCHIVE_WARN); /* We've already installed */
838
- if (a->formats[i].bid == NULL) {
839
- a->formats[i].bid = bid;
840
- a->formats[i].options = options;
841
- a->formats[i].read_header = read_header;
842
- a->formats[i].read_data = read_data;
843
- a->formats[i].read_data_skip = read_data_skip;
844
- a->formats[i].cleanup = cleanup;
845
- a->formats[i].data = format_data;
846
- a->formats[i].name = name;
847
- return (ARCHIVE_OK);
848
- }
849
- }
850
-
851
- __archive_errx(1, "Not enough slots for format registration");
852
- return (ARCHIVE_FATAL); /* Never actually called. */
853
- }
854
-
855
- /*
856
- * Used internally by decompression routines to register their bid and
857
- * initialization functions.
858
- */
859
- struct archive_read_filter_bidder *
860
- __archive_read_get_bidder(struct archive_read *a)
861
- {
862
- int i, number_slots;
863
-
864
- __archive_check_magic(&a->archive,
865
- ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
866
- "__archive_read_get_bidder");
867
-
868
- number_slots = sizeof(a->bidders) / sizeof(a->bidders[0]);
869
-
870
- for (i = 0; i < number_slots; i++) {
871
- if (a->bidders[i].bid == NULL) {
872
- memset(a->bidders + i, 0, sizeof(a->bidders[0]));
873
- return (a->bidders + i);
874
- }
875
- }
876
-
877
- __archive_errx(1, "Not enough slots for compression registration");
878
- return (NULL); /* Never actually executed. */
879
- }
880
-
881
- /*
882
- * The next three functions comprise the peek/consume internal I/O
883
- * system used by archive format readers. This system allows fairly
884
- * flexible read-ahead and allows the I/O code to operate in a
885
- * zero-copy manner most of the time.
886
- *
887
- * In the ideal case, filters generate blocks of data
888
- * and __archive_read_ahead() just returns pointers directly into
889
- * those blocks. Then __archive_read_consume() just bumps those
890
- * pointers. Only if your request would span blocks does the I/O
891
- * layer use a copy buffer to provide you with a contiguous block of
892
- * data. The __archive_read_skip() is an optimization; it scans ahead
893
- * very quickly (it usually translates into a seek() operation if
894
- * you're reading uncompressed disk files).
895
- *
896
- * A couple of useful idioms:
897
- * * "I just want some data." Ask for 1 byte and pay attention to
898
- * the "number of bytes available" from __archive_read_ahead().
899
- * You can consume more than you asked for; you just can't consume
900
- * more than is available. If you consume everything that's
901
- * immediately available, the next read_ahead() call will pull
902
- * the next block.
903
- * * "I want to output a large block of data." As above, ask for 1 byte,
904
- * emit all that's available (up to whatever limit you have), then
905
- * repeat until you're done.
906
- * * "I want to peek ahead by a large amount." Ask for 4k or so, then
907
- * double and repeat until you get an error or have enough. Note
908
- * that the I/O layer will likely end up expanding its copy buffer
909
- * to fit your request, so use this technique cautiously. This
910
- * technique is used, for example, by some of the format tasting
911
- * code that has uncertain look-ahead needs.
912
- *
913
- * TODO: Someday, provide a more generic __archive_read_seek() for
914
- * those cases where it's useful. This is tricky because there are lots
915
- * of cases where seek() is not available (reading gzip data from a
916
- * network socket, for instance), so there needs to be a good way to
917
- * communicate whether seek() is available and users of that interface
918
- * need to use non-seeking strategies whenever seek() is not available.
919
- */
920
-
921
- /*
922
- * Looks ahead in the input stream:
923
- * * If 'avail' pointer is provided, that returns number of bytes available
924
- * in the current buffer, which may be much larger than requested.
925
- * * If end-of-file, *avail gets set to zero.
926
- * * If error, *avail gets error code.
927
- * * If request can be met, returns pointer to data, returns NULL
928
- * if request is not met.
929
- *
930
- * Note: If you just want "some data", ask for 1 byte and pay attention
931
- * to *avail, which will have the actual amount available. If you
932
- * know exactly how many bytes you need, just ask for that and treat
933
- * a NULL return as an error.
934
- *
935
- * Important: This does NOT move the file pointer. See
936
- * __archive_read_consume() below.
937
- */
938
-
939
- /*
940
- * This is tricky. We need to provide our clients with pointers to
941
- * contiguous blocks of memory but we want to avoid copying whenever
942
- * possible.
943
- *
944
- * Mostly, this code returns pointers directly into the block of data
945
- * provided by the client_read routine. It can do this unless the
946
- * request would split across blocks. In that case, we have to copy
947
- * into an internal buffer to combine reads.
948
- */
949
- const void *
950
- __archive_read_ahead(struct archive_read *a, size_t min, ssize_t *avail)
951
- {
952
- return (__archive_read_filter_ahead(a->filter, min, avail));
953
- }
954
-
955
- const void *
956
- __archive_read_filter_ahead(struct archive_read_filter *filter,
957
- size_t min, ssize_t *avail)
958
- {
959
- ssize_t bytes_read;
960
- size_t tocopy;
961
-
962
- if (filter->fatal) {
963
- if (avail)
964
- *avail = ARCHIVE_FATAL;
965
- return (NULL);
966
- }
967
-
968
- /*
969
- * Keep pulling more data until we can satisfy the request.
970
- */
971
- for (;;) {
972
-
973
- /*
974
- * If we can satisfy from the copy buffer (and the
975
- * copy buffer isn't empty), we're done. In particular,
976
- * note that min == 0 is a perfectly well-defined
977
- * request.
978
- */
979
- if (filter->avail >= min && filter->avail > 0) {
980
- if (avail != NULL)
981
- *avail = filter->avail;
982
- return (filter->next);
983
- }
984
-
985
- /*
986
- * We can satisfy directly from client buffer if everything
987
- * currently in the copy buffer is still in the client buffer.
988
- */
989
- if (filter->client_total >= filter->client_avail + filter->avail
990
- && filter->client_avail + filter->avail >= min) {
991
- /* "Roll back" to client buffer. */
992
- filter->client_avail += filter->avail;
993
- filter->client_next -= filter->avail;
994
- /* Copy buffer is now empty. */
995
- filter->avail = 0;
996
- filter->next = filter->buffer;
997
- /* Return data from client buffer. */
998
- if (avail != NULL)
999
- *avail = filter->client_avail;
1000
- return (filter->client_next);
1001
- }
1002
-
1003
- /* Move data forward in copy buffer if necessary. */
1004
- if (filter->next > filter->buffer &&
1005
- filter->next + min > filter->buffer + filter->buffer_size) {
1006
- if (filter->avail > 0)
1007
- memmove(filter->buffer, filter->next, filter->avail);
1008
- filter->next = filter->buffer;
1009
- }
1010
-
1011
- /* If we've used up the client data, get more. */
1012
- if (filter->client_avail <= 0) {
1013
- if (filter->end_of_file) {
1014
- if (avail != NULL)
1015
- *avail = 0;
1016
- return (NULL);
1017
- }
1018
- bytes_read = (filter->read)(filter,
1019
- &filter->client_buff);
1020
- if (bytes_read < 0) { /* Read error. */
1021
- filter->client_total = filter->client_avail = 0;
1022
- filter->client_next = filter->client_buff = NULL;
1023
- filter->fatal = 1;
1024
- if (avail != NULL)
1025
- *avail = ARCHIVE_FATAL;
1026
- return (NULL);
1027
- }
1028
- if (bytes_read == 0) { /* Premature end-of-file. */
1029
- filter->client_total = filter->client_avail = 0;
1030
- filter->client_next = filter->client_buff = NULL;
1031
- filter->end_of_file = 1;
1032
- /* Return whatever we do have. */
1033
- if (avail != NULL)
1034
- *avail = filter->avail;
1035
- return (NULL);
1036
- }
1037
- filter->position += bytes_read;
1038
- filter->client_total = bytes_read;
1039
- filter->client_avail = filter->client_total;
1040
- filter->client_next = filter->client_buff;
1041
- }
1042
- else
1043
- {
1044
- /*
1045
- * We can't satisfy the request from the copy
1046
- * buffer or the existing client data, so we
1047
- * need to copy more client data over to the
1048
- * copy buffer.
1049
- */
1050
-
1051
- /* Ensure the buffer is big enough. */
1052
- if (min > filter->buffer_size) {
1053
- size_t s, t;
1054
- char *p;
1055
-
1056
- /* Double the buffer; watch for overflow. */
1057
- s = t = filter->buffer_size;
1058
- if (s == 0)
1059
- s = min;
1060
- while (s < min) {
1061
- t *= 2;
1062
- if (t <= s) { /* Integer overflow! */
1063
- archive_set_error(
1064
- &filter->archive->archive,
1065
- ENOMEM,
1066
- "Unable to allocate copy buffer");
1067
- filter->fatal = 1;
1068
- if (avail != NULL)
1069
- *avail = ARCHIVE_FATAL;
1070
- return (NULL);
1071
- }
1072
- s = t;
1073
- }
1074
- /* Now s >= min, so allocate a new buffer. */
1075
- p = (char *)malloc(s);
1076
- if (p == NULL) {
1077
- archive_set_error(
1078
- &filter->archive->archive,
1079
- ENOMEM,
1080
- "Unable to allocate copy buffer");
1081
- filter->fatal = 1;
1082
- if (avail != NULL)
1083
- *avail = ARCHIVE_FATAL;
1084
- return (NULL);
1085
- }
1086
- /* Move data into newly-enlarged buffer. */
1087
- if (filter->avail > 0)
1088
- memmove(p, filter->next, filter->avail);
1089
- free(filter->buffer);
1090
- filter->next = filter->buffer = p;
1091
- filter->buffer_size = s;
1092
- }
1093
-
1094
- /* We can add client data to copy buffer. */
1095
- /* First estimate: copy to fill rest of buffer. */
1096
- tocopy = (filter->buffer + filter->buffer_size)
1097
- - (filter->next + filter->avail);
1098
- /* Don't waste time buffering more than we need to. */
1099
- if (tocopy + filter->avail > min)
1100
- tocopy = min - filter->avail;
1101
- /* Don't copy more than is available. */
1102
- if (tocopy > filter->client_avail)
1103
- tocopy = filter->client_avail;
1104
-
1105
- memcpy(filter->next + filter->avail, filter->client_next,
1106
- tocopy);
1107
- /* Remove this data from client buffer. */
1108
- filter->client_next += tocopy;
1109
- filter->client_avail -= tocopy;
1110
- /* add it to copy buffer. */
1111
- filter->avail += tocopy;
1112
- }
1113
- }
1114
- }
1115
-
1116
- /*
1117
- * Move the file pointer forward. This should be called after
1118
- * __archive_read_ahead() returns data to you. Don't try to move
1119
- * ahead by more than the amount of data available according to
1120
- * __archive_read_ahead().
1121
- */
1122
- /*
1123
- * Mark the appropriate data as used. Note that the request here will
1124
- * often be much smaller than the size of the previous read_ahead
1125
- * request.
1126
- */
1127
- ssize_t
1128
- __archive_read_consume(struct archive_read *a, size_t request)
1129
- {
1130
- ssize_t r;
1131
- r = __archive_read_filter_consume(a->filter, request);
1132
- a->archive.file_position += r;
1133
- return (r);
1134
- }
1135
-
1136
- ssize_t
1137
- __archive_read_filter_consume(struct archive_read_filter * filter,
1138
- size_t request)
1139
- {
1140
- if (filter->avail > 0) {
1141
- /* Read came from copy buffer. */
1142
- filter->next += request;
1143
- filter->avail -= request;
1144
- } else {
1145
- /* Read came from client buffer. */
1146
- filter->client_next += request;
1147
- filter->client_avail -= request;
1148
- }
1149
- return (request);
1150
- }
1151
-
1152
- /*
1153
- * Move the file pointer ahead by an arbitrary amount. If you're
1154
- * reading uncompressed data from a disk file, this will actually
1155
- * translate into a seek() operation. Even in cases where seek()
1156
- * isn't feasible, this at least pushes the read-and-discard loop
1157
- * down closer to the data source.
1158
- */
1159
- int64_t
1160
- __archive_read_skip(struct archive_read *a, int64_t request)
1161
- {
1162
- int64_t skipped = __archive_read_skip_lenient(a, request);
1163
- if (skipped == request)
1164
- return (skipped);
1165
- /* We hit EOF before we satisfied the skip request. */
1166
- if (skipped < 0) // Map error code to 0 for error message below.
1167
- skipped = 0;
1168
- archive_set_error(&a->archive,
1169
- ARCHIVE_ERRNO_MISC,
1170
- "Truncated input file (needed %jd bytes, only %jd available)",
1171
- (intmax_t)request, (intmax_t)skipped);
1172
- return (ARCHIVE_FATAL);
1173
- }
1174
-
1175
- int64_t
1176
- __archive_read_skip_lenient(struct archive_read *a, int64_t request)
1177
- {
1178
- int64_t skipped = __archive_read_filter_skip(a->filter, request);
1179
- if (skipped > 0)
1180
- a->archive.file_position += skipped;
1181
- return (skipped);
1182
- }
1183
-
1184
- int64_t
1185
- __archive_read_filter_skip(struct archive_read_filter *filter, int64_t request)
1186
- {
1187
- int64_t bytes_skipped, total_bytes_skipped = 0;
1188
- size_t min;
1189
-
1190
- if (filter->fatal)
1191
- return (-1);
1192
- /*
1193
- * If there is data in the buffers already, use that first.
1194
- */
1195
- if (filter->avail > 0) {
1196
- min = minimum(request, (off_t)filter->avail);
1197
- bytes_skipped = __archive_read_filter_consume(filter, min);
1198
- request -= bytes_skipped;
1199
- total_bytes_skipped += bytes_skipped;
1200
- }
1201
- if (filter->client_avail > 0) {
1202
- min = minimum(request, (int64_t)filter->client_avail);
1203
- bytes_skipped = __archive_read_filter_consume(filter, min);
1204
- request -= bytes_skipped;
1205
- total_bytes_skipped += bytes_skipped;
1206
- }
1207
- if (request == 0)
1208
- return (total_bytes_skipped);
1209
- /*
1210
- * If a client_skipper was provided, try that first.
1211
- */
1212
- #if ARCHIVE_API_VERSION < 2
1213
- if ((filter->skip != NULL) && (request < SSIZE_MAX)) {
1214
- #else
1215
- if (filter->skip != NULL) {
1216
- #endif
1217
- bytes_skipped = (filter->skip)(filter, request);
1218
- if (bytes_skipped < 0) { /* error */
1219
- filter->client_total = filter->client_avail = 0;
1220
- filter->client_next = filter->client_buff = NULL;
1221
- filter->fatal = 1;
1222
- return (bytes_skipped);
1223
- }
1224
- total_bytes_skipped += bytes_skipped;
1225
- request -= bytes_skipped;
1226
- filter->client_next = filter->client_buff;
1227
- filter->client_avail = filter->client_total = 0;
1228
- }
1229
- /*
1230
- * Note that client_skipper will usually not satisfy the
1231
- * full request (due to low-level blocking concerns),
1232
- * so even if client_skipper is provided, we may still
1233
- * have to use ordinary reads to finish out the request.
1234
- */
1235
- while (request > 0) {
1236
- ssize_t bytes_read;
1237
- (void)__archive_read_filter_ahead(filter, 1, &bytes_read);
1238
- if (bytes_read < 0)
1239
- return (bytes_read);
1240
- if (bytes_read == 0) {
1241
- return (total_bytes_skipped);
1242
- }
1243
- min = (size_t)(minimum(bytes_read, request));
1244
- bytes_read = __archive_read_filter_consume(filter, min);
1245
- total_bytes_skipped += bytes_read;
1246
- request -= bytes_read;
1247
- }
1248
- return (total_bytes_skipped);
1249
- }