libarchive-static 1.0.5 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. checksums.yaml +5 -5
  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_internal.h +0 -1
  20. data/ext/libarchive-0.1.1/ext/libarchive_reader.c +6 -4
  21. data/ext/libarchive-0.1.1/ext/libarchive_reader.o +0 -0
  22. data/ext/libarchive-0.1.1/ext/libarchive_ruby.so +0 -0
  23. data/ext/libarchive-0.1.1/ext/libarchive_win32.h +1 -1
  24. data/ext/libarchive-0.1.1/ext/libarchive_writer.c +2 -2
  25. data/ext/libarchive-0.1.1/ext/libarchive_writer.o +0 -0
  26. data/ext/libarchive-3.6.2/Makefile.in +16892 -0
  27. data/ext/libarchive-3.6.2/build/autoconf/ax_append_compile_flags.m4 +67 -0
  28. data/ext/libarchive-3.6.2/build/autoconf/ax_append_flag.m4 +71 -0
  29. data/ext/libarchive-3.6.2/build/autoconf/ax_check_compile_flag.m4 +74 -0
  30. data/ext/libarchive-3.6.2/build/autoconf/ax_require_defined.m4 +37 -0
  31. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/autoconf/check_stdcall_func.m4 +0 -0
  32. data/ext/libarchive-3.6.2/build/autoconf/compile +348 -0
  33. data/ext/libarchive-3.6.2/build/autoconf/config.guess +1754 -0
  34. data/ext/libarchive-3.6.2/build/autoconf/config.rpath +696 -0
  35. data/ext/libarchive-3.6.2/build/autoconf/config.sub +1890 -0
  36. data/ext/libarchive-3.6.2/build/autoconf/depcomp +791 -0
  37. data/ext/libarchive-3.6.2/build/autoconf/iconv.m4 +271 -0
  38. data/ext/libarchive-3.6.2/build/autoconf/install-sh +541 -0
  39. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/autoconf/la_uid_t.m4 +0 -0
  40. data/ext/libarchive-3.6.2/build/autoconf/lib-ld.m4 +109 -0
  41. data/ext/libarchive-3.6.2/build/autoconf/lib-link.m4 +777 -0
  42. data/ext/libarchive-3.6.2/build/autoconf/lib-prefix.m4 +224 -0
  43. data/ext/libarchive-3.6.2/build/autoconf/ltmain.sh +11251 -0
  44. data/ext/libarchive-3.6.2/build/autoconf/m4_ax_compile_check_sizeof.m4 +115 -0
  45. data/ext/libarchive-3.6.2/build/autoconf/missing +215 -0
  46. data/ext/libarchive-3.6.2/build/autoconf/test-driver +153 -0
  47. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/pkgconfig/libarchive.pc.in +4 -1
  48. data/ext/libarchive-3.6.2/config.h.in +1504 -0
  49. data/ext/libarchive-3.6.2/configure +25558 -0
  50. data/ext/libarchive-3.6.2/libarchive/archive.h +1212 -0
  51. data/ext/libarchive-3.6.2/libarchive/archive_acl.c +2097 -0
  52. data/ext/libarchive-3.6.2/libarchive/archive_acl_private.h +83 -0
  53. data/ext/libarchive-3.6.2/libarchive/archive_blake2.h +197 -0
  54. data/ext/libarchive-3.6.2/libarchive/archive_blake2_impl.h +161 -0
  55. data/ext/libarchive-3.6.2/libarchive/archive_blake2s_ref.c +369 -0
  56. data/ext/libarchive-3.6.2/libarchive/archive_blake2sp_ref.c +361 -0
  57. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_check_magic.c +63 -22
  58. data/ext/libarchive-3.6.2/libarchive/archive_cmdline.c +227 -0
  59. data/ext/libarchive-3.6.2/libarchive/archive_cmdline_private.h +47 -0
  60. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_crc32.h +17 -0
  61. data/ext/libarchive-3.6.2/libarchive/archive_cryptor.c +534 -0
  62. data/ext/libarchive-3.6.2/libarchive/archive_cryptor_private.h +188 -0
  63. data/ext/libarchive-3.6.2/libarchive/archive_digest.c +1505 -0
  64. data/ext/libarchive-3.6.2/libarchive/archive_digest_private.h +416 -0
  65. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_darwin.c +559 -0
  66. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_freebsd.c +712 -0
  67. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_linux.c +760 -0
  68. data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_sunos.c +824 -0
  69. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_endian.h +48 -15
  70. data/ext/libarchive-3.6.2/libarchive/archive_entry.c +2149 -0
  71. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry.h +305 -106
  72. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_copy_bhfi.c +5 -4
  73. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_copy_stat.c +9 -3
  74. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_link_resolver.c +104 -62
  75. data/ext/libarchive-3.6.2/libarchive/archive_entry_locale.h +92 -0
  76. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_private.h +65 -49
  77. data/ext/libarchive-3.6.2/libarchive/archive_entry_sparse.c +156 -0
  78. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_stat.c +6 -6
  79. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_strmode.c +1 -1
  80. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_xattr.c +4 -6
  81. data/ext/libarchive-3.6.2/libarchive/archive_getdate.c +1165 -0
  82. data/ext/libarchive-3.6.2/libarchive/archive_getdate.h +39 -0
  83. data/ext/libarchive-3.6.2/libarchive/archive_hmac.c +334 -0
  84. data/ext/libarchive-3.6.2/libarchive/archive_hmac_private.h +117 -0
  85. data/ext/libarchive-3.6.2/libarchive/archive_match.c +1875 -0
  86. data/ext/libarchive-3.6.2/libarchive/archive_openssl_evp_private.h +53 -0
  87. data/ext/libarchive-3.6.2/libarchive/archive_openssl_hmac_private.h +54 -0
  88. data/ext/libarchive-3.6.2/libarchive/archive_options.c +218 -0
  89. data/ext/libarchive-3.6.2/libarchive/archive_options_private.h +51 -0
  90. data/ext/libarchive-3.6.2/libarchive/archive_pack_dev.c +337 -0
  91. data/ext/libarchive-3.6.2/libarchive/archive_pack_dev.h +49 -0
  92. data/ext/libarchive-3.6.2/libarchive/archive_pathmatch.c +463 -0
  93. data/ext/libarchive-3.6.2/libarchive/archive_pathmatch.h +52 -0
  94. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_platform.h +77 -9
  95. data/ext/libarchive-3.6.2/libarchive/archive_platform_acl.h +55 -0
  96. data/ext/libarchive-3.6.2/libarchive/archive_platform_xattr.h +47 -0
  97. data/ext/libarchive-3.6.2/libarchive/archive_ppmd7.c +1168 -0
  98. data/ext/libarchive-3.6.2/libarchive/archive_ppmd7_private.h +119 -0
  99. data/ext/libarchive-3.6.2/libarchive/archive_ppmd8.c +1287 -0
  100. data/ext/libarchive-3.6.2/libarchive/archive_ppmd8_private.h +148 -0
  101. data/ext/libarchive-3.6.2/libarchive/archive_ppmd_private.h +151 -0
  102. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_private.h +74 -18
  103. data/ext/libarchive-3.6.2/libarchive/archive_random.c +272 -0
  104. data/ext/libarchive-3.6.2/libarchive/archive_random_private.h +36 -0
  105. data/ext/libarchive-3.6.2/libarchive/archive_rb.c +709 -0
  106. data/ext/libarchive-3.6.2/libarchive/archive_rb.h +113 -0
  107. data/ext/libarchive-3.6.2/libarchive/archive_read.c +1756 -0
  108. data/ext/libarchive-3.6.2/libarchive/archive_read_add_passphrase.c +190 -0
  109. data/ext/libarchive-3.6.2/libarchive/archive_read_append_filter.c +204 -0
  110. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_data_into_fd.c +64 -18
  111. data/ext/libarchive-3.6.2/libarchive/archive_read_disk_entry_from_file.c +1086 -0
  112. data/ext/libarchive-3.6.2/libarchive/archive_read_disk_posix.c +2732 -0
  113. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_disk_private.h +40 -4
  114. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_disk_set_standard_lookup.c +21 -11
  115. data/ext/libarchive-3.6.2/libarchive/archive_read_disk_windows.c +2479 -0
  116. data/ext/libarchive-3.6.2/libarchive/archive_read_extract.c +60 -0
  117. data/ext/{libarchive-2.8.4/libarchive/archive_read_extract.c → libarchive-3.6.2/libarchive/archive_read_extract2.c} +34 -61
  118. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_fd.c +70 -49
  119. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_file.c +38 -23
  120. data/ext/libarchive-3.6.2/libarchive/archive_read_open_filename.c +586 -0
  121. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_memory.c +58 -28
  122. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_private.h +127 -59
  123. data/ext/libarchive-3.6.2/libarchive/archive_read_set_format.c +117 -0
  124. data/ext/libarchive-3.6.2/libarchive/archive_read_set_options.c +133 -0
  125. 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
  126. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_by_code.c +83 -0
  127. 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
  128. 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
  129. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_grzip.c +112 -0
  130. 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
  131. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lrzip.c +122 -0
  132. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lz4.c +742 -0
  133. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lzop.c +499 -0
  134. 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
  135. 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
  136. 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
  137. 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
  138. 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
  139. data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_zstd.c +297 -0
  140. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_7zip.c +3900 -0
  141. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_all.c +89 -0
  142. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_ar.c +126 -72
  143. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_by_code.c +92 -0
  144. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_cab.c +3228 -0
  145. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_cpio.c +1104 -0
  146. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_empty.c +14 -11
  147. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_iso9660.c +990 -541
  148. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_lha.c +2916 -0
  149. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_mtree.c +2150 -0
  150. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_rar.c +3797 -0
  151. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_rar5.c +4251 -0
  152. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_raw.c +38 -31
  153. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_tar.c +1157 -629
  154. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_warc.c +848 -0
  155. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_xar.c +439 -258
  156. data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_zip.c +4270 -0
  157. data/ext/libarchive-3.6.2/libarchive/archive_string.c +4240 -0
  158. data/ext/libarchive-3.6.2/libarchive/archive_string.h +243 -0
  159. data/ext/libarchive-3.6.2/libarchive/archive_string_composition.h +2292 -0
  160. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_string_sprintf.c +44 -16
  161. data/ext/libarchive-3.6.2/libarchive/archive_util.c +655 -0
  162. data/ext/libarchive-3.6.2/libarchive/archive_version_details.c +151 -0
  163. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_virtual.c +85 -16
  164. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_windows.c +214 -541
  165. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_windows.h +74 -106
  166. data/ext/libarchive-3.6.2/libarchive/archive_write.c +828 -0
  167. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter.c +72 -0
  168. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_b64encode.c +304 -0
  169. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_by_name.c +77 -0
  170. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_bzip2.c +401 -0
  171. 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
  172. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_grzip.c +135 -0
  173. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_gzip.c +442 -0
  174. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lrzip.c +197 -0
  175. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lz4.c +700 -0
  176. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lzop.c +478 -0
  177. 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
  178. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_program.c +391 -0
  179. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_uuencode.c +295 -0
  180. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_xz.c +545 -0
  181. data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_zstd.c +418 -0
  182. data/ext/libarchive-3.6.2/libarchive/archive_write_disk_posix.c +4711 -0
  183. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_disk_private.h +9 -2
  184. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_disk_set_standard_lookup.c +30 -29
  185. data/ext/libarchive-3.6.2/libarchive/archive_write_disk_windows.c +2842 -0
  186. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_fd.c +15 -10
  187. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_file.c +15 -9
  188. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_filename.c +128 -20
  189. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_memory.c +7 -18
  190. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_private.h +72 -29
  191. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format.c +56 -3
  192. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_7zip.c +2322 -0
  193. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_ar.c +54 -34
  194. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_by_name.c +20 -2
  195. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio.c +11 -0
  196. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_binary.c +610 -0
  197. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_newc.c +457 -0
  198. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_odc.c +500 -0
  199. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_filter_by_ext.c +142 -0
  200. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_gnutar.c +755 -0
  201. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_iso9660.c +8165 -0
  202. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_mtree.c +2217 -0
  203. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_pax.c +1049 -387
  204. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_private.h +42 -0
  205. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_raw.c +125 -0
  206. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_shar.c +62 -47
  207. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_ustar.c +279 -108
  208. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_v7tar.c +638 -0
  209. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_warc.c +453 -0
  210. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_xar.c +3259 -0
  211. data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_zip.c +1704 -0
  212. data/ext/libarchive-3.6.2/libarchive/archive_write_set_options.c +130 -0
  213. data/ext/libarchive-3.6.2/libarchive/archive_write_set_passphrase.c +95 -0
  214. data/ext/libarchive-3.6.2/libarchive/archive_xxhash.h +48 -0
  215. data/ext/libarchive-3.6.2/libarchive/config_freebsd.h +271 -0
  216. data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/filter_fork.h +10 -5
  217. data/ext/{libarchive-2.8.4/libarchive/filter_fork.c → libarchive-3.6.2/libarchive/filter_fork_posix.c} +98 -19
  218. data/ext/libarchive-3.6.2/libarchive/filter_fork_windows.c +236 -0
  219. data/ext/libarchive-3.6.2/libarchive/xxhash.c +525 -0
  220. data/ext/libarchive-static-makefile +144 -80
  221. data/ext/libarchive-static-wrapper-makefile +1 -1
  222. data/ext/zlib-1.2.13/Makefile.in +404 -0
  223. data/ext/{zlib-1.2.5 → zlib-1.2.13}/adler32.c +51 -34
  224. data/ext/{zlib-1.2.5 → zlib-1.2.13}/compress.c +27 -21
  225. data/ext/zlib-1.2.13/configure +922 -0
  226. data/ext/zlib-1.2.13/crc32.c +1125 -0
  227. data/ext/zlib-1.2.13/crc32.h +9446 -0
  228. data/ext/{zlib-1.2.5 → zlib-1.2.13}/deflate.c +842 -459
  229. data/ext/{zlib-1.2.5 → zlib-1.2.13}/deflate.h +37 -33
  230. data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzclose.c +0 -0
  231. data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzguts.h +103 -16
  232. data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzlib.c +155 -53
  233. data/ext/zlib-1.2.13/gzread.c +650 -0
  234. data/ext/zlib-1.2.13/gzwrite.c +677 -0
  235. data/ext/{zlib-1.2.5 → zlib-1.2.13}/infback.c +24 -12
  236. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffast.c +49 -66
  237. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffast.h +0 -0
  238. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffixed.h +3 -3
  239. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inflate.c +209 -94
  240. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inflate.h +9 -5
  241. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inftrees.c +24 -50
  242. data/ext/{zlib-1.2.5 → zlib-1.2.13}/inftrees.h +1 -1
  243. data/ext/{zlib-1.2.5 → zlib-1.2.13}/trees.c +135 -198
  244. data/ext/{zlib-1.2.5 → zlib-1.2.13}/trees.h +0 -0
  245. data/ext/zlib-1.2.13/uncompr.c +93 -0
  246. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zconf.h +182 -63
  247. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zlib.h +617 -295
  248. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zutil.c +50 -41
  249. data/ext/{zlib-1.2.5 → zlib-1.2.13}/zutil.h +83 -82
  250. metadata +244 -137
  251. data/ext/libarchive-0.1.1/libarchive.c +0 -1762
  252. data/ext/libarchive-2.8.4/Makefile.in +0 -7076
  253. data/ext/libarchive-2.8.4/build/autoconf/compile +0 -143
  254. data/ext/libarchive-2.8.4/build/autoconf/config.guess +0 -1502
  255. data/ext/libarchive-2.8.4/build/autoconf/config.sub +0 -1708
  256. data/ext/libarchive-2.8.4/build/autoconf/depcomp +0 -630
  257. data/ext/libarchive-2.8.4/build/autoconf/install-sh +0 -291
  258. data/ext/libarchive-2.8.4/build/autoconf/ltmain.sh +0 -8406
  259. data/ext/libarchive-2.8.4/build/autoconf/missing +0 -376
  260. data/ext/libarchive-2.8.4/config.h.in +0 -772
  261. data/ext/libarchive-2.8.4/configure +0 -17916
  262. data/ext/libarchive-2.8.4/libarchive/archive.h +0 -741
  263. data/ext/libarchive-2.8.4/libarchive/archive_entry.c +0 -2202
  264. data/ext/libarchive-2.8.4/libarchive/archive_hash.h +0 -281
  265. data/ext/libarchive-2.8.4/libarchive/archive_read.c +0 -1249
  266. data/ext/libarchive-2.8.4/libarchive/archive_read_disk.c +0 -198
  267. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_entry_from_file.c +0 -570
  268. data/ext/libarchive-2.8.4/libarchive/archive_read_open_filename.c +0 -272
  269. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_cpio.c +0 -777
  270. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_mtree.c +0 -1304
  271. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_zip.c +0 -903
  272. data/ext/libarchive-2.8.4/libarchive/archive_string.c +0 -453
  273. data/ext/libarchive-2.8.4/libarchive/archive_string.h +0 -148
  274. data/ext/libarchive-2.8.4/libarchive/archive_util.c +0 -391
  275. data/ext/libarchive-2.8.4/libarchive/archive_write.c +0 -466
  276. data/ext/libarchive-2.8.4/libarchive/archive_write_disk.c +0 -2628
  277. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_bzip2.c +0 -408
  278. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_gzip.c +0 -477
  279. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_none.c +0 -257
  280. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_program.c +0 -347
  281. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_xz.c +0 -438
  282. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio.c +0 -344
  283. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio_newc.c +0 -295
  284. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_mtree.c +0 -1050
  285. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_zip.c +0 -667
  286. data/ext/libarchive-2.8.4/libarchive/config_freebsd.h +0 -154
  287. data/ext/libarchive-2.8.4/libarchive/filter_fork_windows.c +0 -113
  288. data/ext/zlib-1.2.5/Makefile.in +0 -257
  289. data/ext/zlib-1.2.5/configure +0 -596
  290. data/ext/zlib-1.2.5/crc32.c +0 -442
  291. data/ext/zlib-1.2.5/crc32.h +0 -441
  292. data/ext/zlib-1.2.5/example.c +0 -565
  293. data/ext/zlib-1.2.5/gzread.c +0 -653
  294. data/ext/zlib-1.2.5/gzwrite.c +0 -531
  295. data/ext/zlib-1.2.5/minigzip.c +0 -440
  296. data/ext/zlib-1.2.5/uncompr.c +0 -59
