003 File Manager
Current Path:
/usr/src/contrib/libarchive/libarchive/test
usr
/
src
/
contrib
/
libarchive
/
libarchive
/
test
/
📁
..
📄
README
(2.49 KB)
📄
main.c
(77.6 KB)
📄
read_open_memory.c
(6.3 KB)
📄
test.h
(1.9 KB)
📄
test_acl_nfs4.c
(8.49 KB)
📄
test_acl_pax.c
(15.87 KB)
📄
test_acl_pax_nfs4.tar.uu
(7.62 KB)
📄
test_acl_pax_posix1e.tar.uu
(6.93 KB)
📄
test_acl_platform_nfs4.c
(34.03 KB)
📄
test_acl_platform_posix1e.c
(16.11 KB)
📄
test_acl_posix1e.c
(7.13 KB)
📄
test_acl_text.c
(14.72 KB)
📄
test_archive_api_feature.c
(2.22 KB)
📄
test_archive_clear_error.c
(1.69 KB)
📄
test_archive_cmdline.c
(5.35 KB)
📄
test_archive_digest.c
(5.36 KB)
📄
test_archive_getdate.c
(3.82 KB)
📄
test_archive_match_owner.c
(9.59 KB)
📄
test_archive_match_path.c
(14.43 KB)
📄
test_archive_match_time.c
(42.76 KB)
📄
test_archive_pathmatch.c
(14.17 KB)
📄
test_archive_read_add_passphrase.c
(9.14 KB)
📄
test_archive_read_close_twice.c
(1.71 KB)
📄
test_archive_read_close_twice_open_fd.c
(1.97 KB)
📄
test_archive_read_close_twice_open_filename.c
(2.06 KB)
📄
test_archive_read_multiple_data_objects.c
(11.93 KB)
📄
test_archive_read_next_header_empty.c
(3.91 KB)
📄
test_archive_read_next_header_raw.c
(2.31 KB)
📄
test_archive_read_open2.c
(3.44 KB)
📄
test_archive_read_set_filter_option.c
(1.96 KB)
📄
test_archive_read_set_format_option.c
(2.46 KB)
📄
test_archive_read_set_option.c
(2.5 KB)
📄
test_archive_read_set_options.c
(4 KB)
📄
test_archive_read_support.c
(5.12 KB)
📄
test_archive_set_error.c
(1.84 KB)
📄
test_archive_string.c
(10.79 KB)
📄
test_archive_string_conversion.c
(25.02 KB)
📄
test_archive_string_conversion.txt.Z.uu
(157.5 KB)
📄
test_archive_write_add_filter_by_name.c
(6.45 KB)
📄
test_archive_write_set_filter_option.c
(1.96 KB)
📄
test_archive_write_set_format_by_name.c
(8.61 KB)
📄
test_archive_write_set_format_filter_by_ext.c
(7.16 KB)
📄
test_archive_write_set_format_option.c
(2.47 KB)
📄
test_archive_write_set_option.c
(2.5 KB)
📄
test_archive_write_set_options.c
(4 KB)
📄
test_archive_write_set_passphrase.c
(3.1 KB)
📄
test_bad_fd.c
(1.71 KB)
📄
test_compat_bzip2.c
(3.21 KB)
📄
test_compat_bzip2_1.tbz.uu
(1.18 KB)
📄
test_compat_bzip2_2.tbz.uu
(395 B)
📄
test_compat_cpio.c
(4.15 KB)
📄
test_compat_cpio_1.cpio.uu
(879 B)
📄
test_compat_gtar.c
(5.45 KB)
📄
test_compat_gtar_1.tar.uu
(13.83 KB)
📄
test_compat_gtar_2.tar.uu
(2.8 KB)
📄
test_compat_gzip.c
(3.5 KB)
📄
test_compat_gzip_1.tgz.uu
(1.16 KB)
📄
test_compat_gzip_2.tgz.uu
(406 B)
📄
test_compat_lz4.c
(4.75 KB)
📄
test_compat_lz4_1.tar.lz4.uu
(572 B)
📄
test_compat_lz4_2.tar.lz4.uu
(642 B)
📄
test_compat_lz4_3.tar.lz4.uu
(406 B)
📄
test_compat_lz4_B4.tar.lz4.uu
(407.84 KB)
📄
test_compat_lz4_B4BD.tar.lz4.uu
(407.84 KB)
📄
test_compat_lz4_B4BDBX.tar.lz4.uu
(408.19 KB)
📄
test_compat_lz4_B5.tar.lz4.uu
(139.72 KB)
📄
test_compat_lz4_B5BD.tar.lz4.uu
(139.72 KB)
📄
test_compat_lz4_B6.tar.lz4.uu
(72.29 KB)
📄
test_compat_lz4_B6BD.tar.lz4.uu
(72.29 KB)
📄
test_compat_lz4_B7.tar.lz4.uu
(55.43 KB)
📄
test_compat_lz4_B7BD.tar.lz4.uu
(55.43 KB)
📄
test_compat_lzip.c
(4.62 KB)
📄
test_compat_lzip_1.tlz.uu
(437 B)
📄
test_compat_lzip_2.tlz.uu
(359 B)
📄
test_compat_lzma.c
(5.09 KB)
📄
test_compat_lzma_1.tlz.uu
(352 B)
📄
test_compat_lzma_2.tlz.uu
(274 B)
📄
test_compat_lzma_3.tlz.uu
(274 B)
📄
test_compat_lzop.c
(5.09 KB)
📄
test_compat_lzop_1.tar.lzo.uu
(1.67 KB)
📄
test_compat_lzop_2.tar.lzo.uu
(2.17 KB)
📄
test_compat_lzop_3.tar.lzo.uu
(1.74 KB)
📄
test_compat_mac-1.tar.Z.uu
(2.11 KB)
📄
test_compat_mac-2.tar.Z.uu
(988 B)
📄
test_compat_mac.c
(8.21 KB)
📄
test_compat_perl_archive_tar.c
(2.63 KB)
📄
test_compat_perl_archive_tar.tar.uu
(2.81 KB)
📄
test_compat_plexus_archiver_tar.c
(2.75 KB)
📄
test_compat_plexus_archiver_tar.tar.uu
(2.81 KB)
📄
test_compat_solaris_pax_sparse.c
(6.76 KB)
📄
test_compat_solaris_pax_sparse_1.pax.Z.uu
(3.07 KB)
📄
test_compat_solaris_pax_sparse_2.pax.Z.uu
(3.07 KB)
📄
test_compat_solaris_tar_acl.c
(10.4 KB)
📄
test_compat_solaris_tar_acl.tar.uu
(9.7 KB)
📄
test_compat_star_acl.c
(12.21 KB)
📄
test_compat_star_acl_nfs4.tar.uu
(13.83 KB)
📄
test_compat_star_acl_posix1e.tar.uu
(13.83 KB)
📄
test_compat_tar_hardlink.c
(4.22 KB)
📄
test_compat_tar_hardlink_1.tar.uu
(2.12 KB)
📄
test_compat_uudecode.c
(2.72 KB)
📄
test_compat_uudecode_large.c
(2.47 KB)
📄
test_compat_uudecode_large.tar.Z.uu
(65.67 KB)
📄
test_compat_xz.c
(3.04 KB)
📄
test_compat_xz_1.txz.uu
(559 B)
📄
test_compat_zip.c
(17.39 KB)
📄
test_compat_zip_1.zip.uu
(726 B)
📄
test_compat_zip_2.zip.uu
(324 B)
📄
test_compat_zip_3.zip.uu
(952 B)
📄
test_compat_zip_4.zip.uu
(1.31 KB)
📄
test_compat_zip_5.zip.uu
(14.47 KB)
📄
test_compat_zip_6.zip.uu
(472 B)
📄
test_compat_zip_7.xps.uu
(21.46 KB)
📄
test_compat_zip_8.zip.uu
(226 B)
📄
test_compat_zstd.c
(3.17 KB)
📄
test_compat_zstd_1.tar.zst.uu
(553 B)
📄
test_compat_zstd_2.tar.zst.uu
(297 B)
📄
test_empty_write.c
(4.38 KB)
📄
test_entry.c
(37.69 KB)
📄
test_entry_strmode.c
(2.89 KB)
📄
test_extattr_freebsd.c
(5.21 KB)
📄
test_filter_count.c
(2.64 KB)
📄
test_fuzz.c
(15.12 KB)
📄
test_fuzz.cab.uu
(2.81 KB)
📄
test_fuzz.lzh.uu
(9 KB)
📄
test_fuzz_1.iso.Z.uu
(29.68 KB)
📄
test_gnutar_filename_encoding.c
(12.14 KB)
📄
test_link_resolver.c
(7.24 KB)
📄
test_open_failure.c
(7.24 KB)
📄
test_open_fd.c
(4.76 KB)
📄
test_open_file.c
(3.95 KB)
📄
test_open_filename.c
(7.26 KB)
📄
test_pax_filename_encoding.c
(20.46 KB)
📄
test_pax_filename_encoding.tar.uu
(6.95 KB)
📄
test_pax_xattr_header.c
(4.99 KB)
📄
test_pax_xattr_header_all.tar.uu
(4.18 KB)
📄
test_pax_xattr_header_libarchive.tar.uu
(4.19 KB)
📄
test_pax_xattr_header_schily.tar.uu
(4.18 KB)
📄
test_rar_multivolume_multiple_files.part1.rar.uu
(9.71 KB)
📄
test_rar_multivolume_multiple_files.part2.rar.uu
(9.71 KB)
📄
test_rar_multivolume_multiple_files.part3.rar.uu
(9.71 KB)
📄
test_rar_multivolume_multiple_files.part4.rar.uu
(9.71 KB)
📄
test_rar_multivolume_multiple_files.part5.rar.uu
(9.71 KB)
📄
test_rar_multivolume_multiple_files.part6.rar.uu
(6.92 KB)
📄
test_rar_multivolume_single_file.part1.rar.uu
(9.44 KB)
📄
test_rar_multivolume_single_file.part2.rar.uu
(9.44 KB)
📄
test_rar_multivolume_single_file.part3.rar.uu
(8.67 KB)
📄
test_rar_multivolume_uncompressed_files.part01.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part02.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part03.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part04.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part05.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part06.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part07.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part08.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part09.rar.uu
(17.93 KB)
📄
test_rar_multivolume_uncompressed_files.part10.rar.uu
(4.33 KB)
📄
test_read_data_large.c
(4.34 KB)
📄
test_read_disk.c
(5.66 KB)
📄
test_read_disk_directory_traversals.c
(64.08 KB)
📄
test_read_disk_entry_from_file.c
(2.75 KB)
📄
test_read_extract.c
(6.43 KB)
📄
test_read_file_nonexistent.c
(1.6 KB)
📄
test_read_filter_compress.c
(3.08 KB)
📄
test_read_filter_grzip.c
(2.69 KB)
📄
test_read_filter_grzip.tar.grz.uu
(317 B)
📄
test_read_filter_lrzip.c
(2.69 KB)
📄
test_read_filter_lrzip.tar.lrz.uu
(472 B)
📄
test_read_filter_lzop.c
(3 KB)
📄
test_read_filter_lzop.tar.lzo.uu
(510 B)
📄
test_read_filter_lzop_multiple_parts.c
(3.13 KB)
📄
test_read_filter_lzop_multiple_parts.tar.lzo.uu
(5.24 KB)
📄
test_read_filter_program.c
(3.35 KB)
📄
test_read_filter_program_signature.c
(3.93 KB)
📄
test_read_filter_uudecode.c
(6.24 KB)
📄
test_read_format_7zip.c
(29.56 KB)
📄
test_read_format_7zip_bcj2_bzip2.7z.uu
(19.17 KB)
📄
test_read_format_7zip_bcj2_copy_1.7z.uu
(37.04 KB)
📄
test_read_format_7zip_bcj2_copy_2.7z.uu
(37.06 KB)
📄
test_read_format_7zip_bcj2_copy_lzma.7z.uu
(34.24 KB)
📄
test_read_format_7zip_bcj2_deflate.7z.uu
(18.77 KB)
📄
test_read_format_7zip_bcj2_lzma1_1.7z.uu
(17.19 KB)
📄
test_read_format_7zip_bcj2_lzma1_2.7z.uu
(14.38 KB)
📄
test_read_format_7zip_bcj2_lzma2_1.7z.uu
(17.19 KB)
📄
test_read_format_7zip_bcj2_lzma2_2.7z.uu
(14.39 KB)
📄
test_read_format_7zip_bcj_bzip2.7z.uu
(16.84 KB)
📄
test_read_format_7zip_bcj_copy.7z.uu
(36.97 KB)
📄
test_read_format_7zip_bcj_deflate.7z.uu
(16.47 KB)
📄
test_read_format_7zip_bcj_lzma1.7z.uu
(14.68 KB)
📄
test_read_format_7zip_bcj_lzma2.7z.uu
(14.68 KB)
📄
test_read_format_7zip_bzip2.7z.uu
(2.09 KB)
📄
test_read_format_7zip_copy.7z.uu
(266 B)
📄
test_read_format_7zip_copy_2.7z.uu
(488 B)
📄
test_read_format_7zip_deflate.7z.uu
(2 KB)
📄
test_read_format_7zip_delta4_lzma1.7z.uu
(24.46 KB)
📄
test_read_format_7zip_delta4_lzma2.7z.uu
(24.47 KB)
📄
test_read_format_7zip_delta_lzma1.7z.uu
(16.81 KB)
📄
test_read_format_7zip_delta_lzma2.7z.uu
(16.82 KB)
📄
test_read_format_7zip_empty_archive.7z.uu
(101 B)
📄
test_read_format_7zip_empty_file.7z.uu
(160 B)
📄
test_read_format_7zip_encryption.7z.uu
(256 B)
📄
test_read_format_7zip_encryption_data.c
(3.01 KB)
📄
test_read_format_7zip_encryption_header.7z.uu
(333 B)
📄
test_read_format_7zip_encryption_header.c
(3.06 KB)
📄
test_read_format_7zip_encryption_partially.7z.uu
(368 B)
📄
test_read_format_7zip_encryption_partially.c
(3.67 KB)
📄
test_read_format_7zip_lzma1.7z.uu
(2.05 KB)
📄
test_read_format_7zip_lzma1_2.7z.uu
(355 B)
📄
test_read_format_7zip_lzma1_lzma2.7z.uu
(447 B)
📄
test_read_format_7zip_lzma2.7z.uu
(2.06 KB)
📄
test_read_format_7zip_malformed.7z.uu
(127 B)
📄
test_read_format_7zip_malformed.c
(2.58 KB)
📄
test_read_format_7zip_malformed2.7z.uu
(128 B)
📄
test_read_format_7zip_packinfo_digests.7z.uu
(266 B)
📄
test_read_format_7zip_packinfo_digests.c
(3.5 KB)
📄
test_read_format_7zip_ppmd.7z.uu
(14.05 KB)
📄
test_read_format_7zip_symbolic_name.7z.uu
(317 B)
📄
test_read_format_ar.ar.uu
(480 B)
📄
test_read_format_ar.c
(3.92 KB)
📄
test_read_format_cab.c
(12.99 KB)
📄
test_read_format_cab_1.cab.uu
(411 B)
📄
test_read_format_cab_2.cab.uu
(383 B)
📄
test_read_format_cab_3.cab.uu
(445 B)
📄
test_read_format_cab_filename.c
(6.16 KB)
📄
test_read_format_cab_filename_cp932.cab.uu
(255 B)
📄
test_read_format_cpio_afio.c
(4.97 KB)
📄
test_read_format_cpio_bin.c
(3.25 KB)
📄
test_read_format_cpio_bin_Z.c
(2.74 KB)
📄
test_read_format_cpio_bin_be.c
(2.61 KB)
📄
test_read_format_cpio_bin_be.cpio.uu
(276 B)
📄
test_read_format_cpio_bin_bz2.c
(2.6 KB)
📄
test_read_format_cpio_bin_gz.c
(2.69 KB)
📄
test_read_format_cpio_bin_le.c
(2.61 KB)
📄
test_read_format_cpio_bin_le.cpio.uu
(266 B)
📄
test_read_format_cpio_bin_lzip.c
(2.76 KB)
📄
test_read_format_cpio_bin_lzma.c
(2.71 KB)
📄
test_read_format_cpio_bin_xz.c
(3.12 KB)
📄
test_read_format_cpio_filename.c
(28.75 KB)
📄
test_read_format_cpio_filename_cp866.cpio.uu
(757 B)
📄
test_read_format_cpio_filename_eucjp.cpio.uu
(757 B)
📄
test_read_format_cpio_filename_koi8r.cpio.uu
(757 B)
📄
test_read_format_cpio_filename_utf8_jp.cpio.uu
(759 B)
📄
test_read_format_cpio_filename_utf8_ru.cpio.uu
(759 B)
📄
test_read_format_cpio_odc.c
(3.44 KB)
📄
test_read_format_cpio_svr4_bzip2_rpm.c
(4.62 KB)
📄
test_read_format_cpio_svr4_bzip2_rpm.rpm.uu
(2.71 KB)
📄
test_read_format_cpio_svr4_gzip.c
(2.74 KB)
📄
test_read_format_cpio_svr4_gzip_rpm.c
(4.62 KB)
📄
test_read_format_cpio_svr4_gzip_rpm.rpm.uu
(2.63 KB)
📄
test_read_format_cpio_svr4c_Z.c
(2.84 KB)
📄
test_read_format_empty.c
(2.08 KB)
📄
test_read_format_gtar_filename.c
(16.85 KB)
📄
test_read_format_gtar_filename_cp866.tar.Z.uu
(448 B)
📄
test_read_format_gtar_filename_eucjp.tar.Z.uu
(448 B)
📄
test_read_format_gtar_filename_koi8r.tar.Z.uu
(440 B)
📄
test_read_format_gtar_gz.c
(2.75 KB)
📄
test_read_format_gtar_lzma.c
(3.17 KB)
📄
test_read_format_gtar_sparse.c
(8.39 KB)
📄
test_read_format_gtar_sparse_1_13.tar.uu
(82.73 KB)
📄
test_read_format_gtar_sparse_1_17.tar.uu
(82.73 KB)
📄
test_read_format_gtar_sparse_1_17_posix00.tar.uu
(96.52 KB)
📄
test_read_format_gtar_sparse_1_17_posix01.tar.uu
(82.74 KB)
📄
test_read_format_gtar_sparse_1_17_posix10.tar.uu
(82.74 KB)
📄
test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu
(82.75 KB)
📄
test_read_format_gtar_sparse_skip_entry.c
(5.13 KB)
📄
test_read_format_gtar_sparse_skip_entry.tar.Z.uu
(750 B)
📄
test_read_format_iso.iso.Z.uu
(1.32 KB)
📄
test_read_format_iso_2.iso.Z.uu
(1.98 KB)
📄
test_read_format_iso_Z.c
(3.85 KB)
📄
test_read_format_iso_joliet.iso.Z.uu
(3.71 KB)
📄
test_read_format_iso_joliet_by_nero.iso.Z.uu
(3.74 KB)
📄
test_read_format_iso_joliet_long.iso.Z.uu
(4.03 KB)
📄
test_read_format_iso_joliet_rockridge.iso.Z.uu
(3.84 KB)
📄
test_read_format_iso_multi_extent.c
(3.85 KB)
📄
test_read_format_iso_multi_extent.iso.Z.uu
(3.78 KB)
📄
test_read_format_iso_rockridge.iso.Z.uu
(12.23 KB)
📄
test_read_format_iso_rockridge_ce.iso.Z.uu
(3.53 KB)
📄
test_read_format_iso_rockridge_new.iso.Z.uu
(12.35 KB)
📄
test_read_format_iso_rockridge_rr_moved.iso.Z.uu
(18.13 KB)
📄
test_read_format_iso_xorriso.c
(8.47 KB)
📄
test_read_format_iso_xorriso.iso.Z.uu
(3.53 KB)
📄
test_read_format_iso_zisofs.iso.Z.uu
(3.56 KB)
📄
test_read_format_isojoliet_bz2.c
(5.82 KB)
📄
test_read_format_isojoliet_long.c
(5.69 KB)
📄
test_read_format_isojoliet_rr.c
(7.16 KB)
📄
test_read_format_isojoliet_versioned.c
(3.66 KB)
📄
test_read_format_isorr_bz2.c
(8.89 KB)
📄
test_read_format_isorr_ce.c
(8.11 KB)
📄
test_read_format_isorr_new_bz2.c
(8.92 KB)
📄
test_read_format_isorr_rr_moved.c
(11.53 KB)
📄
test_read_format_isozisofs_bz2.c
(7.96 KB)
📄
test_read_format_lha.c
(10.27 KB)
📄
test_read_format_lha_bugfix_0.c
(2.99 KB)
📄
test_read_format_lha_bugfix_0.lzh.uu
(998 B)
📄
test_read_format_lha_filename.c
(7.76 KB)
📄
test_read_format_lha_filename_cp932.lzh.uu
(275 B)
📄
test_read_format_lha_filename_utf16.c
(5.55 KB)
📄
test_read_format_lha_filename_utf16.lzh.uu
(1.03 KB)
📄
test_read_format_lha_header0.lzh.uu
(529 B)
📄
test_read_format_lha_header1.lzh.uu
(629 B)
📄
test_read_format_lha_header2.lzh.uu
(629 B)
📄
test_read_format_lha_header3.lzh.uu
(807 B)
📄
test_read_format_lha_lh0.lzh.uu
(645 B)
📄
test_read_format_lha_lh6.lzh.uu
(629 B)
📄
test_read_format_lha_lh7.lzh.uu
(629 B)
📄
test_read_format_lha_withjunk.lzh.uu
(650 B)
📄
test_read_format_mtree.c
(34.82 KB)
📄
test_read_format_mtree.mtree.uu
(2.29 KB)
📄
test_read_format_mtree_crash747.c
(1.95 KB)
📄
test_read_format_mtree_crash747.mtree.bz2.uu
(212 B)
📄
test_read_format_mtree_nomagic.mtree.uu
(505 B)
📄
test_read_format_mtree_nomagic2.mtree.uu
(432 B)
📄
test_read_format_mtree_nomagic3.mtree.uu
(432 B)
📄
test_read_format_mtree_noprint.mtree.uu
(115 B)
📄
test_read_format_pax_bz2.c
(3.19 KB)
📄
test_read_format_rar.c
(156.59 KB)
📄
test_read_format_rar.rar.uu
(482 B)
📄
test_read_format_rar5.c
(44.49 KB)
📄
test_read_format_rar5_arm.rar.uu
(55.32 KB)
📄
test_read_format_rar5_arm_filter_on_window_boundary.rar.uu
(408 B)
📄
test_read_format_rar5_blake2.rar.uu
(935 B)
📄
test_read_format_rar5_block_size_is_too_small.rar.uu
(372 B)
📄
test_read_format_rar5_compressed.rar.uu
(640 B)
📄
test_read_format_rar5_different_solid_window_size.rar.uu
(4.28 KB)
📄
test_read_format_rar5_different_window_size.rar.uu
(40.73 KB)
📄
test_read_format_rar5_different_winsize_on_merge.rar.uu
(822 B)
📄
test_read_format_rar5_distance_overflow.rar.uu
(392 B)
📄
test_read_format_rar5_extra_field_version.rar.uu
(452 B)
📄
test_read_format_rar5_fileattr.rar.uu
(635 B)
📄
test_read_format_rar5_hardlink.rar.uu
(221 B)
📄
test_read_format_rar5_invalid_dict_reference.rar.uu
(417 B)
📄
test_read_format_rar5_leftshift1.rar.uu
(393 B)
📄
test_read_format_rar5_leftshift2.rar.uu
(203 B)
📄
test_read_format_rar5_multiarchive.part01.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part02.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part03.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part04.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part05.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part06.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part07.rar.uu
(20.71 KB)
📄
test_read_format_rar5_multiarchive.part08.rar.uu
(12.44 KB)
📄
test_read_format_rar5_multiarchive_solid.part01.rar.uu
(17.98 KB)
📄
test_read_format_rar5_multiarchive_solid.part02.rar.uu
(17.98 KB)
📄
test_read_format_rar5_multiarchive_solid.part03.rar.uu
(17.98 KB)
📄
test_read_format_rar5_multiarchive_solid.part04.rar.uu
(4.48 KB)
📄
test_read_format_rar5_multiple_files.rar.uu
(2.27 KB)
📄
test_read_format_rar5_multiple_files_solid.rar.uu
(982 B)
📄
test_read_format_rar5_nonempty_dir_stream.rar.uu
(402 B)
📄
test_read_format_rar5_owner.rar.uu
(322 B)
📄
test_read_format_rar5_readtables_overflow.rar.uu
(786 B)
📄
test_read_format_rar5_solid.rar.uu
(1.46 KB)
📄
test_read_format_rar5_stored.rar.uu
(186 B)
📄
test_read_format_rar5_stored_manyfiles.rar.uu
(3.54 KB)
📄
test_read_format_rar5_symlink.rar.uu
(316 B)
📄
test_read_format_rar5_truncated_huff.rar.uu
(281 B)
📄
test_read_format_rar5_win32.rar.uu
(4.04 KB)
📄
test_read_format_rar_binary_data.rar.uu
(1.42 MB)
📄
test_read_format_rar_compress_best.rar.uu
(16.41 KB)
📄
test_read_format_rar_compress_normal.rar.uu
(19.69 KB)
📄
test_read_format_rar_encryption_data.c
(3.46 KB)
📄
test_read_format_rar_encryption_data.rar.uu
(315 B)
📄
test_read_format_rar_encryption_header.c
(3.06 KB)
📄
test_read_format_rar_encryption_header.rar.uu
(365 B)
📄
test_read_format_rar_encryption_partially.c
(3.53 KB)
📄
test_read_format_rar_encryption_partially.rar.uu
(302 B)
📄
test_read_format_rar_invalid1.c
(2.03 KB)
📄
test_read_format_rar_invalid1.rar.uu
(138 B)
📄
test_read_format_rar_multi_lzss_blocks.rar.uu
(26.71 KB)
📄
test_read_format_rar_multivolume.part0001.rar.uu
(80.75 KB)
📄
test_read_format_rar_multivolume.part0002.rar.uu
(80.75 KB)
📄
test_read_format_rar_multivolume.part0003.rar.uu
(80.75 KB)
📄
test_read_format_rar_multivolume.part0004.rar.uu
(12.4 KB)
📄
test_read_format_rar_noeof.rar.uu
(142 B)
📄
test_read_format_rar_ppmd_lzss_conversion.rar.uu
(237.77 KB)
📄
test_read_format_rar_ppmd_use_after_free.rar.uu
(479 B)
📄
test_read_format_rar_ppmd_use_after_free2.rar.uu
(460 B)
📄
test_read_format_rar_sfx.exe.uu
(133.92 KB)
📄
test_read_format_rar_subblock.rar.uu
(250 B)
📄
test_read_format_rar_unicode.rar.uu
(967 B)
📄
test_read_format_rar_windows.rar.uu
(1.12 KB)
📄
test_read_format_raw.bufr.uu
(5.56 KB)
📄
test_read_format_raw.c
(6.44 KB)
📄
test_read_format_raw.data.Z.uu
(68 B)
📄
test_read_format_raw.data.gz.uu
(107 B)
📄
test_read_format_raw.data.uu
(62 B)
📄
test_read_format_tar.c
(24.86 KB)
📄
test_read_format_tar_concatenated.c
(3.46 KB)
📄
test_read_format_tar_concatenated.tar.uu
(4.19 KB)
📄
test_read_format_tar_empty_filename.c
(2.81 KB)
📄
test_read_format_tar_empty_filename.tar.uu
(2.12 KB)
📄
test_read_format_tar_empty_pax.c
(2.61 KB)
📄
test_read_format_tar_empty_pax.tar.Z.uu
(467 B)
📄
test_read_format_tar_empty_with_gnulabel.c
(2.26 KB)
📄
test_read_format_tar_empty_with_gnulabel.tar.uu
(13.84 KB)
📄
test_read_format_tar_filename.c
(14.37 KB)
📄
test_read_format_tar_filename_koi8r.tar.Z.uu
(692 B)
📄
test_read_format_tbz.c
(2.69 KB)
📄
test_read_format_tgz.c
(2.72 KB)
📄
test_read_format_tlz.c
(2.82 KB)
📄
test_read_format_txz.c
(3.01 KB)
📄
test_read_format_tz.c
(2.84 KB)
📄
test_read_format_ustar_filename.c
(19.57 KB)
📄
test_read_format_ustar_filename_cp866.tar.Z.uu
(370 B)
📄
test_read_format_ustar_filename_eucjp.tar.Z.uu
(376 B)
📄
test_read_format_ustar_filename_koi8r.tar.Z.uu
(362 B)
📄
test_read_format_warc.c
(3.64 KB)
📄
test_read_format_warc.warc.uu
(1.24 KB)
📄
test_read_format_xar.c
(44.73 KB)
📄
test_read_format_zip.c
(36.61 KB)
📄
test_read_format_zip.zip.uu
(647 B)
📄
test_read_format_zip_7075_utf8_paths.c
(3.75 KB)
📄
test_read_format_zip_7075_utf8_paths.zip.uu
(1.08 KB)
📄
test_read_format_zip_7z_lzma.zip.uu
(2.55 KB)
📄
test_read_format_zip_bz2_hang.zip.uu
(138 B)
📄
test_read_format_zip_bzip2.zipx.uu
(1003 B)
📄
test_read_format_zip_bzip2_multi.zipx.uu
(5.68 KB)
📄
test_read_format_zip_comment_stored.c
(2.93 KB)
📄
test_read_format_zip_comment_stored_1.zip.uu
(560 B)
📄
test_read_format_zip_comment_stored_2.zip.uu
(33.02 KB)
📄
test_read_format_zip_encryption_data.c
(3.48 KB)
📄
test_read_format_zip_encryption_data.zip.uu
(1.39 KB)
📄
test_read_format_zip_encryption_header.c
(3.06 KB)
📄
test_read_format_zip_encryption_header.zip.uu
(1.81 KB)
📄
test_read_format_zip_encryption_partially.c
(3.53 KB)
📄
test_read_format_zip_encryption_partially.zip.uu
(964 B)
📄
test_read_format_zip_extra_padding.c
(3.74 KB)
📄
test_read_format_zip_extra_padding.zip.uu
(271 B)
📄
test_read_format_zip_filename.c
(42.68 KB)
📄
test_read_format_zip_filename_cp866.zip.uu
(481 B)
📄
test_read_format_zip_filename_cp932.zip.uu
(391 B)
📄
test_read_format_zip_filename_koi8r.zip.uu
(481 B)
📄
test_read_format_zip_filename_utf8_jp.zip.uu
(766 B)
📄
test_read_format_zip_filename_utf8_ru.zip.uu
(517 B)
📄
test_read_format_zip_filename_utf8_ru2.zip.uu
(502 B)
📄
test_read_format_zip_high_compression.c
(4.93 KB)
📄
test_read_format_zip_high_compression.zip.uu
(932 B)
📄
test_read_format_zip_jar.c
(2.36 KB)
📄
test_read_format_zip_jar.jar.uu
(215 B)
📄
test_read_format_zip_length_at_end.zip.uu
(321 B)
📄
test_read_format_zip_lzma.zipx.uu
(1010 B)
📄
test_read_format_zip_lzma_alone_leak.zipx.uu
(178 B)
📄
test_read_format_zip_lzma_multi.zipx.uu
(5.58 KB)
📄
test_read_format_zip_lzma_stream_end.zipx.uu
(1002 B)
📄
test_read_format_zip_mac_metadata.c
(4.85 KB)
📄
test_read_format_zip_mac_metadata.zip.uu
(902 B)
📄
test_read_format_zip_malformed.c
(2.49 KB)
📄
test_read_format_zip_malformed1.zip.uu
(140 B)
📄
test_read_format_zip_msdos.c
(4.87 KB)
📄
test_read_format_zip_msdos.zip.uu
(1.2 KB)
📄
test_read_format_zip_nested.c
(3.61 KB)
📄
test_read_format_zip_nested.zip.uu
(842 B)
📄
test_read_format_zip_nofiletype.c
(2.68 KB)
📄
test_read_format_zip_nofiletype.zip.uu
(330 B)
📄
test_read_format_zip_padded.c
(3.22 KB)
📄
test_read_format_zip_padded1.zip.uu
(599 B)
📄
test_read_format_zip_padded2.zip.uu
(741 B)
📄
test_read_format_zip_padded3.zip.uu
(861 B)
📄
test_read_format_zip_ppmd8.zipx.uu
(879 B)
📄
test_read_format_zip_ppmd8_crash_1.zipx.uu
(118 B)
📄
test_read_format_zip_ppmd8_crash_2.zipx.uu
(118 B)
📄
test_read_format_zip_ppmd8_multi.zipx.uu
(4.9 KB)
📄
test_read_format_zip_sfx.c
(2.66 KB)
📄
test_read_format_zip_sfx.uu
(1.91 KB)
📄
test_read_format_zip_symlink.zip.uu
(475 B)
📄
test_read_format_zip_traditional_encryption_data.c
(6.72 KB)
📄
test_read_format_zip_traditional_encryption_data.zip.uu
(615 B)
📄
test_read_format_zip_ux.zip.uu
(280 B)
📄
test_read_format_zip_winzip_aes.c
(5.69 KB)
📄
test_read_format_zip_winzip_aes128.zip.uu
(3.87 KB)
📄
test_read_format_zip_winzip_aes256.zip.uu
(3.88 KB)
📄
test_read_format_zip_winzip_aes256_large.zip.uu
(132.06 KB)
📄
test_read_format_zip_winzip_aes256_stored.zip.uu
(9.47 KB)
📄
test_read_format_zip_winzip_aes_large.c
(8.91 KB)
📄
test_read_format_zip_with_invalid_traditional_eocd.c
(2.45 KB)
📄
test_read_format_zip_with_invalid_traditional_eocd.zip.uu
(684 B)
📄
test_read_format_zip_xz_multi.zipx.uu
(7.42 KB)
📄
test_read_format_zip_zip64.c
(4.37 KB)
📄
test_read_format_zip_zip64a.zip.uu
(260 B)
📄
test_read_format_zip_zip64b.zip.uu
(248 B)
📄
test_read_large.c
(3.67 KB)
📄
test_read_large_splitted_rar_aa.uu
(53.84 KB)
📄
test_read_large_splitted_rar_ab.uu
(53.84 KB)
📄
test_read_large_splitted_rar_ac.uu
(53.84 KB)
📄
test_read_large_splitted_rar_ad.uu
(53.84 KB)
📄
test_read_large_splitted_rar_ae.uu
(22.49 KB)
📄
test_read_pax_truncated.c
(10.35 KB)
📄
test_read_pax_xattr_rht_security_selinux.c
(2.56 KB)
📄
test_read_pax_xattr_rht_security_selinux.tar.uu
(13.84 KB)
📄
test_read_pax_xattr_schily.c
(2.88 KB)
📄
test_read_pax_xattr_schily.tar.uu
(13.83 KB)
📄
test_read_position.c
(4.14 KB)
📄
test_read_set_format.c
(8.39 KB)
📄
test_read_splitted_rar_aa.uu
(160 B)
📄
test_read_splitted_rar_ab.uu
(160 B)
📄
test_read_splitted_rar_ac.uu
(160 B)
📄
test_read_splitted_rar_ad.uu
(68 B)
📄
test_read_too_many_filters.c
(2.08 KB)
📄
test_read_too_many_filters.gz.uu
(573 B)
📄
test_read_truncated.c
(5.13 KB)
📄
test_read_truncated_filter.c
(5.18 KB)
📄
test_sparse_basic.c
(17.67 KB)
📄
test_splitted_rar_seek_support_aa.uu
(9.44 KB)
📄
test_splitted_rar_seek_support_ab.uu
(9.44 KB)
📄
test_splitted_rar_seek_support_ac.uu
(8.37 KB)
📄
test_tar_filenames.c
(5.05 KB)
📄
test_tar_large.c
(8.08 KB)
📄
test_ustar_filename_encoding.c
(12.12 KB)
📄
test_ustar_filenames.c
(5.71 KB)
📄
test_warn_missing_hardlink_target.c
(1.85 KB)
📄
test_write_disk.c
(12.62 KB)
📄
test_write_disk_appledouble.c
(7.95 KB)
📄
test_write_disk_appledouble.cpio.gz.uu
(558 B)
📄
test_write_disk_failures.c
(2.48 KB)
📄
test_write_disk_hardlink.c
(7.45 KB)
📄
test_write_disk_hfs_compression.c
(9.93 KB)
📄
test_write_disk_hfs_compression.tgz.uu
(108.83 KB)
📄
test_write_disk_lookup.c
(4.94 KB)
📄
test_write_disk_mac_metadata.c
(7.03 KB)
📄
test_write_disk_mac_metadata.tar.gz.uu
(678 B)
📄
test_write_disk_no_hfs_compression.c
(8.01 KB)
📄
test_write_disk_no_hfs_compression.tgz.uu
(106.69 KB)
📄
test_write_disk_perms.c
(17.58 KB)
📄
test_write_disk_secure.c
(11.75 KB)
📄
test_write_disk_secure744.c
(3.09 KB)
📄
test_write_disk_secure745.c
(2.9 KB)
📄
test_write_disk_secure746.c
(4.61 KB)
📄
test_write_disk_sparse.c
(8.72 KB)
📄
test_write_disk_symlink.c
(9.42 KB)
📄
test_write_disk_times.c
(5.86 KB)
📄
test_write_filter_b64encode.c
(6.75 KB)
📄
test_write_filter_bzip2.c
(9.76 KB)
📄
test_write_filter_compress.c
(3.36 KB)
📄
test_write_filter_gzip.c
(10.73 KB)
📄
test_write_filter_gzip_timestamp.c
(4.34 KB)
📄
test_write_filter_lrzip.c
(4.75 KB)
📄
test_write_filter_lz4.c
(13.55 KB)
📄
test_write_filter_lzip.c
(9.29 KB)
📄
test_write_filter_lzma.c
(9.52 KB)
📄
test_write_filter_lzop.c
(9.75 KB)
📄
test_write_filter_program.c
(4.72 KB)
📄
test_write_filter_uuencode.c
(6.74 KB)
📄
test_write_filter_xz.c
(9.72 KB)
📄
test_write_filter_zstd.c
(9.67 KB)
📄
test_write_format_7zip.c
(19.63 KB)
📄
test_write_format_7zip_empty.c
(9.93 KB)
📄
test_write_format_7zip_large.c
(5.74 KB)
📄
test_write_format_ar.c
(7.65 KB)
📄
test_write_format_cpio.c
(8.99 KB)
📄
test_write_format_cpio_empty.c
(2.68 KB)
📄
test_write_format_cpio_newc.c
(7.94 KB)
📄
test_write_format_cpio_odc.c
(9.1 KB)
📄
test_write_format_gnutar.c
(10.03 KB)
📄
test_write_format_gnutar_filenames.c
(5.32 KB)
📄
test_write_format_iso9660.c
(40.42 KB)
📄
test_write_format_iso9660_boot.c
(9.73 KB)
📄
test_write_format_iso9660_empty.c
(7.22 KB)
📄
test_write_format_iso9660_filename.c
(12.4 KB)
📄
test_write_format_iso9660_zisofs.c
(28.81 KB)
📄
test_write_format_mtree.c
(9.68 KB)
📄
test_write_format_mtree_absolute_path.c
(3.81 KB)
📄
test_write_format_mtree_classic.c
(6.5 KB)
📄
test_write_format_mtree_classic_indent.c
(6.71 KB)
📄
test_write_format_mtree_fflags.c
(4.13 KB)
📄
test_write_format_mtree_no_separator.c
(3.95 KB)
📄
test_write_format_mtree_quoted_filename.c
(3.3 KB)
📄
test_write_format_pax.c
(9.52 KB)
📄
test_write_format_raw.c
(4.7 KB)
📄
test_write_format_raw_b64.c
(2.9 KB)
📄
test_write_format_shar_empty.c
(2.21 KB)
📄
test_write_format_tar.c
(4.44 KB)
📄
test_write_format_tar_empty.c
(2.82 KB)
📄
test_write_format_tar_sparse.c
(10.68 KB)
📄
test_write_format_tar_ustar.c
(13.19 KB)
📄
test_write_format_tar_v7tar.c
(9.15 KB)
📄
test_write_format_warc.c
(5.56 KB)
📄
test_write_format_warc_empty.c
(4.64 KB)
📄
test_write_format_xar.c
(10.92 KB)
📄
test_write_format_xar_empty.c
(4.58 KB)
📄
test_write_format_zip.c
(32.25 KB)
📄
test_write_format_zip_compression_store.c
(16.05 KB)
📄
test_write_format_zip_empty.c
(3.37 KB)
📄
test_write_format_zip_empty_zip64.c
(4.62 KB)
📄
test_write_format_zip_file.c
(9.87 KB)
📄
test_write_format_zip_file_zip64.c
(11.52 KB)
📄
test_write_format_zip_large.c
(13.63 KB)
📄
test_write_format_zip_zip64.c
(2.62 KB)
📄
test_write_open_memory.c
(3.21 KB)
📄
test_write_read_format_zip.c
(26.34 KB)
📄
test_xattr_platform.c
(3.57 KB)
📄
test_zip_filename_encoding.c
(17.47 KB)
Editing: test_sparse_basic.c
/*- * Copyright (c) 2010-2012 Michihiro NAKAJIMA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "test.h" __FBSDID("$FreeBSD$"); #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> #endif #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif #ifdef HAVE_FCNTL_H #include <fcntl.h> #endif #ifdef HAVE_LIMITS_H #include <limits.h> #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #ifdef HAVE_LINUX_TYPES_H #include <linux/types.h> #endif #ifdef HAVE_LINUX_FIEMAP_H #include <linux/fiemap.h> #endif #ifdef HAVE_LINUX_FS_H #include <linux/fs.h> #endif /* The logic to compare sparse file data read from disk with the * specification is a little involved. Set to 1 to have the progress * dumped. */ #define DEBUG 0 /* * NOTE: On FreeBSD and Solaris, this test needs ZFS. * You may perform this test as * 'TMPDIR=<a directory on the ZFS> libarchive_test'. */ struct sparse { enum { DATA, HOLE, END } type; size_t size; }; static void create_sparse_file(const char *, const struct sparse *); #if defined(__APPLE__) /* On APFS holes need to be at least 4096x4097 bytes */ #define MIN_HOLE 16781312 #else /* Elsewhere we work with 4096*10 bytes */ #define MIN_HOLE 409600 #endif #if defined(_WIN32) && !defined(__CYGWIN__) #include <winioctl.h> /* * Create a sparse file on Windows. */ #if !defined(PATH_MAX) #define PATH_MAX MAX_PATH #endif #if !defined(__BORLANDC__) #define getcwd _getcwd #endif static int is_sparse_supported(const char *path) { char root[MAX_PATH+1]; char vol[MAX_PATH+1]; char sys[MAX_PATH+1]; DWORD flags; BOOL r; strncpy(root, path, sizeof(root)-1); if (((root[0] >= 'c' && root[0] <= 'z') || (root[0] >= 'C' && root[0] <= 'Z')) && root[1] == ':' && (root[2] == '\\' || root[2] == '/')) root[3] = '\0'; else return (0); assertEqualInt((r = GetVolumeInformation(root, vol, sizeof(vol), NULL, NULL, &flags, sys, sizeof(sys))), 1); return (r != 0 && (flags & FILE_SUPPORTS_SPARSE_FILES) != 0); } static void create_sparse_file(const char *path, const struct sparse *s) { char buff[1024]; HANDLE handle; DWORD dmy; memset(buff, ' ', sizeof(buff)); handle = CreateFileA(path, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); assert(handle != INVALID_HANDLE_VALUE); assert(DeviceIoControl(handle, FSCTL_SET_SPARSE, NULL, 0, NULL, 0, &dmy, NULL) != 0); uint64_t offsetSoFar = 0; while (s->type != END) { if (s->type == HOLE) { LARGE_INTEGER fileOffset, beyondOffset, distanceToMove; fileOffset.QuadPart = offsetSoFar; beyondOffset.QuadPart = offsetSoFar + s->size; distanceToMove.QuadPart = s->size; FILE_ZERO_DATA_INFORMATION zeroInformation; zeroInformation.FileOffset = fileOffset; zeroInformation.BeyondFinalZero = beyondOffset; DWORD bytesReturned; assert(SetFilePointerEx(handle, distanceToMove, NULL, FILE_CURRENT) != 0); assert(SetEndOfFile(handle) != 0); assert(DeviceIoControl(handle, FSCTL_SET_ZERO_DATA, &zeroInformation, sizeof(FILE_ZERO_DATA_INFORMATION), NULL, 0, &bytesReturned, NULL) != 0); } else { DWORD w, wr; size_t size; size = s->size; while (size) { if (size > sizeof(buff)) w = sizeof(buff); else w = (DWORD)size; assert(WriteFile(handle, buff, w, &wr, NULL) != 0); size -= wr; } } offsetSoFar += s->size; s++; } assertEqualInt(CloseHandle(handle), 1); } #else #if defined(HAVE_LINUX_FIEMAP_H) /* * FIEMAP, which can detect 'hole' of a sparse file, has * been supported from 2.6.28 */ static int is_sparse_supported_fiemap(const char *path) { const struct sparse sparse_file[] = { /* This hole size is too small to create a sparse * files for almost filesystem. */ { HOLE, 1024 }, { DATA, 10240 }, { END, 0 } }; int fd, r; struct fiemap *fm; char buff[1024]; const char *testfile = "can_sparse"; (void)path; /* UNUSED */ memset(buff, 0, sizeof(buff)); create_sparse_file(testfile, sparse_file); fd = open(testfile, O_RDWR); if (fd < 0) return (0); fm = (struct fiemap *)buff; fm->fm_start = 0; fm->fm_length = ~0ULL;; fm->fm_flags = FIEMAP_FLAG_SYNC; fm->fm_extent_count = (sizeof(buff) - sizeof(*fm))/ sizeof(struct fiemap_extent); r = ioctl(fd, FS_IOC_FIEMAP, fm); close(fd); unlink(testfile); return (r >= 0); } #if !defined(SEEK_HOLE) || !defined(SEEK_DATA) static int is_sparse_supported(const char *path) { return is_sparse_supported_fiemap(path); } #endif #endif #if defined(_PC_MIN_HOLE_SIZE) /* * FreeBSD and Solaris can detect 'hole' of a sparse file * through lseek(HOLE) on ZFS. (UFS does not support yet) */ static int is_sparse_supported(const char *path) { return (pathconf(path, _PC_MIN_HOLE_SIZE) > 0); } #elif defined(SEEK_HOLE) && defined(SEEK_DATA) static int is_sparse_supported(const char *path) { const struct sparse sparse_file[] = { /* This hole size is too small to create a sparse * files for almost filesystem. */ { HOLE, 1024 }, { DATA, 10240 }, { END, 0 } }; int fd, r; const char *testfile = "can_sparse"; (void)path; /* UNUSED */ create_sparse_file(testfile, sparse_file); fd = open(testfile, O_RDWR); if (fd < 0) return (0); r = lseek(fd, 0, SEEK_HOLE); close(fd); unlink(testfile); #if defined(HAVE_LINUX_FIEMAP_H) if (r < 0) return (is_sparse_supported_fiemap(path)); #endif return (r >= 0); } #elif !defined(HAVE_LINUX_FIEMAP_H) /* * Other system may do not have the API such as lseek(HOLE), * which detect 'hole' of a sparse file. */ static int is_sparse_supported(const char *path) { (void)path; /* UNUSED */ return (0); } #endif /* * Create a sparse file on POSIX like system. */ static void create_sparse_file(const char *path, const struct sparse *s) { char buff[1024]; int fd; uint64_t total_size = 0; const struct sparse *cur = s; memset(buff, ' ', sizeof(buff)); assert((fd = open(path, O_CREAT | O_WRONLY, 0600)) != -1); /* Handle holes at the end by extending the file */ while (cur->type != END) { total_size += cur->size; ++cur; } assert(ftruncate(fd, total_size) != -1); while (s->type != END) { if (s->type == HOLE) { assert(lseek(fd, s->size, SEEK_CUR) != (off_t)-1); } else { size_t w, size; size = s->size; while (size) { if (size > sizeof(buff)) w = sizeof(buff); else w = size; assert(write(fd, buff, w) != (ssize_t)-1); size -= w; } } s++; } close(fd); } #endif /* * Sparse test with directory traversals. */ static void verify_sparse_file(struct archive *a, const char *path, const struct sparse *sparse, int expected_holes) { struct archive_entry *ae; const void *buff; size_t bytes_read; int64_t offset, expected_offset, last_offset; int holes_seen = 0; create_sparse_file(path, sparse); assert((ae = archive_entry_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, path)); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae)); expected_offset = 0; last_offset = 0; while (ARCHIVE_OK == archive_read_data_block(a, &buff, &bytes_read, &offset)) { const char *start = buff; #if DEBUG fprintf(stderr, "%s: bytes_read=%d offset=%d\n", path, (int)bytes_read, (int)offset); #endif if (offset > last_offset) { ++holes_seen; } /* Blocks entirely before the data we just read. */ while (expected_offset + (int64_t)sparse->size < offset) { #if DEBUG fprintf(stderr, " skipping expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size); #endif /* Must be holes. */ assert(sparse->type == HOLE); expected_offset += sparse->size; ++sparse; } /* Block that overlaps beginning of data */ if (expected_offset < offset && expected_offset + (int64_t)sparse->size <= offset + (int64_t)bytes_read) { const char *end = (const char *)buff + (expected_offset - offset) + (size_t)sparse->size; #if DEBUG fprintf(stderr, " overlapping hole expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size); #endif /* Must be a hole, overlap must be filled with '\0' */ if (assert(sparse->type == HOLE)) { assertMemoryFilledWith(start, end - start, '\0'); } start = end; expected_offset += sparse->size; ++sparse; } /* Blocks completely contained in data we just read. */ while (expected_offset + (int64_t)sparse->size <= offset + (int64_t)bytes_read) { const char *end = (const char *)buff + (expected_offset - offset) + (size_t)sparse->size; if (sparse->type == HOLE) { #if DEBUG fprintf(stderr, " contained hole expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size); #endif /* verify data corresponding to hole is '\0' */ if (end > (const char *)buff + bytes_read) { end = (const char *)buff + bytes_read; } assertMemoryFilledWith(start, end - start, '\0'); start = end; expected_offset += sparse->size; ++sparse; } else if (sparse->type == DATA) { #if DEBUG fprintf(stderr, " contained data expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size); #endif /* verify data corresponding to hole is ' ' */ if (assert(expected_offset + sparse->size <= offset + bytes_read)) { assert(start == (const char *)buff + (size_t)(expected_offset - offset)); assertMemoryFilledWith(start, end - start, ' '); } start = end; expected_offset += sparse->size; ++sparse; } else { break; } } /* Block that overlaps end of data */ if (expected_offset < offset + (int64_t)bytes_read) { const char *end = (const char *)buff + bytes_read; #if DEBUG fprintf(stderr, " trailing overlap expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size); #endif /* Must be a hole, overlap must be filled with '\0' */ if (assert(sparse->type == HOLE)) { assertMemoryFilledWith(start, end - start, '\0'); } } last_offset = offset + bytes_read; } /* Count a hole at EOF? */ if (last_offset < archive_entry_size(ae)) { ++holes_seen; } /* Verify blocks after last read */ while (sparse->type == HOLE) { expected_offset += sparse->size; ++sparse; } assert(sparse->type == END); assertEqualInt(expected_offset, archive_entry_size(ae)); failure("%s", path); assertEqualInt(holes_seen, expected_holes); assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); archive_entry_free(ae); } #if defined(_WIN32) && !defined(__CYGWIN__) #define close _close #define open _open #endif /* * Sparse test without directory traversals. */ static void verify_sparse_file2(struct archive *a, const char *path, const struct sparse *sparse, int blocks, int preopen) { struct archive_entry *ae; int fd; (void)sparse; /* UNUSED */ assert((ae = archive_entry_new()) != NULL); archive_entry_set_pathname(ae, path); if (preopen) fd = open(path, O_RDONLY | O_BINARY); else fd = -1; assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_entry_from_file(a, ae, fd, NULL)); if (fd >= 0) close(fd); /* Verify the number of holes only, not its offset nor its * length because those alignments are deeply dependence on * its filesystem. */ failure("%s", path); assertEqualInt(blocks, archive_entry_sparse_count(ae)); archive_entry_free(ae); } static void test_sparse_whole_file_data(void) { struct archive_entry *ae; int64_t offset; int i; assert((ae = archive_entry_new()) != NULL); archive_entry_set_size(ae, 1024*10); /* * Add sparse block data up to the file size. */ offset = 0; for (i = 0; i < 10; i++) { archive_entry_sparse_add_entry(ae, offset, 1024); offset += 1024; } failure("There should be no sparse"); assertEqualInt(0, archive_entry_sparse_count(ae)); archive_entry_free(ae); } DEFINE_TEST(test_sparse_basic) { char *cwd; struct archive *a; const char *skip_sparse_tests; /* * The alignment of the hole of sparse files deeply depends * on filesystem. In my experience, sparse_file2 test with * 204800 bytes hole size did not pass on ZFS and the result * of that test seemed the size was too small, thus you should * keep a hole size more than 409600 bytes to pass this test * on all platform. */ const struct sparse sparse_file0[] = { // 0 // 1024 { DATA, 1024 }, { HOLE, MIN_HOLE + 1638400 }, // 2049024 // 2051072 { DATA, 2048 }, { HOLE, MIN_HOLE + 1638400 }, // 4099072 // 4103168 { DATA, 4096 }, { HOLE, MIN_HOLE + 20070400 }, // 24583168 // 24591360 { DATA, 8192 }, { HOLE, MIN_HOLE + 204390400 }, // 229391360 // 229391361 { DATA, 1 }, { END, 0 } }; const struct sparse sparse_file1[] = { { HOLE, MIN_HOLE }, { DATA, 1 }, { HOLE, MIN_HOLE }, { DATA, 1 }, { HOLE, MIN_HOLE }, { END, 0 } }; const struct sparse sparse_file2[] = { { HOLE, MIN_HOLE }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 1 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 2 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 3 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 4 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 5 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 6 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 7 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 8 }, { DATA, 1024 }, { HOLE, MIN_HOLE + 409600 * 9}, { DATA, 1024 },/* 10 */ { HOLE, MIN_HOLE }, { DATA, 1024 * 1 }, { HOLE, MIN_HOLE + 409600 * 1 }, { DATA, 1024 * 2 }, { HOLE, MIN_HOLE + 409600 * 2 }, { DATA, 1024 * 3 }, { HOLE, MIN_HOLE + 409600 * 3 }, { DATA, 1024 * 4 }, { HOLE, MIN_HOLE + 409600 * 4 }, { DATA, 1024 * 5 }, { HOLE, MIN_HOLE + 409600 * 5 }, { DATA, 1024 * 6 }, { HOLE, MIN_HOLE + 409600 * 6 }, { DATA, 1024 * 7 }, { HOLE, MIN_HOLE + 409600 * 7 }, { DATA, 1024 * 8 }, { HOLE, MIN_HOLE + 409600 * 8 }, { DATA, 1024 * 9 }, { HOLE, MIN_HOLE + 409600 * 9}, { DATA, 1024 * 10},/* 20 */ { END, 0 } }; const struct sparse sparse_file3[] = { /* This hole size is too small to create a sparse file */ { HOLE, 1 }, { DATA, 10240 }, { HOLE, 1 }, { DATA, 10240 }, { HOLE, 1 }, { DATA, 10240 }, { END, 0 } }; const struct sparse sparse_file4[] = { { DATA, 4096 }, { HOLE, 0xc0000000 }, /* This hole overflows the offset if stored in 32 bits. */ { DATA, 4096 }, { HOLE, 0x50000000 }, { END, 0 } }; /* * Test for the case that sparse data indicates just the whole file * data. */ test_sparse_whole_file_data(); skip_sparse_tests = getenv("SKIP_TEST_SPARSE"); if (skip_sparse_tests != NULL) { skipping("Skipping sparse tests due to SKIP_TEST_SPARSE " "environment variable"); return; } /* Check if the filesystem where CWD on can * report the number of the holes of a sparse file. */ #ifdef PATH_MAX cwd = getcwd(NULL, PATH_MAX);/* Solaris getcwd needs the size. */ #else cwd = getcwd(NULL, 0); #endif if (!assert(cwd != NULL)) return; if (!is_sparse_supported(cwd)) { free(cwd); skipping("This filesystem or platform do not support " "the reporting of the holes of a sparse file through " "API such as lseek(HOLE)"); return; } /* * Get sparse data through directory traversals. */ assert((a = archive_read_disk_new()) != NULL); verify_sparse_file(a, "file0", sparse_file0, 4); verify_sparse_file(a, "file1", sparse_file1, 3); verify_sparse_file(a, "file2", sparse_file2, 20); /* Encoded non sparse; expect a data block but no sparse entries. */ verify_sparse_file(a, "file3", sparse_file3, 0); verify_sparse_file(a, "file4", sparse_file4, 2); assertEqualInt(ARCHIVE_OK, archive_read_free(a)); /* * Get sparse data through archive_read_disk_entry_from_file(). */ assert((a = archive_read_disk_new()) != NULL); verify_sparse_file2(a, "file0", sparse_file0, 5, 0); verify_sparse_file2(a, "file0", sparse_file0, 5, 1); assertEqualInt(ARCHIVE_OK, archive_read_free(a)); free(cwd); } DEFINE_TEST(test_fully_sparse_files) { char *cwd; struct archive *a; const char *skip_sparse_tests; const struct sparse sparse_file[] = { { HOLE, MIN_HOLE }, { END, 0 } }; skip_sparse_tests = getenv("SKIP_TEST_SPARSE"); if (skip_sparse_tests != NULL) { skipping("Skipping sparse tests due to SKIP_TEST_SPARSE " "environment variable"); return; } /* Check if the filesystem where CWD on can * report the number of the holes of a sparse file. */ #ifdef PATH_MAX cwd = getcwd(NULL, PATH_MAX);/* Solaris getcwd needs the size. */ #else cwd = getcwd(NULL, 0); #endif if (!assert(cwd != NULL)) return; if (!is_sparse_supported(cwd)) { free(cwd); skipping("This filesystem or platform do not support " "the reporting of the holes of a sparse file through " "API such as lseek(HOLE)"); return; } assert((a = archive_read_disk_new()) != NULL); /* Fully sparse files are encoded with a zero-length "data" block. */ verify_sparse_file(a, "file0", sparse_file, 1); assertEqualInt(ARCHIVE_OK, archive_read_free(a)); free(cwd); }
Upload File
Create Folder