@@ -0,0 +1,60 @@
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
+ #include "archive_platform.h"
27
+ __FBSDID("$FreeBSD: src/lib/libarchive/archive_read_extract.c,v 1.61 2008/05/26 17:00:22 kientzle Exp $");
28
+
29
+ #ifdef HAVE_ERRNO_H
30
+ #include <errno.h>
31
+ #endif
32
+
33
+ #include "archive.h"
34
+ #include "archive_entry.h"
35
+ #include "archive_private.h"
36
+ #include "archive_read_private.h"
37
+
38
+ int
39
+ archive_read_extract(struct archive *_a, struct archive_entry *entry, int flags)
40
+ {
41
+ struct archive_read_extract *extract;
42
+ struct archive_read * a = (struct archive_read *)_a;
43
+
44
+ extract = __archive_read_get_extract(a);
45
+ if (extract == NULL)
46
+ return (ARCHIVE_FATAL);
47
+
48
+ /* If we haven't initialized the archive_write_disk object, do it now. */
49
+ if (extract->ad == NULL) {
50
+ extract->ad = archive_write_disk_new();
51
+ if (extract->ad == NULL) {
52
+ archive_set_error(&a->archive, ENOMEM, "Can't extract");
53
+ return (ARCHIVE_FATAL);
54
+ }
55
+ archive_write_disk_set_standard_lookup(extract->ad);
56
+ }
57
+
58
+ archive_write_disk_set_options(extract->ad, flags);
59
+ return (archive_read_extract2(&a->archive, entry, extract->ad));
60
+ }
@@ -32,63 +32,50 @@ __FBSDID("$FreeBSD: src/lib/libarchive/archive_read_extract.c,v 1.61 2008/05/26
32
32
  #ifdef HAVE_ERRNO_H
33
33
  #include <errno.h>
34
34
  #endif
35
- #ifdef HAVE_STDLIB_H
36
- #include <stdlib.h>
37
- #endif
38
35
  #ifdef HAVE_STRING_H
39
36
  #include <string.h>
40
37
  #endif
41
38
 
42
39
  #include "archive.h"
40
+ #include "archive_entry.h"
43
41
  #include "archive_private.h"
44
42
  #include "archive_read_private.h"
45
- #include "archive_write_disk_private.h"
46
-
47
- struct extract {
48
- struct archive *ad; /* archive_write_disk object */
49
-
50
- /* Progress function invoked during extract. */
51
- void (*extract_progress)(void *);
52
- void *extract_progress_user_data;
53
- };
54
43
 
55
- static int archive_read_extract_cleanup(struct archive_read *);
56
44
  static int copy_data(struct archive *ar, struct archive *aw);
57
- static struct extract *get_extract(struct archive_read *);
45
+ static int archive_read_extract_cleanup(struct archive_read *);
58
46
 
59
- static struct extract *
60
- get_extract(struct archive_read *a)
47
+
48
+ /* Retrieve an extract object without initialising the associated
49
+ * archive_write_disk object.
50
+ */
51
+ struct archive_read_extract *
52
+ __archive_read_get_extract(struct archive_read *a)
61
53
  {
62
- /* If we haven't initialized, do it now. */
63
- /* This also sets up a lot of global state. */
64
54
  if (a->extract == NULL) {
65
- a->extract = (struct extract *)malloc(sizeof(*a->extract));
55
+ a->extract = (struct archive_read_extract *)calloc(1, sizeof(*a->extract));
66
56
  if (a->extract == NULL) {
67
57
  archive_set_error(&a->archive, ENOMEM, "Can't extract");
68
58
  return (NULL);
69
59
  }
70
- memset(a->extract, 0, sizeof(*a->extract));
71
- a->extract->ad = archive_write_disk_new();
72
- if (a->extract->ad == NULL) {
73
- archive_set_error(&a->archive, ENOMEM, "Can't extract");
74
- return (NULL);
75
- }
76
- archive_write_disk_set_standard_lookup(a->extract->ad);
77
60
  a->cleanup_archive_extract = archive_read_extract_cleanup;
78
61
  }
79
62
  return (a->extract);
80
63
  }
81
64
 
82
- int
83
- archive_read_extract(struct archive *_a, struct archive_entry *entry, int flags)
65
+ /*
66
+ * Cleanup function for archive_extract.
67
+ */
68
+ static int
69
+ archive_read_extract_cleanup(struct archive_read *a)
84
70
  {
85
- struct extract *extract;
71
+ int ret = ARCHIVE_OK;
86
72
 
87
- extract = get_extract((struct archive_read *)_a);
88
- if (extract == NULL)
89
- return (ARCHIVE_FATAL);
90
- archive_write_disk_set_options(extract->ad, flags);
91
- return (archive_read_extract2(_a, entry, extract->ad));
73
+ if (a->extract->ad != NULL) {
74
+ ret = archive_write_free(a->extract->ad);
75
+ }
76
+ free(a->extract);
77
+ a->extract = NULL;
78
+ return (ret);
92
79
  }
93
80
 
94
81
  int
@@ -99,15 +86,16 @@ archive_read_extract2(struct archive *_a, struct archive_entry *entry,
99
86
  int r, r2;
100
87
 
101
88
  /* Set up for this particular entry. */
102
- archive_write_disk_set_skip_file(ad,
103
- a->skip_file_dev, a->skip_file_ino);
89
+ if (a->skip_file_set)
90
+ archive_write_disk_set_skip_file(ad,
91
+ a->skip_file_dev, a->skip_file_ino);
104
92
  r = archive_write_header(ad, entry);
105
93
  if (r < ARCHIVE_WARN)
106
94
  r = ARCHIVE_WARN;
107
95
  if (r != ARCHIVE_OK)
108
96
  /* If _write_header failed, copy the error. */
109
97
  archive_copy_error(&a->archive, ad);
110
- else
98
+ else if (!archive_entry_size_is_set(entry) || archive_entry_size(entry) > 0)
111
99
  /* Otherwise, pour data into the entry. */
112
100
  r = copy_data(_a, ad);
113
101
  r2 = archive_write_finish_entry(ad);
@@ -115,7 +103,7 @@ archive_read_extract2(struct archive *_a, struct archive_entry *entry,
115
103
  r2 = ARCHIVE_WARN;
116
104
  /* Use the first message. */
117
105
  if (r2 != ARCHIVE_OK && r == ARCHIVE_OK)
118
- archive_copy_error(&a->archive, ad);
106
+ archive_copy_error(&a->archive, ad);
119
107
  /* Use the worst error return. */
120
108
  if (r2 < r)
121
109
  r = r2;
@@ -127,7 +115,7 @@ archive_read_extract_set_progress_callback(struct archive *_a,
127
115
  void (*progress_func)(void *), void *user_data)
128
116
  {
129
117
  struct archive_read *a = (struct archive_read *)_a;
130
- struct extract *extract = get_extract(a);
118
+ struct archive_read_extract *extract = __archive_read_get_extract(a);
131
119
  if (extract != NULL) {
132
120
  extract->extract_progress = progress_func;
133
121
  extract->extract_progress_user_data = user_data;
@@ -137,23 +125,25 @@ archive_read_extract_set_progress_callback(struct archive *_a,
137
125
  static int
138
126
  copy_data(struct archive *ar, struct archive *aw)
139
127
  {
140
- off_t offset;
128
+ int64_t offset;
141
129
  const void *buff;
142
- struct extract *extract;
130
+ struct archive_read_extract *extract;
143
131
  size_t size;
144
132
  int r;
145
133
 
146
- extract = get_extract((struct archive_read *)ar);
134
+ extract = __archive_read_get_extract((struct archive_read *)ar);
135
+ if (extract == NULL)
136
+ return (ARCHIVE_FATAL);
147
137
  for (;;) {
148
138
  r = archive_read_data_block(ar, &buff, &size, &offset);
149
139
  if (r == ARCHIVE_EOF)
150
140
  return (ARCHIVE_OK);
151
141
  if (r != ARCHIVE_OK)
152
142
  return (r);
153
- r = archive_write_data_block(aw, buff, size, offset);
143
+ r = (int)archive_write_data_block(aw, buff, size, offset);
154
144
  if (r < ARCHIVE_WARN)
155
145
  r = ARCHIVE_WARN;
156
- if (r != ARCHIVE_OK) {
146
+ if (r < ARCHIVE_OK) {
157
147
  archive_set_error(ar, archive_errno(aw),
158
148
  "%s", archive_error_string(aw));
159
149
  return (r);
@@ -163,20 +153,3 @@ copy_data(struct archive *ar, struct archive *aw)
163
153
  (extract->extract_progress_user_data);
164
154
  }
165
155
  }
166
-
167
- /*
168
- * Cleanup function for archive_extract.
169
- */
170
- static int
171
- archive_read_extract_cleanup(struct archive_read *a)
172
- {
173
- int ret = ARCHIVE_OK;
174
-
175
- #if ARCHIVE_API_VERSION > 1
176
- ret =
177
- #endif
178
- archive_write_finish(a->extract->ad);
179
- free(a->extract);
180
- a->extract = NULL;
181
- return (ret);
182
- }
@@ -53,17 +53,14 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_read_open_fd.c 201103 2009-12-28
53
53
  struct read_fd_data {
54
54
  int fd;
55
55
  size_t block_size;
56
- char can_skip;
56
+ char use_lseek;
57
57
  void *buffer;
58
58
  };
59
59
 
60
60
  static int file_close(struct archive *, void *);
61
61
  static ssize_t file_read(struct archive *, void *, const void **buff);
62
- #if ARCHIVE_API_VERSION < 2
63
- static ssize_t file_skip(struct archive *, void *, size_t request);
64
- #else
65
- static off_t file_skip(struct archive *, void *, off_t request);
66
- #endif
62
+ static int64_t file_seek(struct archive *, void *, int64_t request, int);
63
+ static int64_t file_skip(struct archive *, void *, int64_t request);
67
64
 
68
65
  int
69
66
  archive_read_open_fd(struct archive *a, int fd, size_t block_size)
@@ -78,7 +75,7 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size)
78
75
  return (ARCHIVE_FATAL);
79
76
  }
80
77
 
81
- mine = (struct read_fd_data *)malloc(sizeof(*mine));
78
+ mine = (struct read_fd_data *)calloc(1, sizeof(*mine));
82
79
  b = malloc(block_size);
83
80
  if (mine == NULL || b == NULL) {
84
81
  archive_set_error(a, ENOMEM, "No memory");
@@ -98,15 +95,18 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size)
98
95
  */
99
96
  if (S_ISREG(st.st_mode)) {
100
97
  archive_read_extract_set_skip_file(a, st.st_dev, st.st_ino);
101
- mine->can_skip = 1;
102
- } else
103
- mine->can_skip = 0;
98
+ mine->use_lseek = 1;
99
+ }
104
100
  #if defined(__CYGWIN__) || defined(_WIN32)
105
101
  setmode(mine->fd, O_BINARY);
106
102
  #endif
107
103
 
108
- return (archive_read_open2(a, mine,
109
- NULL, file_read, file_skip, file_close));
104
+ archive_read_set_read_callback(a, file_read);
105
+ archive_read_set_skip_callback(a, file_skip);
106
+ archive_read_set_seek_callback(a, file_seek);
107
+ archive_read_set_close_callback(a, file_close);
108
+ archive_read_set_callback_data(a, mine);
109
+ return (archive_read_open1(a));
110
110
  }
111
111
 
112
112
  static ssize_t
@@ -121,61 +121,82 @@ file_read(struct archive *a, void *client_data, const void **buff)
121
121
  if (bytes_read < 0) {
122
122
  if (errno == EINTR)
123
123
  continue;
124
- archive_set_error(a, errno, "Error reading fd %d", mine->fd);
124
+ archive_set_error(a, errno, "Error reading fd %d",
125
+ mine->fd);
125
126
  }
126
127
  return (bytes_read);
127
128
  }
128
129
  }
129
130
 
130
- #if ARCHIVE_API_VERSION < 2
131
- static ssize_t
132
- file_skip(struct archive *a, void *client_data, size_t request)
133
- #else
134
- static off_t
135
- file_skip(struct archive *a, void *client_data, off_t request)
136
- #endif
131
+ static int64_t
132
+ file_skip(struct archive *a, void *client_data, int64_t request)
137
133
  {
138
134
  struct read_fd_data *mine = (struct read_fd_data *)client_data;
139
- off_t old_offset, new_offset;
135
+ int64_t skip = request;
136
+ int64_t old_offset, new_offset;
137
+ int skip_bits = sizeof(skip) * 8 - 1; /* off_t is a signed type. */
140
138
 
141
- if (!mine->can_skip)
139
+ if (!mine->use_lseek)
142
140
  return (0);
143
141
 
142
+ /* Reduce a request that would overflow the 'skip' variable. */
143
+ if (sizeof(request) > sizeof(skip)) {
144
+ int64_t max_skip =
145
+ (((int64_t)1 << (skip_bits - 1)) - 1) * 2 + 1;
146
+ if (request > max_skip)
147
+ skip = max_skip;
148
+ }
149
+
144
150
  /* Reduce request to the next smallest multiple of block_size */
145
151
  request = (request / mine->block_size) * mine->block_size;
146
152
  if (request == 0)
147
153
  return (0);
148
154
 
155
+ if (((old_offset = lseek(mine->fd, 0, SEEK_CUR)) >= 0) &&
156
+ ((new_offset = lseek(mine->fd, skip, SEEK_CUR)) >= 0))
157
+ return (new_offset - old_offset);
158
+
159
+ /* If seek failed once, it will probably fail again. */
160
+ mine->use_lseek = 0;
161
+
162
+ /* Let libarchive recover with read+discard. */
163
+ if (errno == ESPIPE)
164
+ return (0);
165
+
149
166
  /*
150
- * Hurray for lazy evaluation: if the first lseek fails, the second
151
- * one will not be executed.
167
+ * There's been an error other than ESPIPE. This is most
168
+ * likely caused by a programmer error (too large request)
169
+ * or a corrupted archive file.
152
170
  */
153
- if (((old_offset = lseek(mine->fd, 0, SEEK_CUR)) < 0) ||
154
- ((new_offset = lseek(mine->fd, request, SEEK_CUR)) < 0))
155
- {
156
- /* If seek failed once, it will probably fail again. */
157
- mine->can_skip = 0;
158
-
159
- if (errno == ESPIPE)
160
- {
161
- /*
162
- * Failure to lseek() can be caused by the file
163
- * descriptor pointing to a pipe, socket or FIFO.
164
- * Return 0 here, so the compression layer will use
165
- * read()s instead to advance the file descriptor.
166
- * It's slower of course, but works as well.
167
- */
168
- return (0);
169
- }
170
- /*
171
- * There's been an error other than ESPIPE. This is most
172
- * likely caused by a programmer error (too large request)
173
- * or a corrupted archive file.
174
- */
175
- archive_set_error(a, errno, "Error seeking");
176
- return (-1);
171
+ archive_set_error(a, errno, "Error seeking");
172
+ return (-1);
173
+ }
174
+
175
+ /*
176
+ * TODO: Store the offset and use it in the read callback.
177
+ */
178
+ static int64_t
179
+ file_seek(struct archive *a, void *client_data, int64_t request, int whence)
180
+ {
181
+ struct read_fd_data *mine = (struct read_fd_data *)client_data;
182
+ int64_t r;
183
+
184
+ /* We use off_t here because lseek() is declared that way. */
185
+ /* See above for notes about when off_t is less than 64 bits. */
186
+ r = lseek(mine->fd, request, whence);
187
+ if (r >= 0)
188
+ return r;
189
+
190
+ if (errno == ESPIPE) {
191
+ archive_set_error(a, errno,
192
+ "A file descriptor(%d) is not seekable(PIPE)", mine->fd);
193
+ return (ARCHIVE_FAILED);
194
+ } else {
195
+ /* If the input is corrupted or truncated, fail. */
196
+ archive_set_error(a, errno,
197
+ "Error seeking in a file descriptor(%d)", mine->fd);
198
+ return (ARCHIVE_FATAL);
177
199
  }
178
- return (new_offset - old_offset);
179
200
  }
180
201
 
181
202
  static int
@@ -59,11 +59,7 @@ struct read_FILE_data {
59
59
 
60
60
  static int file_close(struct archive *, void *);
61
61
  static ssize_t file_read(struct archive *, void *, const void **buff);
62
- #if ARCHIVE_API_VERSION < 2
63
- static ssize_t file_skip(struct archive *, void *, size_t request);
64
- #else
65
- static off_t file_skip(struct archive *, void *, off_t request);
66
- #endif
62
+ static int64_t file_skip(struct archive *, void *, int64_t request);
67
63
 
68
64
  int
69
65
  archive_read_open_FILE(struct archive *a, FILE *f)
@@ -87,8 +83,9 @@ archive_read_open_FILE(struct archive *a, FILE *f)
87
83
  mine->f = f;
88
84
  /*
89
85
  * If we can't fstat() the file, it may just be that it's not
90
- * a file. (FILE * objects can wrap many kinds of I/O
91
- * streams, some of which don't support fileno()).)
86
+ * a file. (On some platforms, FILE * objects can wrap I/O
87
+ * streams that don't support fileno()). As a result, fileno()
88
+ * should be used cautiously.)
92
89
  */
93
90
  if (fstat(fileno(mine->f), &st) == 0 && S_ISREG(st.st_mode)) {
94
91
  archive_read_extract_set_skip_file(a, st.st_dev, st.st_ino);
@@ -101,33 +98,39 @@ archive_read_open_FILE(struct archive *a, FILE *f)
101
98
  setmode(fileno(mine->f), O_BINARY);
102
99
  #endif
103
100
 
104
- return (archive_read_open2(a, mine, NULL, file_read,
105
- file_skip, file_close));
101
+ archive_read_set_read_callback(a, file_read);
102
+ archive_read_set_skip_callback(a, file_skip);
103
+ archive_read_set_close_callback(a, file_close);
104
+ archive_read_set_callback_data(a, mine);
105
+ return (archive_read_open1(a));
106
106
  }
107
107
 
108
108
  static ssize_t
109
109
  file_read(struct archive *a, void *client_data, const void **buff)
110
110
  {
111
111
  struct read_FILE_data *mine = (struct read_FILE_data *)client_data;
112
- ssize_t bytes_read;
112
+ size_t bytes_read;
113
113
 
114
114
  *buff = mine->buffer;
115
115
  bytes_read = fread(mine->buffer, 1, mine->block_size, mine->f);
116
- if (bytes_read < 0) {
116
+ if (bytes_read < mine->block_size && ferror(mine->f)) {
117
117
  archive_set_error(a, errno, "Error reading file");
118
118
  }
119
119
  return (bytes_read);
120
120
  }
121
121
 
122
- #if ARCHIVE_API_VERSION < 2
123
- static ssize_t
124
- file_skip(struct archive *a, void *client_data, size_t request)
125
- #else
126
- static off_t
127
- file_skip(struct archive *a, void *client_data, off_t request)
128
- #endif
122
+ static int64_t
123
+ file_skip(struct archive *a, void *client_data, int64_t request)
129
124
  {
130
125
  struct read_FILE_data *mine = (struct read_FILE_data *)client_data;
126
+ #if HAVE_FSEEKO
127
+ off_t skip = (off_t)request;
128
+ #elif HAVE__FSEEKI64
129
+ int64_t skip = request;
130
+ #else
131
+ long skip = (long)request;
132
+ #endif
133
+ int skip_bits = sizeof(skip) * 8 - 1;
131
134
 
132
135
  (void)a; /* UNUSED */
133
136
 
@@ -140,10 +143,23 @@ file_skip(struct archive *a, void *client_data, off_t request)
140
143
  if (request == 0)
141
144
  return (0);
142
145
 
143
- #if HAVE_FSEEKO
144
- if (fseeko(mine->f, request, SEEK_CUR) != 0)
146
+ /* If request is too big for a long or an off_t, reduce it. */
147
+ if (sizeof(request) > sizeof(skip)) {
148
+ int64_t max_skip =
149
+ (((int64_t)1 << (skip_bits - 1)) - 1) * 2 + 1;
150
+ if (request > max_skip)
151
+ skip = max_skip;
152
+ }
153
+
154
+ #ifdef __ANDROID__
155
+ /* fileno() isn't safe on all platforms ... see above. */
156
+ if (lseek(fileno(mine->f), skip, SEEK_CUR) < 0)
157
+ #elif HAVE_FSEEKO
158
+ if (fseeko(mine->f, skip, SEEK_CUR) != 0)
159
+ #elif HAVE__FSEEKI64
160
+ if (_fseeki64(mine->f, skip, SEEK_CUR) != 0)
145
161
  #else
146
- if (fseek(mine->f, request, SEEK_CUR) != 0)
162
+ if (fseek(mine->f, skip, SEEK_CUR) != 0)
147
163
  #endif
148
164
  {
149
165
  mine->can_skip = 0;
@@ -158,8 +174,7 @@ file_close(struct archive *a, void *client_data)
158
174
  struct read_FILE_data *mine = (struct read_FILE_data *)client_data;
159
175
 
160
176
  (void)a; /* UNUSED */
161
- if (mine->buffer != NULL)
162
- free(mine->buffer);
177
+ free(mine->buffer);
163
178
  free(mine);
164
179
  return (ARCHIVE_OK);
165
180
  }