libarchive/test/test_open_file.c \
libarchive/test/test_open_filename.c \
libarchive/test/test_pax_filename_encoding.c \
+ libarchive/test/test_pax_xattr_header.c \
libarchive/test/test_read_data_large.c \
libarchive/test/test_read_disk.c \
libarchive/test/test_read_disk_directory_traversals.c \
libarchive/test/test_read_format_7zip_encryption_partially.c \
libarchive/test/test_read_format_7zip_encryption_header.c \
libarchive/test/test_read_format_7zip_malformed.c \
+ libarchive/test/test_read_format_7zip_packinfo_digests.c \
libarchive/test/test_read_format_ar.c \
libarchive/test/test_read_format_cab.c \
libarchive/test/test_read_format_cab_filename.c \
libarchive/test/test_read_format_lha.c \
libarchive/test/test_read_format_lha_bugfix_0.c \
libarchive/test/test_read_format_lha_filename.c \
+ libarchive/test/test_read_format_lha_filename_utf16.c \
libarchive/test/test_read_format_mtree.c \
libarchive/test/test_read_format_mtree_crash747.c \
libarchive/test/test_read_format_pax_bz2.c \
libarchive/test/test_fuzz.lzh.uu \
libarchive/test/test_fuzz_1.iso.Z.uu \
libarchive/test/test_pax_filename_encoding.tar.uu \
+ libarchive/test/test_pax_xattr_header_all.tar.uu \
+ libarchive/test/test_pax_xattr_header_libarchive.tar.uu \
+ libarchive/test/test_pax_xattr_header_schily.tar.uu \
libarchive/test/test_rar_multivolume_multiple_files.part1.rar.uu \
libarchive/test/test_rar_multivolume_multiple_files.part2.rar.uu \
libarchive/test/test_rar_multivolume_multiple_files.part3.rar.uu \
libarchive/test/test_read_format_7zip_lzma2.7z.uu \
libarchive/test/test_read_format_7zip_malformed.7z.uu \
libarchive/test/test_read_format_7zip_malformed2.7z.uu \
+ libarchive/test/test_read_format_7zip_packinfo_digests.7z.uu \
libarchive/test/test_read_format_7zip_ppmd.7z.uu \
libarchive/test/test_read_format_7zip_symbolic_name.7z.uu \
libarchive/test/test_read_format_ar.ar.uu \
libarchive/test/test_read_format_iso_zisofs.iso.Z.uu \
libarchive/test/test_read_format_lha_bugfix_0.lzh.uu \
libarchive/test/test_read_format_lha_filename_cp932.lzh.uu \
+ libarchive/test/test_read_format_lha_filename_utf16.lzh.uu \
libarchive/test/test_read_format_lha_header0.lzh.uu \
libarchive/test/test_read_format_lha_header1.lzh.uu \
libarchive/test/test_read_format_lha_header2.lzh.uu \
libarchive/test/test_read_format_rar_noeof.rar.uu \
libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu \
libarchive/test/test_read_format_rar_ppmd_use_after_free.rar.uu \
+ libarchive/test/test_read_format_rar_ppmd_use_after_free2.rar.uu \
libarchive/test/test_read_format_rar_sfx.exe.uu \
libarchive/test/test_read_format_rar_subblock.rar.uu \
libarchive/test/test_read_format_rar_unicode.rar.uu \
libarchive/test/test_read_format_rar5_arm.rar.uu \
libarchive/test/test_read_format_rar5_blake2.rar.uu \
libarchive/test/test_read_format_rar5_compressed.rar.uu \
+ libarchive/test/test_read_format_rar5_different_window_size.rar.uu \
+ libarchive/test/test_read_format_rar5_different_solid_window_size.rar.uu \
libarchive/test/test_read_format_rar5_distance_overflow.rar.uu \
libarchive/test/test_read_format_rar5_extra_field_version.rar.uu \
libarchive/test/test_read_format_rar5_fileattr.rar.uu \
libarchive/test/test_read_format_rar5_symlink.rar.uu \
libarchive/test/test_read_format_rar5_truncated_huff.rar.uu \
libarchive/test/test_read_format_rar5_win32.rar.uu \
+ libarchive/test/test_read_format_rar5_arm_filter_on_window_boundary.rar.uu \
+ libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu \
libarchive/test/test_read_format_raw.bufr.uu \
libarchive/test/test_read_format_raw.data.gz.uu \
libarchive/test/test_read_format_raw.data.Z.uu \
libarchive/test/test_open_file.c \
libarchive/test/test_open_filename.c \
libarchive/test/test_pax_filename_encoding.c \
+ libarchive/test/test_pax_xattr_header.c \
libarchive/test/test_read_data_large.c \
libarchive/test/test_read_disk.c \
libarchive/test/test_read_disk_directory_traversals.c \
libarchive/test/test_read_format_7zip_encryption_partially.c \
libarchive/test/test_read_format_7zip_encryption_header.c \
libarchive/test/test_read_format_7zip_malformed.c \
+ libarchive/test/test_read_format_7zip_packinfo_digests.c \
libarchive/test/test_read_format_ar.c \
libarchive/test/test_read_format_cab.c \
libarchive/test/test_read_format_cab_filename.c \
libarchive/test/test_read_format_lha.c \
libarchive/test/test_read_format_lha_bugfix_0.c \
libarchive/test/test_read_format_lha_filename.c \
+ libarchive/test/test_read_format_lha_filename_utf16.c \
libarchive/test/test_read_format_mtree.c \
libarchive/test/test_read_format_mtree_crash747.c \
libarchive/test/test_read_format_pax_bz2.c \
libarchive/test/test-test_open_file.$(OBJEXT) \
libarchive/test/test-test_open_filename.$(OBJEXT) \
libarchive/test/test-test_pax_filename_encoding.$(OBJEXT) \
+ libarchive/test/test-test_pax_xattr_header.$(OBJEXT) \
libarchive/test/test-test_read_data_large.$(OBJEXT) \
libarchive/test/test-test_read_disk.$(OBJEXT) \
libarchive/test/test-test_read_disk_directory_traversals.$(OBJEXT) \
libarchive/test/test-test_read_format_7zip_encryption_partially.$(OBJEXT) \
libarchive/test/test-test_read_format_7zip_encryption_header.$(OBJEXT) \
libarchive/test/test-test_read_format_7zip_malformed.$(OBJEXT) \
+ libarchive/test/test-test_read_format_7zip_packinfo_digests.$(OBJEXT) \
libarchive/test/test-test_read_format_ar.$(OBJEXT) \
libarchive/test/test-test_read_format_cab.$(OBJEXT) \
libarchive/test/test-test_read_format_cab_filename.$(OBJEXT) \
libarchive/test/test-test_read_format_lha.$(OBJEXT) \
libarchive/test/test-test_read_format_lha_bugfix_0.$(OBJEXT) \
libarchive/test/test-test_read_format_lha_filename.$(OBJEXT) \
+ libarchive/test/test-test_read_format_lha_filename_utf16.$(OBJEXT) \
libarchive/test/test-test_read_format_mtree.$(OBJEXT) \
libarchive/test/test-test_read_format_mtree_crash747.$(OBJEXT) \
libarchive/test/test-test_read_format_pax_bz2.$(OBJEXT) \
libarchive/test/$(DEPDIR)/test-test_open_file.Po \
libarchive/test/$(DEPDIR)/test-test_open_filename.Po \
libarchive/test/$(DEPDIR)/test-test_pax_filename_encoding.Po \
+ libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Po \
libarchive/test/$(DEPDIR)/test-test_read_data_large.Po \
libarchive/test/$(DEPDIR)/test-test_read_disk.Po \
libarchive/test/$(DEPDIR)/test-test_read_disk_directory_traversals.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_partially.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_7zip_malformed.Po \
+ libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_ar.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_cab.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_cab_filename.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_lha.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_lha_bugfix_0.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename.Po \
+ libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_mtree_crash747.Po \
libarchive/test/$(DEPDIR)/test-test_read_format_pax_bz2.Po \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
-DIST_ARCHIVES = $(distdir).tar.gz
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz $(distdir).zip
GZIP_ENV = --best
-DIST_TARGETS = dist-gzip
+DIST_TARGETS = dist-xz dist-gzip dist-zip
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
libarchive/test/test_open_file.c \
libarchive/test/test_open_filename.c \
libarchive/test/test_pax_filename_encoding.c \
+ libarchive/test/test_pax_xattr_header.c \
libarchive/test/test_read_data_large.c \
libarchive/test/test_read_disk.c \
libarchive/test/test_read_disk_directory_traversals.c \
libarchive/test/test_read_format_7zip_encryption_partially.c \
libarchive/test/test_read_format_7zip_encryption_header.c \
libarchive/test/test_read_format_7zip_malformed.c \
+ libarchive/test/test_read_format_7zip_packinfo_digests.c \
libarchive/test/test_read_format_ar.c \
libarchive/test/test_read_format_cab.c \
libarchive/test/test_read_format_cab_filename.c \
libarchive/test/test_read_format_lha.c \
libarchive/test/test_read_format_lha_bugfix_0.c \
libarchive/test/test_read_format_lha_filename.c \
+ libarchive/test/test_read_format_lha_filename_utf16.c \
libarchive/test/test_read_format_mtree.c \
libarchive/test/test_read_format_mtree_crash747.c \
libarchive/test/test_read_format_pax_bz2.c \
libarchive/test/test_fuzz.lzh.uu \
libarchive/test/test_fuzz_1.iso.Z.uu \
libarchive/test/test_pax_filename_encoding.tar.uu \
+ libarchive/test/test_pax_xattr_header_all.tar.uu \
+ libarchive/test/test_pax_xattr_header_libarchive.tar.uu \
+ libarchive/test/test_pax_xattr_header_schily.tar.uu \
libarchive/test/test_rar_multivolume_multiple_files.part1.rar.uu \
libarchive/test/test_rar_multivolume_multiple_files.part2.rar.uu \
libarchive/test/test_rar_multivolume_multiple_files.part3.rar.uu \
libarchive/test/test_read_format_7zip_lzma2.7z.uu \
libarchive/test/test_read_format_7zip_malformed.7z.uu \
libarchive/test/test_read_format_7zip_malformed2.7z.uu \
+ libarchive/test/test_read_format_7zip_packinfo_digests.7z.uu \
libarchive/test/test_read_format_7zip_ppmd.7z.uu \
libarchive/test/test_read_format_7zip_symbolic_name.7z.uu \
libarchive/test/test_read_format_ar.ar.uu \
libarchive/test/test_read_format_iso_zisofs.iso.Z.uu \
libarchive/test/test_read_format_lha_bugfix_0.lzh.uu \
libarchive/test/test_read_format_lha_filename_cp932.lzh.uu \
+ libarchive/test/test_read_format_lha_filename_utf16.lzh.uu \
libarchive/test/test_read_format_lha_header0.lzh.uu \
libarchive/test/test_read_format_lha_header1.lzh.uu \
libarchive/test/test_read_format_lha_header2.lzh.uu \
libarchive/test/test_read_format_rar_noeof.rar.uu \
libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu \
libarchive/test/test_read_format_rar_ppmd_use_after_free.rar.uu \
+ libarchive/test/test_read_format_rar_ppmd_use_after_free2.rar.uu \
libarchive/test/test_read_format_rar_sfx.exe.uu \
libarchive/test/test_read_format_rar_subblock.rar.uu \
libarchive/test/test_read_format_rar_unicode.rar.uu \
libarchive/test/test_read_format_rar5_arm.rar.uu \
libarchive/test/test_read_format_rar5_blake2.rar.uu \
libarchive/test/test_read_format_rar5_compressed.rar.uu \
+ libarchive/test/test_read_format_rar5_different_window_size.rar.uu \
+ libarchive/test/test_read_format_rar5_different_solid_window_size.rar.uu \
libarchive/test/test_read_format_rar5_distance_overflow.rar.uu \
libarchive/test/test_read_format_rar5_extra_field_version.rar.uu \
libarchive/test/test_read_format_rar5_fileattr.rar.uu \
libarchive/test/test_read_format_rar5_symlink.rar.uu \
libarchive/test/test_read_format_rar5_truncated_huff.rar.uu \
libarchive/test/test_read_format_rar5_win32.rar.uu \
+ libarchive/test/test_read_format_rar5_arm_filter_on_window_boundary.rar.uu \
+ libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu \
libarchive/test/test_read_format_raw.bufr.uu \
libarchive/test/test_read_format_raw.data.gz.uu \
libarchive/test/test_read_format_raw.data.Z.uu \
libarchive/test/test-test_pax_filename_encoding.$(OBJEXT): \
libarchive/test/$(am__dirstamp) \
libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_pax_xattr_header.$(OBJEXT): \
+ libarchive/test/$(am__dirstamp) \
+ libarchive/test/$(DEPDIR)/$(am__dirstamp)
libarchive/test/test-test_read_data_large.$(OBJEXT): \
libarchive/test/$(am__dirstamp) \
libarchive/test/$(DEPDIR)/$(am__dirstamp)
libarchive/test/test-test_read_format_7zip_malformed.$(OBJEXT): \
libarchive/test/$(am__dirstamp) \
libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_read_format_7zip_packinfo_digests.$(OBJEXT): \
+ libarchive/test/$(am__dirstamp) \
+ libarchive/test/$(DEPDIR)/$(am__dirstamp)
libarchive/test/test-test_read_format_ar.$(OBJEXT): \
libarchive/test/$(am__dirstamp) \
libarchive/test/$(DEPDIR)/$(am__dirstamp)
libarchive/test/test-test_read_format_lha_filename.$(OBJEXT): \
libarchive/test/$(am__dirstamp) \
libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_read_format_lha_filename_utf16.$(OBJEXT): \
+ libarchive/test/$(am__dirstamp) \
+ libarchive/test/$(DEPDIR)/$(am__dirstamp)
libarchive/test/test-test_read_format_mtree.$(OBJEXT): \
libarchive/test/$(am__dirstamp) \
libarchive/test/$(DEPDIR)/$(am__dirstamp)
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_open_file.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_open_filename.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_pax_filename_encoding.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_data_large.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_disk.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_disk_directory_traversals.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_partially.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip_malformed.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_ar.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_cab.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_cab_filename.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_lha.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_lha_bugfix_0.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_mtree_crash747.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_pax_bz2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_pax_filename_encoding.obj `if test -f 'libarchive/test/test_pax_filename_encoding.c'; then $(CYGPATH_W) 'libarchive/test/test_pax_filename_encoding.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_pax_filename_encoding.c'; fi`
+libarchive/test/test-test_pax_xattr_header.o: libarchive/test/test_pax_xattr_header.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_pax_xattr_header.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Tpo -c -o libarchive/test/test-test_pax_xattr_header.o `test -f 'libarchive/test/test_pax_xattr_header.c' || echo '$(srcdir)/'`libarchive/test/test_pax_xattr_header.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Tpo libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libarchive/test/test_pax_xattr_header.c' object='libarchive/test/test-test_pax_xattr_header.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_pax_xattr_header.o `test -f 'libarchive/test/test_pax_xattr_header.c' || echo '$(srcdir)/'`libarchive/test/test_pax_xattr_header.c
+
+libarchive/test/test-test_pax_xattr_header.obj: libarchive/test/test_pax_xattr_header.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_pax_xattr_header.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Tpo -c -o libarchive/test/test-test_pax_xattr_header.obj `if test -f 'libarchive/test/test_pax_xattr_header.c'; then $(CYGPATH_W) 'libarchive/test/test_pax_xattr_header.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_pax_xattr_header.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Tpo libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libarchive/test/test_pax_xattr_header.c' object='libarchive/test/test-test_pax_xattr_header.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_pax_xattr_header.obj `if test -f 'libarchive/test/test_pax_xattr_header.c'; then $(CYGPATH_W) 'libarchive/test/test_pax_xattr_header.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_pax_xattr_header.c'; fi`
+
libarchive/test/test-test_read_data_large.o: libarchive/test/test_read_data_large.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_data_large.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_data_large.Tpo -c -o libarchive/test/test-test_read_data_large.o `test -f 'libarchive/test/test_read_data_large.c' || echo '$(srcdir)/'`libarchive/test/test_read_data_large.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_data_large.Tpo libarchive/test/$(DEPDIR)/test-test_read_data_large.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_7zip_malformed.obj `if test -f 'libarchive/test/test_read_format_7zip_malformed.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_7zip_malformed.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_7zip_malformed.c'; fi`
+libarchive/test/test-test_read_format_7zip_packinfo_digests.o: libarchive/test/test_read_format_7zip_packinfo_digests.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_7zip_packinfo_digests.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Tpo -c -o libarchive/test/test-test_read_format_7zip_packinfo_digests.o `test -f 'libarchive/test/test_read_format_7zip_packinfo_digests.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_7zip_packinfo_digests.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libarchive/test/test_read_format_7zip_packinfo_digests.c' object='libarchive/test/test-test_read_format_7zip_packinfo_digests.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_7zip_packinfo_digests.o `test -f 'libarchive/test/test_read_format_7zip_packinfo_digests.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_7zip_packinfo_digests.c
+
+libarchive/test/test-test_read_format_7zip_packinfo_digests.obj: libarchive/test/test_read_format_7zip_packinfo_digests.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_7zip_packinfo_digests.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Tpo -c -o libarchive/test/test-test_read_format_7zip_packinfo_digests.obj `if test -f 'libarchive/test/test_read_format_7zip_packinfo_digests.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_7zip_packinfo_digests.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_7zip_packinfo_digests.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libarchive/test/test_read_format_7zip_packinfo_digests.c' object='libarchive/test/test-test_read_format_7zip_packinfo_digests.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_7zip_packinfo_digests.obj `if test -f 'libarchive/test/test_read_format_7zip_packinfo_digests.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_7zip_packinfo_digests.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_7zip_packinfo_digests.c'; fi`
+
libarchive/test/test-test_read_format_ar.o: libarchive/test/test_read_format_ar.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_ar.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_ar.Tpo -c -o libarchive/test/test-test_read_format_ar.o `test -f 'libarchive/test/test_read_format_ar.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_ar.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_ar.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_ar.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_lha_filename.obj `if test -f 'libarchive/test/test_read_format_lha_filename.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_lha_filename.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_lha_filename.c'; fi`
+libarchive/test/test-test_read_format_lha_filename_utf16.o: libarchive/test/test_read_format_lha_filename_utf16.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_lha_filename_utf16.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Tpo -c -o libarchive/test/test-test_read_format_lha_filename_utf16.o `test -f 'libarchive/test/test_read_format_lha_filename_utf16.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_lha_filename_utf16.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libarchive/test/test_read_format_lha_filename_utf16.c' object='libarchive/test/test-test_read_format_lha_filename_utf16.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_lha_filename_utf16.o `test -f 'libarchive/test/test_read_format_lha_filename_utf16.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_lha_filename_utf16.c
+
+libarchive/test/test-test_read_format_lha_filename_utf16.obj: libarchive/test/test_read_format_lha_filename_utf16.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_lha_filename_utf16.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Tpo -c -o libarchive/test/test-test_read_format_lha_filename_utf16.obj `if test -f 'libarchive/test/test_read_format_lha_filename_utf16.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_lha_filename_utf16.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_lha_filename_utf16.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libarchive/test/test_read_format_lha_filename_utf16.c' object='libarchive/test/test-test_read_format_lha_filename_utf16.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_lha_filename_utf16.obj `if test -f 'libarchive/test/test_read_format_lha_filename_utf16.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_lha_filename_utf16.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_lha_filename_utf16.c'; fi`
+
libarchive/test/test-test_read_format_mtree.o: libarchive/test/test_read_format_mtree.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_mtree.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Tpo -c -o libarchive/test/test-test_read_format_mtree.o `test -f 'libarchive/test/test_read_format_mtree.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_mtree.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Po
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
$(am__post_remove_distdir)
-
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
-
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
-rm -f libarchive/test/$(DEPDIR)/test-test_open_file.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_open_filename.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_pax_filename_encoding.Po
+ -rm -f libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_data_large.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_disk.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_disk_directory_traversals.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_partially.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_malformed.Po
+ -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_ar.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_cab.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_cab_filename.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha_bugfix_0.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename.Po
+ -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_mtree_crash747.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_pax_bz2.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_open_file.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_open_filename.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_pax_filename_encoding.Po
+ -rm -f libarchive/test/$(DEPDIR)/test-test_pax_xattr_header.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_data_large.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_disk.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_disk_directory_traversals.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_partially.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_malformed.Po
+ -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_packinfo_digests.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_ar.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_cab.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_cab_filename.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha_bugfix_0.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename.Po
+ -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_lha_filename_utf16.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_mtree.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_mtree_crash747.Po
-rm -f libarchive/test/$(DEPDIR)/test-test_read_format_pax_bz2.Po
+Dec 30, 2019: libarchive 3.4.1 released
+
+Dec 11, 2019: New pax write option "xattrhdr"
+
+Nov 17, 2019: Unicode filename support for reading lha/lzh archives
+
Jun 11, 2019: libarchive 3.4.0 released
May 18, 2019: Fixes for reading Android APK and JAR archives
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2019 Free Software Foundation, Inc.
+# Copyright 1992-2018 Free Software Foundation, Inc.
-timestamp='2019-06-10'
+timestamp='2018-02-24'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
exit 1
fi
+trap 'exit 1' 1 2 15
+
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
# Portable tmp directory creation inspired by the Autoconf team.
-tmp=
-# shellcheck disable=SC2172
-trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
-
-set_cc_for_build() {
- : "${TMPDIR=/tmp}"
- # shellcheck disable=SC2039
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
- dummy=$tmp/dummy
- case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
- ,,) echo "int x;" > "$dummy.c"
- for driver in cc gcc c89 c99 ; do
- if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$driver"
- break
- fi
- done
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
- esac
-}
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > "$dummy.c" ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
-if test -f /.attbin/uname ; then
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
PATH=$PATH:/.attbin ; export PATH
fi
# We could probably try harder.
LIBC=gnu
- set_cc_for_build
+ eval "$set_cc_for_build"
cat <<-EOF > "$dummy.c"
#include <features.h>
#if defined(__UCLIBC__)
os=netbsdelf
;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- set_cc_for_build
+ eval "$set_cc_for_build"
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
then
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi-}"
+ echo "$machine-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
*:SolidBSD:*:*)
echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
exit ;;
- *:OS108:*:*)
- echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
- exit ;;
macppc:MirBSD:*:*)
echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
exit ;;
echo i386-pc-auroraux"$UNAME_RELEASE"
exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- set_cc_for_build
+ eval "$set_cc_for_build"
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
echo clipper-intergraph-clix"$UNAME_RELEASE"
exit ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
- set_cc_for_build
+ eval "$set_cc_for_build"
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
exit ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- set_cc_for_build
+ eval "$set_cc_for_build"
sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h>
esac
fi
if [ "$HP_ARCH" = "" ]; then
- set_cc_for_build
+ eval "$set_cc_for_build"
sed 's/^ //' << EOF > "$dummy.c"
#define _HPUX_SOURCE
esac
if [ "$HP_ARCH" = hppa2.0w ]
then
- set_cc_for_build
+ eval "$set_cc_for_build"
# hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
# 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
echo ia64-hp-hpux"$HPUX_REV"
exit ;;
3050*:HI-UX:*:*)
- set_cc_for_build
+ eval "$set_cc_for_build"
sed 's/^ //' << EOF > "$dummy.c"
#include <unistd.h>
int
*:BSD/OS:*:*)
echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
exit ;;
- arm:FreeBSD:*:*)
- UNAME_PROCESSOR=`uname -p`
- set_cc_for_build
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
- else
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
- fi
- exit ;;
*:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p`
case "$UNAME_PROCESSOR" in
echo "$UNAME_MACHINE"-pc-uwin
exit ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-pc-cygwin
+ echo x86_64-unknown-cygwin
exit ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
# other systems with GNU libc and userland
echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
exit ;;
- *:Minix:*:*)
- echo "$UNAME_MACHINE"-unknown-minix
+ i*86:Minix:*:*)
+ echo "$UNAME_MACHINE"-pc-minix
exit ;;
aarch64:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
arm*:Linux:*:*)
- set_cc_for_build
+ eval "$set_cc_for_build"
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
- set_cc_for_build
- IS_GLIBC=0
- test x"${LIBC}" = xgnu && IS_GLIBC=1
+ eval "$set_cc_for_build"
sed 's/^ //' << EOF > "$dummy.c"
#undef CPU
- #undef mips
- #undef mipsel
- #undef mips64
- #undef mips64el
- #if ${IS_GLIBC} && defined(_ABI64)
- LIBCABI=gnuabi64
- #else
- #if ${IS_GLIBC} && defined(_ABIN32)
- LIBCABI=gnuabin32
- #else
- LIBCABI=${LIBC}
- #endif
- #endif
-
- #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
- CPU=mipsisa64r6
- #else
- #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
- CPU=mipsisa32r6
- #else
- #if defined(__mips64)
- CPU=mips64
- #else
- CPU=mips
- #endif
- #endif
- #endif
-
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- MIPS_ENDIAN=el
+ CPU=${UNAME_MACHINE}el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- MIPS_ENDIAN=
+ CPU=${UNAME_MACHINE}
#else
- MIPS_ENDIAN=
+ CPU=
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
- test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
+ eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
+ test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
;;
mips64el:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
exit ;;
x86_64:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ if objdump -f /bin/sh | grep -q elf32-x86-64; then
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
+ else
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ fi
exit ;;
xtensa*:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
+ echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
exit ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
exit ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p`
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- if command -v xcode-select > /dev/null 2> /dev/null && \
- ! xcode-select --print-path > /dev/null 2> /dev/null ; then
- # Avoid executing cc if there is no toolchain installed as
- # cc will be a stub that puts up a graphical alert
- # prompting the user to install developer tools.
- CC_FOR_BUILD=no_compiler_found
- else
- set_cc_for_build
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval "$set_cc_for_build"
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
fi
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
+ if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
- # uname -m returns i386 or x86_64
- UNAME_PROCESSOR=$UNAME_MACHINE
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
fi
echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
exit ;;
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- # shellcheck disable=SC2154
if test "$cputype" = 386; then
UNAME_MACHINE=i386
else
amd64:Isilon\ OneFS:*:*)
echo x86_64-unknown-onefs
exit ;;
- *:Unleashed:*:*)
- echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
- exit ;;
esac
-# No uname command or uname output not recognized.
-set_cc_for_build
-cat > "$dummy.c" <<EOF
-#ifdef _SEQUENT_
-#include <sys/types.h>
-#include <sys/utsname.h>
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#include <signal.h>
-#if defined(_SIZE_T_) || defined(SIGLOST)
-#include <sys/utsname.h>
-#endif
-#endif
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
-#include <sys/param.h>
-#if defined (BSD)
-#if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-#else
-#if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#else
- printf ("vax-dec-bsd\n"); exit (0);
-#endif
-#endif
-#else
- printf ("vax-dec-bsd\n"); exit (0);
-#endif
-#else
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname un;
- uname (&un);
- printf ("vax-dec-ultrix%s\n", un.release); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname *un;
- uname (&un);
- printf ("mips-dec-ultrix%s\n", un.release); exit (0);
-#else
- printf ("mips-dec-ultrix\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
-
echo "$0: unable to guess system type" >&2
case "$UNAME_MACHINE:$UNAME_SYSTEM" in
exit 1
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-functions 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2019 Free Software Foundation, Inc.
+# Copyright 1992-2018 Free Software Foundation, Inc.
-timestamp='2019-05-23'
+timestamp='2018-02-22'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- ) # Use stdin as input.
break ;;
-* )
- echo "$me: invalid option $1$help" >&2
+ echo "$me: invalid option $1$help"
exit 1 ;;
*local*)
exit 1;;
esac
-# Split fields of configuration type
-# shellcheck disable=SC2162
-IFS="-" read field1 field2 field3 field4 <<EOF
-$1
-EOF
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+ kopensolaris*-gnu* | cloudabi*-eabi* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
+ if [ "$basic_machine" != "$1" ]
+ then os=`echo "$1" | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
-# Separate into logical components for further validation
-case $1 in
- *-*-*-*-*)
- echo Invalid configuration \`"$1"\': more than four components >&2
- exit 1
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
;;
- *-*-*-*)
- basic_machine=$field1-$field2
- os=$field3-$field4
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
;;
- *-*-*)
- # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
- # parts
- maybe_os=$field2-$field3
- case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
- | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
- | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
- | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
- | storm-chaos* | os2-emx* | rtmk-nova*)
- basic_machine=$field1
- os=$maybe_os
- ;;
- android-linux)
- basic_machine=$field1-unknown
- os=linux-android
- ;;
- *)
- basic_machine=$field1-$field2
- os=$field3
- ;;
- esac
+ -bluegene*)
+ os=-cnk
;;
- *-*)
- # A lone config we happen to match not fitting any pattern
- case $field1-$field2 in
- decstation-3100)
- basic_machine=mips-dec
- os=
- ;;
- *-*)
- # Second component is usually, but not always the OS
- case $field2 in
- # Prevent following clause from handling this valid os
- sun*os*)
- basic_machine=$field1
- os=$field2
- ;;
- # Manufacturers
- dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
- | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
- | unicom* | ibm* | next | hp | isi* | apollo | altos* \
- | convergent* | ncr* | news | 32* | 3600* | 3100* \
- | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
- | ultra | tti* | harris | dolphin | highlevel | gould \
- | cbm | ns | masscomp | apple | axis | knuth | cray \
- | microblaze* | sim | cisco \
- | oki | wec | wrs | winbond)
- basic_machine=$field1-$field2
- os=
- ;;
- *)
- basic_machine=$field1
- os=$field2
- ;;
- esac
- ;;
- esac
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
;;
- *)
- # Convert single-component short-hands not valid as part of
- # multi-component configurations.
- case $field1 in
- 386bsd)
- basic_machine=i386-pc
- os=bsd
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=scout
- ;;
- alliant)
- basic_machine=fx80-alliant
- os=
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- os=
- ;;
- am29k)
- basic_machine=a29k-none
- os=bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=sysv
- ;;
- amiga)
- basic_machine=m68k-unknown
- os=
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=aros
- ;;
- aux)
- basic_machine=m68k-apple
- os=aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=linux
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=bsd
- ;;
- cray)
- basic_machine=j90-cray
- os=unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- os=
- ;;
- da30)
- basic_machine=m68k-da30
- os=
- ;;
- decstation | pmax | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- os=
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=msdosdjgpp
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=ebmon
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=ose
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=go32
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=sysv3
- ;;
- hp300)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=hpux
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=proelf
- ;;
- i386mach)
- basic_machine=i386-mach
- os=mach
- ;;
- vsta)
- basic_machine=i386-pc
- os=vsta
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=sysv
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- os=mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=mingw32ce
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=morphos
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- os=moxiebox
- ;;
- msdos)
- basic_machine=i386-pc
- os=msdos
- ;;
- msys)
- basic_machine=i686-pc
- os=msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=sysv4
- ;;
- netbsd386)
- basic_machine=i386-pc
- os=netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=sysv
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=nonstopux
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=os68k
- ;;
- paragon)
- basic_machine=i860-intel
- os=osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=linux
- ;;
- pw32)
- basic_machine=i586-unknown
- os=pw32
- ;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- os=rdos
- ;;
- rdos32)
- basic_machine=i386-pc
- os=rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=coff
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=udi
- ;;
- sei)
- basic_machine=mips-sei
- os=seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- os=
- ;;
- sps7)
- basic_machine=m68k-bull
- os=sysv2
- ;;
- st2000)
- basic_machine=m68k-tandem
- os=
- ;;
- stratus)
- basic_machine=i860-stratus
- os=sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- os=
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=sunos4
- ;;
- sun3)
- basic_machine=m68k-sun
- os=
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=sunos4
- ;;
- sun4)
- basic_machine=sparc-sun
- os=
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=solaris2
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- os=
- ;;
- sv1)
- basic_machine=sv1-cray
- os=unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=unicos
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=tops20
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=vms
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=vxworks
- ;;
- xbox)
- basic_machine=i686-pc
- os=mingw32
- ;;
- ymp)
- basic_machine=ymp-cray
- os=unicos
- ;;
- *)
- basic_machine=$1
- os=
- ;;
- esac
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
;;
esac
-# Decode 1-component or ad-hoc basic machines
+# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
- # Here we handle the default manufacturer of certain CPU types. It is in
- # some cases the only manufacturer, in others, it is the most popular.
- w89k)
- cpu=hppa1.1
- vendor=winbond
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | ba \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pru \
+ | pyramid \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
+ | wasm32 \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
;;
- op50n)
- cpu=hppa1.1
- vendor=oki
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
;;
- op60c)
- cpu=hppa1.1
- vendor=oki
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
;;
- ibm*)
- cpu=i370
- vendor=ibm
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
;;
- orion105)
- cpu=clipper
- vendor=highlevel
+ ms1)
+ basic_machine=mt-unknown
;;
- mac | mpw | mac-mpw)
- cpu=m68k
- vendor=apple
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
;;
- pmac | pmac-mpw)
- cpu=powerpc
- vendor=apple
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | ba-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | e2k-* | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pru-* \
+ | pyramid-* \
+ | riscv32-* | riscv64-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | visium-* \
+ | wasm32-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-pc
+ os=-bsd
+ ;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- cpu=m68000
- vendor=att
+ basic_machine=m68000-att
;;
3b*)
- cpu=we32k
- vendor=att
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=-linux
;;
bluegene*)
- cpu=powerpc
- vendor=ibm
- os=cnk
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
;;
decsystem10* | dec10*)
- cpu=pdp10
- vendor=dec
- os=tops10
+ basic_machine=pdp10-dec
+ os=-tops10
;;
decsystem20* | dec20*)
- cpu=pdp10
- vendor=dec
- os=tops20
+ basic_machine=pdp10-dec
+ os=-tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
- cpu=m68k
- vendor=motorola
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
;;
dpx2*)
- cpu=m68k
- vendor=bull
- os=sysv3
+ basic_machine=m68k-bull
+ os=-sysv3
;;
- encore | umax | mmax)
- cpu=ns32k
- vendor=encore
+ e500v[12])
+ basic_machine=powerpc-unknown
+ os=$os"spe"
+ ;;
+ e500v[12]-*)
+ basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=$os"spe"
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
;;
elxsi)
- cpu=elxsi
- vendor=elxsi
- os=${os:-bsd}
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
;;
fx2800)
- cpu=i860
- vendor=alliant
+ basic_machine=i860-alliant
;;
genix)
- cpu=ns32k
- vendor=ns
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
;;
h3050r* | hiux*)
- cpu=hppa1.1
- vendor=hitachi
- os=hiuxwe2
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
+ basic_machine=hppa1.0-hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
- cpu=m68000
- vendor=hp
+ basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
- cpu=m68k
- vendor=hp
+ basic_machine=m68k-hp
;;
hp9k6[0-9][0-9] | hp6[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
+ basic_machine=hppa1.0-hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
- cpu=hppa1.1
- vendor=hp
+ basic_machine=hppa1.1-hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
- cpu=hppa1.1
- vendor=hp
+ basic_machine=hppa1.1-hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
- cpu=hppa1.1
- vendor=hp
+ basic_machine=hppa1.1-hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
- cpu=hppa1.1
- vendor=hp
+ basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
- cpu=hppa1.0
- vendor=hp
+ basic_machine=hppa1.0-hp
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
;;
i*86v32)
- cpu=`echo "$1" | sed -e 's/86.*/86/'`
- vendor=pc
- os=sysv32
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
;;
i*86v4*)
- cpu=`echo "$1" | sed -e 's/86.*/86/'`
- vendor=pc
- os=sysv4
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
;;
i*86v)
- cpu=`echo "$1" | sed -e 's/86.*/86/'`
- vendor=pc
- os=sysv
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-sysv
;;
i*86sol2)
- cpu=`echo "$1" | sed -e 's/86.*/86/'`
- vendor=pc
- os=solaris2
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
;;
- j90 | j90-cray)
- cpu=j90
- vendor=cray
- os=${os:-unicos}
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ vsta)
+ basic_machine=i386-unknown
+ os=-vsta
;;
iris | iris4d)
- cpu=mips
- vendor=sgi
+ basic_machine=mips-sgi
case $os in
- irix*)
+ -irix*)
;;
*)
- os=irix4
+ os=-irix4
;;
esac
;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
miniframe)
- cpu=m68000
- vendor=convergent
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
;;
- *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
- cpu=m68k
- vendor=atari
- os=mint
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
;;
news-3600 | risc-news)
- cpu=mips
- vendor=sony
- os=newsos
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
;;
next | m*-next)
- cpu=m68k
- vendor=next
+ basic_machine=m68k-next
case $os in
- openstep*)
- ;;
- nextstep*)
+ -nextstep* )
;;
- ns2*)
- os=nextstep2
+ -ns2*)
+ os=-nextstep2
;;
*)
- os=nextstep3
+ os=-nextstep3
;;
esac
;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
np1)
- cpu=np1
- vendor=gould
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ nsv-tandem)
+ basic_machine=nsv-tandem
+ ;;
+ nsx-tandem)
+ basic_machine=nsx-tandem
;;
op50n-* | op60c-*)
- cpu=hppa1.1
- vendor=oki
- os=proelf
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
;;
pa-hitachi)
- cpu=hppa1.1
- vendor=hitachi
- os=hiuxwe2
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=-linux
;;
pbd)
- cpu=sparc
- vendor=tti
+ basic_machine=sparc-tti
;;
pbb)
- cpu=m68k
- vendor=tti
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
- pc532)
- cpu=ns32k
- vendor=pc532
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
pn)
- cpu=pn
- vendor=gould
+ basic_machine=pn-gould
;;
- power)
- cpu=power
- vendor=ibm
+ power) basic_machine=power-ibm
;;
- ps2)
- cpu=i386
- vendor=ibm
+ ppc | ppcbe) basic_machine=powerpc-unknown
;;
- rm[46]00)
- cpu=mips
- vendor=siemens
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
- rtpc | rtpc-*)
- cpu=romp
- vendor=ibm
+ ppcle | powerpclittle)
+ basic_machine=powerpcle-unknown
;;
- sde)
- cpu=mipsisa32
- vendor=sde
- os=${os:-elf}
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
- simso-wrs)
- cpu=sparclite
- vendor=wrs
- os=vxworks
+ ppc64) basic_machine=powerpc64-unknown
;;
- tower | tower-32)
- cpu=m68k
- vendor=ncr
+ ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
- vpp*|vx|vx-*)
- cpu=f301
- vendor=fujitsu
+ ppc64le | powerpc64little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
- w65)
- cpu=w65
- vendor=wdc
+ ps2)
+ basic_machine=i386-ibm
;;
- w89k-*)
- cpu=hppa1.1
- vendor=winbond
- os=proelf
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
;;
- none)
- cpu=none
- vendor=none
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
;;
- leon|leon[3-9])
- cpu=sparc
- vendor=$basic_machine
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
;;
- leon-*|leon[3-9]-*)
- cpu=sparc
- vendor=`echo "$basic_machine" | sed 's/-.*//'`
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
;;
-
- *-*)
- # shellcheck disable=SC2162
- IFS="-" read cpu vendor <<EOF
-$basic_machine
-EOF
+ rm[46]00)
+ basic_machine=mips-siemens
;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- cpu=$basic_machine
- vendor=pc
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
;;
- # These rules are duplicated from below for sake of the special case above;
- # i.e. things that normalized to x86 arches should also default to "pc"
- pc98)
- cpu=i386
- vendor=pc
+ s390 | s390-*)
+ basic_machine=s390-ibm
;;
- x64 | amd64)
- cpu=x86_64
- vendor=pc
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
;;
- # Recognize the basic CPU types without company name.
- *)
- cpu=$basic_machine
- vendor=unknown
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
;;
-esac
-
-unset -v basic_machine
-
-# Decode basic machines in the full and proper CPU-Company form.
-case $cpu-$vendor in
- # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
- # some cases the only manufacturer, in others, it is the most popular.
- craynv-unknown)
- vendor=cray
- os=${os:-unicosmp}
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
;;
- c90-unknown | c90-cray)
- vendor=cray
- os=${os:-unicos}
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
;;
- fx80-unknown)
- vendor=alliant
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
;;
- romp-unknown)
- vendor=ibm
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
;;
- mmix-unknown)
- vendor=knuth
+ sequent)
+ basic_machine=i386-sequent
;;
- microblaze-unknown | microblazeel-unknown)
- vendor=xilinx
+ sh5el)
+ basic_machine=sh5le-unknown
;;
- rs6000-unknown)
- vendor=ibm
+ simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
;;
- vax-unknown)
- vendor=dec
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
;;
- pdp11-unknown)
- vendor=dec
+ spur)
+ basic_machine=spur-unknown
;;
- we32k-unknown)
- vendor=att
+ st2000)
+ basic_machine=m68k-tandem
;;
- cydra-unknown)
- vendor=cydrome
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
;;
- i370-ibm*)
- vendor=ibm
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
- orion-unknown)
- vendor=highlevel
+ sun2)
+ basic_machine=m68000-sun
;;
- xps-unknown | xps100-unknown)
- cpu=xps100
- vendor=honeywell
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
;;
-
- # Here we normalize CPU types with a missing or matching vendor
- dpx20-unknown | dpx20-bull)
- cpu=rs6000
- vendor=bull
- os=${os:-bosx}
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
;;
-
- # Here we normalize CPU types irrespective of the vendor
- amd64-*)
- cpu=x86_64
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
;;
- blackfin-*)
- cpu=bfin
- os=linux
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
;;
- c54x-*)
- cpu=tic54x
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
;;
- c55x-*)
- cpu=tic55x
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
;;
- c6x-*)
- cpu=tic6x
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
;;
- e500v[12]-*)
- cpu=powerpc
- os=$os"spe"
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
;;
- mips3*-*)
- cpu=mips64
+ sun4)
+ basic_machine=sparc-sun
;;
- ms1-*)
- cpu=mt
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
;;
- m68knommu-*)
- cpu=m68k
- os=linux
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
;;
- m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
- cpu=s12z
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
;;
- openrisc-*)
- cpu=or32
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
;;
- parisc-*)
- cpu=hppa
- os=linux
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- cpu=i586
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
;;
- pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
- cpu=i686
+ tx39)
+ basic_machine=mipstx39-unknown
;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- cpu=i686
+ tx39el)
+ basic_machine=mipstx39el-unknown
;;
- pentium4-*)
- cpu=i786
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
;;
- pc98-*)
- cpu=i386
+ tower | tower-32)
+ basic_machine=m68k-ncr
;;
- ppc-* | ppcbe-*)
- cpu=powerpc
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
;;
- ppcle-* | powerpclittle-*)
- cpu=powerpcle
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
;;
- ppc64-*)
- cpu=powerpc64
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
;;
- ppc64le-* | powerpc64little-*)
- cpu=powerpc64le
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
;;
- sb1-*)
- cpu=mipsisa64sb1
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
;;
- sb1el-*)
- cpu=mipsisa64sb1el
+ vms)
+ basic_machine=vax-dec
+ os=-vms
;;
- sh5e[lb]-*)
- cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
;;
- spur-*)
- cpu=spur
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
;;
- strongarm-* | thumb-*)
- cpu=arm
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
;;
- tx39-*)
- cpu=mipstx39
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
;;
- tx39el-*)
- cpu=mipstx39el
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
;;
- x64-*)
- cpu=x86_64
+ x64)
+ basic_machine=x86_64-pc
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
;;
xscale-* | xscalee[bl]-*)
- cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+ basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
;;
- # Recognize the canonical CPU Types that limit and/or modify the
- # company names they are paired with.
- cr16-*)
- os=${os:-elf}
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
;;
- crisv32-* | etraxfs*-*)
- cpu=crisv32
- vendor=axis
+ op50n)
+ basic_machine=hppa1.1-oki
;;
- cris-* | etrax*-*)
- cpu=cris
- vendor=axis
+ op60c)
+ basic_machine=hppa1.1-oki
;;
- crx-*)
- os=${os:-elf}
+ romp)
+ basic_machine=romp-ibm
;;
- neo-tandem)
- cpu=neo
- vendor=tandem
+ mmix)
+ basic_machine=mmix-knuth
;;
- nse-tandem)
- cpu=nse
- vendor=tandem
+ rs6000)
+ basic_machine=rs6000-ibm
;;
- nsr-tandem)
- cpu=nsr
- vendor=tandem
+ vax)
+ basic_machine=vax-dec
;;
- nsv-tandem)
- cpu=nsv
- vendor=tandem
+ pdp11)
+ basic_machine=pdp11-dec
;;
- nsx-tandem)
- cpu=nsx
- vendor=tandem
+ we32k)
+ basic_machine=we32k-att
;;
- s390-*)
- cpu=s390
- vendor=ibm
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
;;
- s390x-*)
- cpu=s390x
- vendor=ibm
+ cydra)
+ basic_machine=cydra-cydrome
;;
- tile*-*)
- os=${os:-linux-gnu}
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
;;
-
*)
- # Recognize the canonical CPU types that are allowed with any
- # company name.
- case $cpu in
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | abacus \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
- | alphapca5[67] | alpha64pca5[67] \
- | am33_2.0 \
- | amdgcn \
- | arc | arceb \
- | arm | arm[lb]e | arme[lb] | armv* \
- | avr | avr32 \
- | asmjs \
- | ba \
- | be32 | be64 \
- | bfin | bpf | bs2000 \
- | c[123]* | c30 | [cjt]90 | c4x \
- | c8051 | clipper | craynv | csky | cydra \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | elxsi | epiphany \
- | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
- | h8300 | h8500 \
- | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i*86 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle \
- | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
- | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
- | m88110 | m88k | maxq | mb | mcore | mep | metag \
- | microblaze | microblazeel \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64eb | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mmix \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nfp \
- | nios | nios2 | nios2eb | nios2el \
- | none | np1 | ns16k | ns32k | nvptx \
- | open8 \
- | or1k* \
- | or32 \
- | orion \
- | picochip \
- | pdp10 | pdp11 | pj | pjl | pn | power \
- | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
- | pru \
- | pyramid \
- | riscv | riscv32 | riscv64 \
- | rl78 | romp | rs6000 | rx \
- | score \
- | sh | shl \
- | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
- | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
- | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
- | spu \
- | tahoe \
- | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
- | tron \
- | ubicom32 \
- | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
- | vax \
- | visium \
- | w65 \
- | wasm32 | wasm64 \
- | we32k \
- | x86 | x86_64 | xc16x | xgate | xps100 \
- | xstormy16 | xtensa* \
- | ymp \
- | z8k | z80)
- ;;
-
- *)
- echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
- exit 1
- ;;
- esac
+ echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
+ exit 1
;;
esac
# Here we canonicalize certain aliases for manufacturers.
-case $vendor in
- digital*)
- vendor=dec
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
;;
- commodore*)
- vendor=cbm
+ *-commodore*)
+ basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
;;
*)
;;
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x$os != x ]
+if [ x"$os" != x"" ]
then
case $os in
# First match some system type aliases that might get confused
# with valid system types.
- # solaris* is a basic system type, with this one exception.
- auroraux)
- os=auroraux
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
;;
- bluegene*)
- os=cnk
- ;;
- solaris1 | solaris1.*)
+ -solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
- solaris)
- os=solaris2
+ -solaris)
+ os=-solaris2
;;
- unixware*)
- os=sysv4.2uw
+ -unixware*)
+ os=-sysv4.2uw
;;
- gnu/linux*)
+ -gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
# es1800 is here to avoid being matched by es* (a different OS)
- es1800*)
- os=ose
- ;;
- # Some version numbers need modification
- chorusos*)
- os=chorusos
- ;;
- isc)
- os=isc2.2
- ;;
- sco6)
- os=sco5v6
- ;;
- sco5)
- os=sco3.2v5
- ;;
- sco4)
- os=sco3.2v4
- ;;
- sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- ;;
- sco3.2v[4-9]* | sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- ;;
- scout)
- # Don't match below
- ;;
- sco*)
- os=sco3.2v2
- ;;
- psos*)
- os=psos
+ -es1800*)
+ os=-ose
;;
# Now accept the basic system types.
# The portable systems comes first.
# Each alternative MUST end in a * to match a version number.
- # sysv* is not here because it comes later, after sysvr4.
- gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | kopensolaris* | plan9* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
- | knetbsd* | mirbsd* | netbsd* \
- | bitrig* | openbsd* | solidbsd* | libertybsd* \
- | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
- | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
- | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
- | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* \
- | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
- | linux-newlib* | linux-musl* | linux-uclibc* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* \
- | morphos* | superux* | rtmk* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi*)
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
+ | -midnightbsd*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
- qnx*)
- case $cpu in
- x86 | i*86)
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
;;
*)
- os=nto-$os
+ os=-nto$os
;;
esac
;;
- hiux*)
- os=hiuxwe2
- ;;
- nto-qnx*)
+ -nto-qnx*)
;;
- nto*)
+ -nto*)
os=`echo $os | sed -e 's|nto|nto-qnx|'`
;;
- sim | xray | os68k* | v88r* \
- | windows* | osx | abug | netware* | os9* \
- | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
- ;;
- linux-dietlibc)
- os=linux-dietlibc
- ;;
- linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- lynx*178)
- os=lynxos178
+ -sim | -xray | -os68k* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;;
- lynx*5)
- os=lynxos5
- ;;
- lynx*)
- os=lynxos
- ;;
- mac*)
+ -mac*)
os=`echo "$os" | sed -e 's|mac|macos|'`
;;
- opened*)
- os=openedition
+ -linux-dietlibc)
+ os=-linux-dietlibc
;;
- os400*)
- os=os400
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
- sunos5*)
+ -sunos5*)
os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
;;
- sunos6*)
+ -sunos6*)
os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
;;
- wince*)
- os=wince
+ -opened*)
+ os=-openedition
;;
- utek*)
- os=bsd
+ -os400*)
+ os=-os400
;;
- dynix*)
- os=bsd
+ -wince*)
+ os=-wince
;;
- acis*)
- os=aos
+ -utek*)
+ os=-bsd
;;
- atheos*)
- os=atheos
+ -dynix*)
+ os=-bsd
;;
- syllable*)
- os=syllable
+ -acis*)
+ os=-aos
;;
- 386bsd)
- os=bsd
+ -atheos*)
+ os=-atheos
;;
- ctix* | uts*)
- os=sysv
+ -syllable*)
+ os=-syllable
;;
- nova*)
- os=rtmk-nova
+ -386bsd)
+ os=-bsd
;;
- ns2)
- os=nextstep2
+ -ctix* | -uts*)
+ os=-sysv
;;
- nsk*)
- os=nsk
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2)
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
;;
# Preserve the version number of sinix5.
- sinix5.*)
+ -sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
;;
- sinix*)
- os=sysv4
+ -sinix*)
+ os=-sysv4
;;
- tpf*)
- os=tpf
+ -tpf*)
+ os=-tpf
;;
- triton*)
- os=sysv3
+ -triton*)
+ os=-sysv3
;;
- oss*)
- os=sysv3
+ -oss*)
+ os=-sysv3
;;
- svr4*)
- os=sysv4
+ -svr4*)
+ os=-sysv4
;;
- svr3)
- os=sysv3
+ -svr3)
+ os=-sysv3
;;
- sysvr4)
- os=sysv4
+ -sysvr4)
+ os=-sysv4
;;
- # This must come after sysvr4.
- sysv*)
+ # This must come after -sysvr4.
+ -sysv*)
;;
- ose*)
- os=ose
+ -ose*)
+ os=-ose
;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
- os=mint
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
;;
- zvmoe)
- os=zvmoe
+ -zvmoe)
+ os=-zvmoe
;;
- dicos*)
- os=dicos
+ -dicos*)
+ os=-dicos
;;
- pikeos*)
+ -pikeos*)
# Until real need of OS specific support for
# particular features comes up, bare metal
# configurations are quite functional.
- case $cpu in
+ case $basic_machine in
arm*)
- os=eabi
+ os=-eabi
;;
*)
- os=elf
+ os=-elf
;;
esac
;;
- nacl*)
+ -nacl*)
;;
- ios)
+ -ios)
;;
- none)
- ;;
- *-eabi)
+ -none)
;;
*)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
exit 1
;;
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
-case $cpu-$vendor in
+case $basic_machine in
score-*)
- os=elf
+ os=-elf
;;
spu-*)
- os=elf
+ os=-elf
;;
*-acorn)
- os=riscix1.2
+ os=-riscix1.2
;;
arm*-rebel)
- os=linux
+ os=-linux
;;
arm*-semi)
- os=aout
+ os=-aout
;;
c4x-* | tic4x-*)
- os=coff
+ os=-coff
;;
c8051-*)
- os=elf
- ;;
- clipper-intergraph)
- os=clix
+ os=-elf
;;
hexagon-*)
- os=elf
+ os=-elf
;;
tic54x-*)
- os=coff
+ os=-coff
;;
tic55x-*)
- os=coff
+ os=-coff
;;
tic6x-*)
- os=coff
+ os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
- os=tops20
+ os=-tops20
;;
pdp11-*)
- os=none
+ os=-none
;;
*-dec | vax-*)
- os=ultrix4.2
+ os=-ultrix4.2
;;
m68*-apollo)
- os=domain
+ os=-domain
;;
i386-sun)
- os=sunos4.0.2
+ os=-sunos4.0.2
;;
m68000-sun)
- os=sunos3
+ os=-sunos3
;;
m68*-cisco)
- os=aout
+ os=-aout
;;
mep-*)
- os=elf
+ os=-elf
;;
mips*-cisco)
- os=elf
+ os=-elf
;;
mips*-*)
- os=elf
+ os=-elf
;;
or32-*)
- os=coff
+ os=-coff
;;
*-tti) # must be before sparc entry or we get the wrong os.
- os=sysv3
+ os=-sysv3
;;
sparc-* | *-sun)
- os=sunos4.1.1
+ os=-sunos4.1.1
;;
pru-*)
- os=elf
+ os=-elf
;;
*-be)
- os=beos
+ os=-beos
;;
*-ibm)
- os=aix
+ os=-aix
;;
*-knuth)
- os=mmixware
+ os=-mmixware
;;
*-wec)
- os=proelf
+ os=-proelf
;;
*-winbond)
- os=proelf
+ os=-proelf
;;
*-oki)
- os=proelf
+ os=-proelf
;;
*-hp)
- os=hpux
+ os=-hpux
;;
*-hitachi)
- os=hiux
+ os=-hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=sysv
+ os=-sysv
;;
*-cbm)
- os=amigaos
+ os=-amigaos
;;
*-dg)
- os=dgux
+ os=-dgux
;;
*-dolphin)
- os=sysv3
+ os=-sysv3
;;
m68k-ccur)
- os=rtu
+ os=-rtu
;;
m88k-omron*)
- os=luna
+ os=-luna
;;
*-next)
- os=nextstep
+ os=-nextstep
;;
*-sequent)
- os=ptx
+ os=-ptx
;;
*-crds)
- os=unos
+ os=-unos
;;
*-ns)
- os=genix
+ os=-genix
;;
i370-*)
- os=mvs
+ os=-mvs
;;
*-gould)
- os=sysv
+ os=-sysv
;;
*-highlevel)
- os=bsd
+ os=-bsd
;;
*-encore)
- os=bsd
+ os=-bsd
;;
*-sgi)
- os=irix
+ os=-irix
;;
*-siemens)
- os=sysv4
+ os=-sysv4
;;
*-masscomp)
- os=rtu
+ os=-rtu
;;
f30[01]-fujitsu | f700-fujitsu)
- os=uxpv
+ os=-uxpv
;;
*-rom68k)
- os=coff
+ os=-coff
;;
*-*bug)
- os=coff
+ os=-coff
;;
*-apple)
- os=macos
+ os=-macos
;;
*-atari*)
- os=mint
- ;;
- *-wrs)
- os=vxworks
+ os=-mint
;;
*)
- os=none
+ os=-none
;;
esac
fi
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
-case $vendor in
- unknown)
+vendor=unknown
+case $basic_machine in
+ *-unknown)
case $os in
- riscix*)
+ -riscix*)
vendor=acorn
;;
- sunos*)
+ -sunos*)
vendor=sun
;;
- cnk*|-aix*)
+ -cnk*|-aix*)
vendor=ibm
;;
- beos*)
+ -beos*)
vendor=be
;;
- hpux*)
+ -hpux*)
vendor=hp
;;
- mpeix*)
+ -mpeix*)
vendor=hp
;;
- hiux*)
+ -hiux*)
vendor=hitachi
;;
- unos*)
+ -unos*)
vendor=crds
;;
- dgux*)
+ -dgux*)
vendor=dg
;;
- luna*)
+ -luna*)
vendor=omron
;;
- genix*)
+ -genix*)
vendor=ns
;;
- clix*)
- vendor=intergraph
- ;;
- mvs* | opened*)
+ -mvs* | -opened*)
vendor=ibm
;;
- os400*)
+ -os400*)
vendor=ibm
;;
- ptx*)
+ -ptx*)
vendor=sequent
;;
- tpf*)
+ -tpf*)
vendor=ibm
;;
- vxsim* | vxworks* | windiss*)
+ -vxsim* | -vxworks* | -windiss*)
vendor=wrs
;;
- aux*)
+ -aux*)
vendor=apple
;;
- hms*)
+ -hms*)
vendor=hitachi
;;
- mpw* | macos*)
+ -mpw* | -macos*)
vendor=apple
;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
vendor=atari
;;
- vos*)
+ -vos*)
vendor=stratus
;;
esac
+ basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
;;
esac
-echo "$cpu-$vendor-$os"
+echo "$basic_machine$os"
exit
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-functions 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-10"
+VERSION="2.4.6 Debian-2.4.6-11"
package_revision=2.4.6
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname $scriptversion Debian-2.4.6-10
+ version: $progname $scriptversion Debian-2.4.6-11
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
.Nm
.Op options
.Op files
-.Pp
.Sh DESCRIPTION
.Nm
expands files to standard output.
.Sh OPTIONS
.Nm
typically takes a filename as an argument or reads standard input when used in a
-pipe. In both cases decompressed data it written to standard output.
+pipe.
+In both cases decompressed data it written to standard output.
.Sh EXAMPLES
-.Pp
To decompress a file:
.Pp
.Dl bsdcat example.txt.gz > example.txt
Both examples achieve the same results - a decompressed file by redirecting
output.
.Sh SEE ALSO
-.Xr uncompress 1 ,
-.Xr zcat 1 ,
.Xr bzcat 1 ,
+.Xr uncompress 1 ,
.Xr xzcat 1 ,
-.Xr libarchive-formats 5 ,
+.Xr zcat 1 ,
+.Xr libarchive-formats 5
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libarchive 3.4.0.
+# Generated by GNU Autoconf 2.69 for libarchive 3.4.1.
#
# Report bugs to <libarchive-discuss@googlegroups.com>.
#
# Identity of this package.
PACKAGE_NAME='libarchive'
PACKAGE_TARNAME='libarchive'
-PACKAGE_VERSION='3.4.0'
-PACKAGE_STRING='libarchive 3.4.0'
+PACKAGE_VERSION='3.4.1'
+PACKAGE_STRING='libarchive 3.4.1'
PACKAGE_BUGREPORT='libarchive-discuss@googlegroups.com'
PACKAGE_URL=''
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures libarchive 3.4.0 to adapt to many kinds of systems.
+\`configure' configures libarchive 3.4.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of libarchive 3.4.0:";;
+ short | recursive ) echo "Configuration of libarchive 3.4.1:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-libarchive configure 3.4.0
+libarchive configure 3.4.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by libarchive $as_me 3.4.0, which was
+It was created by libarchive $as_me 3.4.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='libarchive'
- VERSION='3.4.0'
+ VERSION='3.4.1'
cat >>confdefs.h <<_ACEOF
# Libtool interface version bumps on any API change, so increments
# whenever libarchive minor version does.
-ARCHIVE_MINOR=$(( (3004000 / 1000) % 1000 ))
+ARCHIVE_MINOR=$(( (3004001 / 1000) % 1000 ))
# Libarchive 2.7 == libtool interface 9 = 2 + 7
# Libarchive 2.8 == libtool interface 10 = 2 + 8
# Libarchive 2.9 == libtool interface 11 = 2 + 8
# Libarchive 3.1 == libtool interface 13
ARCHIVE_INTERFACE=`echo $((13 + ${ARCHIVE_MINOR}))`
# Libarchive revision is bumped on any source change === libtool revision
-ARCHIVE_REVISION=$(( 3004000 % 1000 ))
+ARCHIVE_REVISION=$(( 3004001 % 1000 ))
# Libarchive minor is bumped on any interface addition === libtool age
ARCHIVE_LIBTOOL_VERSION=$ARCHIVE_INTERFACE:$ARCHIVE_REVISION:$ARCHIVE_MINOR
# Stick the version numbers into config.h
-$as_echo "#define LIBARCHIVE_VERSION_STRING \"3.4.0\"" >>confdefs.h
+$as_echo "#define LIBARCHIVE_VERSION_STRING \"3.4.1\"" >>confdefs.h
cat >>confdefs.h <<_ACEOF
-#define LIBARCHIVE_VERSION_NUMBER "3004000"
+#define LIBARCHIVE_VERSION_NUMBER "3004001"
_ACEOF
-$as_echo "#define BSDCPIO_VERSION_STRING \"3.4.0\"" >>confdefs.h
+$as_echo "#define BSDCPIO_VERSION_STRING \"3.4.1\"" >>confdefs.h
-$as_echo "#define BSDTAR_VERSION_STRING \"3.4.0\"" >>confdefs.h
+$as_echo "#define BSDTAR_VERSION_STRING \"3.4.1\"" >>confdefs.h
-$as_echo "#define BSDCAT_VERSION_STRING \"3.4.0\"" >>confdefs.h
+$as_echo "#define BSDCAT_VERSION_STRING \"3.4.1\"" >>confdefs.h
# The shell variables here must be the same as the AC_SUBST() variables
# below, but the shell variable names apparently cannot be the same as
# the m4 macro names above. Why? Ask autoconf.
-BSDCPIO_VERSION_STRING=3.4.0
-BSDTAR_VERSION_STRING=3.4.0
-BSDCAT_VERSION_STRING=3.4.0
-LIBARCHIVE_VERSION_STRING=3.4.0
-LIBARCHIVE_VERSION_NUMBER=3004000
+BSDCPIO_VERSION_STRING=3.4.1
+BSDTAR_VERSION_STRING=3.4.1
+BSDCAT_VERSION_STRING=3.4.1
+LIBARCHIVE_VERSION_STRING=3.4.1
+LIBARCHIVE_VERSION_NUMBER=3004001
# Substitute the above version numbers into the various files below.
# Yes, I believe this is the fourth time we define what are essentially
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by libarchive $as_me 3.4.0, which was
+This file was extended by libarchive $as_me 3.4.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-libarchive config.status 3.4.0
+libarchive config.status 3.4.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
dnl In particular, this allows the version macro to be used in AC_INIT
dnl These first two version numbers are updated automatically on each release.
-m4_define([LIBARCHIVE_VERSION_S],[3.4.0])
-m4_define([LIBARCHIVE_VERSION_N],[3004000])
+m4_define([LIBARCHIVE_VERSION_S],[3.4.1])
+m4_define([LIBARCHIVE_VERSION_N],[3004001])
dnl bsdtar and bsdcpio versioning tracks libarchive
m4_define([BSDTAR_VERSION_S],LIBARCHIVE_VERSION_S())
# M4 scripts
AC_CONFIG_MACRO_DIR([build/autoconf])
# Must follow AC_CONFIG macros above...
-AM_INIT_AUTOMAKE()
+AM_INIT_AUTOMAKE([1.11 dist-xz dist-zip])
AM_MAINTAINER_MODE([enable])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
The following options are available:
.Bl -tag -width indent
.It Fl b
-Use an alternative binary format. Content of files will be uuencoded.
+Use an alternative binary format.
+Content of files will be uuencoded.
This option should be used to archive binary files correctly.
In this mode also file permissions will be stored to the archive.
uudecode(1) is needed to extract archives created with this option.
If
.Ar file
given on command line is a directory the entire subtree will be archived.
-Symbolic links given on command line are followed. Other symbolic links will
-be archived as such.
+Symbolic links given on command line are followed.
+Other symbolic links will be archived as such.
.El
.Sh EXAMPLES
To create a shell archive of the program
command makes no provisions for hard links.
.Pp
Files containing magic characters or files without a newline ('\\n') as the
-last character are not handled correctly with the default format. Use the -b
+last character are not handled correctly with the default format.
+Use the
+.Fl b
option for binary files.
.Pp
It is easy to insert trojan horses into
Read a list of filenames from standard input and copy the files to the
specified directory.
.El
-.Pp
.Sh OPTIONS
Unless specifically stated otherwise, options are applicable in
all operating modes.
standard syntax.
.Sh SEE ALSO
.Xr bzip2 1 ,
-.Xr tar 1 ,
.Xr gzip 1 ,
.Xr mt 1 ,
.Xr pax 1 ,
+.Xr tar 1 ,
.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr libarchive-formats 5 ,
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:14 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-left:6%;"><b>archive_entry_clear</b>,
<b>archive_entry_clone</b>, <b>archive_entry_free</b>,
-<b>archive_entry_new</b>, — functions for managing
+<b>archive_entry_new</b> — functions for managing
archive entry descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">archive_entry_acl(3),
archive_entry_paths(3), archive_entry_perms(3),
-archive_entry_time(3) libarchive(3),</p>
+archive_entry_time(3), libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:14 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_entry_acl_from_text</b>,
<b>archive_entry_acl_from_text_w</b>,
<b>archive_entry_acl_next</b>,
-<b>archive_entry_acl_next_w</b>,
<b>archive_entry_acl_reset</b>,
<b>archive_entry_acl_to_text</b>,
<b>archive_entry_acl_to_text_w</b>,
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
-<p><b>archive_entry_acl_next_w</b>(<i>struct archive_entry *a</i>,
-<i>int type</i>, <i>int *ret_type</i>,
-<i>int *ret_permset</i>, <i>int *ret_tag</i>,
-<i>int *ret_qual</i>,
-<i>const wchar_t **ret_name</i>);</p>
-
-<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
-
-
<p style="margin-left:12%;"><b>archive_entry_acl_reset</b>(<i>struct archive_entry *a</i>,
<i>int type</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">The “Access Control Lists
-(ACLs)” extend the standard Unix perssion model. The
+(ACLs)” extend the standard Unix permission model. The
ACL interface of <b>libarchive</b> supports both POSIX.1e
and NFSv4 style ACLs. Use of ACLs is restricted by various
levels of ACL support in operating systems, file systems and
<p style="margin-left:6%; margin-top: 1em"><b>POSIX.1e
Access Control Lists</b> <br>
A POSIX.1e ACL consists of a number of independent entries.
-Each entry specifies the permission set as bitmask of basic
-permissions. Valid permissions in the <i>permset</i>
+Each entry specifies the permission set as a bitmask of
+basic permissions. Valid permissions in the <i>permset</i>
are:</p>
<p>ARCHIVE_ENTRY_ACL_READ (<b>r</b>) <br>
<p>ARCHIVE_ENTRY_ACL_GROUP</p>
-<p style="margin-left:51%;">The group specied by the name
+<p style="margin-left:51%;">The group specified by the name
field.</p>
<p>ARCHIVE_ENTRY_ACL_GROUP_OBJ</p>
-<p style="margin-left:51%;">The group who owns the
+<p style="margin-left:51%;">The group which owns the
file.</p>
<p>ARCHIVE_ENTRY_ACL_MASK</p>
<p>ARCHIVE_ENTRY_ACL_OTHER</p>
-<p style="margin-left:51%;">Any principal who is not file
-owner or a member of the owning group.</p>
+<p style="margin-left:51%;">Any principal who is not the
+file owner or a member of the owning group.</p>
<p style="margin-left:6%; margin-top: 1em">The principals
ARCHIVE_ENTRY_ACL_USER_OBJ, ARCHIVE_ENTRY_ACL_GROUP_OBJ and
other in the classic Unix permission model and specify
non-extended ACL entries.</p>
-<p style="margin-left:6%; margin-top: 1em">All files with
-have an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS). This
+<p style="margin-left:6%; margin-top: 1em">All files have
+an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS). This
specifies the permissions required for access to the file
itself. Directories have an additional ACL
(ARCHIVE_ENTRY_ACL_TYPE_DEFAULT), which controls the initial
-access ACL for newly created directory entries.</p>
+access ACL for newly-created directory entries.</p>
<p style="margin-left:6%; margin-top: 1em"><b>NFSv4 Access
Control Lists</b> <br>
<p>ARCHIVE_ENTRY_ACL_GROUP</p>
-<p style="margin-left:51%;">The group specied by the name
+<p style="margin-left:51%;">The group specified by the name
field.</p>
<p>ARCHIVE_ENTRY_ACL_GROUP_OBJ</p>
-<p style="margin-left:51%;">The group who owns the
+<p style="margin-left:51%;">The group which owns the
file.</p>
<p>ARCHIVE_ENTRY_ACL_EVERYONE</p>
-<p style="margin-left:51%;">Any principal who is not file
-owner or a member of the owning group.</p>
+<p style="margin-left:51%;">Any principal who is not the
+file owner or a member of the owning group.</p>
<p style="margin-left:6%; margin-top: 1em">Entries with the
ARCHIVE_ENTRY_ACL_USER or ARCHIVE_ENTRY_ACL_GROUP tag store
<p style="margin-left:6%; margin-top: 1em">Supports all
formats that can be created with
-<b>archive_entry_acl_to_text</b>() or respective
+<b>archive_entry_acl_to_text</b>() or respectively
<b>archive_entry_acl_to_text_w</b>(). Existing ACL entries
are preserved. To get a clean new ACL from text
<b>archive_entry_acl_clear</b>() must be called first.
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_next</b>()
-and <b>archive_entry_acl_next_w</b>() return the next entry
-of the ACL list. This functions may only be called after
-<b>archive_entry_acl_reset</b>() has indicated the presence
-of extended ACL entries.</p>
+return the next entry of the ACL list. This functions may
+only be called after <b>archive_entry_acl_reset</b>() has
+indicated the presence of extended ACL entries.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_reset</b>()
prepare reading the list of ACL entries with
-<b>archive_entry_acl_next</b>() or
-<b>archive_entry_acl_next_w</b>(). The function returns
-either 0, if no non-extended ACLs are found. In this case,
-the access permissions should be obtained by
-archive_entry_mode(3) or set using chmod(2). Otherwise, the
-function returns the same value as
-<b>archive_entry_acl_count</b>().</p>
+<b>archive_entry_acl_next</b>(). The function returns 0 if
+no non-extended ACLs are found. In this case, the access
+permissions should be obtained by archive_entry_mode(3) or
+set using chmod(2). Otherwise, the function returns the same
+value as <b>archive_entry_acl_count</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_to_text</b>()
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_next</b>()
-and <b>archive_entry_acl_next_w</b>() return ARCHIVE_OK on
-success, ARCHIVE_EOF if no more ACL entries exist and
-ARCHIVE_WARN if <b>archive_entry_acl_reset</b>() has not
-been called first.</p>
+returns ARCHIVE_OK on success, ARCHIVE_EOF if no more ACL
+entries exist and ARCHIVE_WARN if
+<b>archive_entry_acl_reset</b>() has not been called
+first.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_to_text</b>()
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-left:6%;"><b>archive_entry_symlink_type</b>,
<b>archive_entry_set_symlink_type</b> — miscellaneous
-functions for manipulating properties of archive_entry.</p>
+functions for manipulating properties of archive_entry</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em">UTF-8</p>
<p style="margin-left:21%; margin-top: 1em">Unicode strings
-encoded as UTF-8. This are convience functions to update
+encoded as UTF-8. These are convenience functions to update
both the multibyte and wide character strings at the same
time.</p>
<p style="margin-left:6%; margin-top: 1em">For that reason,
it is only available as multibyte string. The link path is a
-convience function for conditionally setting hardlink or
+convenience function for conditionally setting hardlink or
symlink destination. It doesn’t have a corresponding
get accessor function.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">archive_entry(3)
-libarchive(3),</p>
+<p style="margin-left:6%;">archive_entry(3),
+libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_entry_set_gid</b>(), and
<b>archive_entry_set_perm</b>() store the given user id,
group id and permission in the entry. The permission is also
-set as side effect of calling
+set as a side effect of calling
<b>archive_entry_set_mode</b>().</p>
<p style="margin-top: 1em">UTF-8</p>
<p style="margin-left:21%; margin-top: 1em">Unicode strings
-encoded as UTF-8. This are convience functions to update
+encoded as UTF-8. These are convenience functions to update
both the multibyte and wide character strings at the same
time.</p>
text format is a comma-separated list of flag names. The
<b>archive_entry_copy_fflags_text</b>() and
<b>archive_entry_copy_fflags_text_w</b>() functions parse
-the provided text and sets the internal bitmap values. This
+the provided text and set the internal bitmap values. This
is a platform-specific operation; names that are not
meaningful on the current platform will be ignored. The
function returns a pointer to the start of the first name
<p style="margin-left:6%;">archive_entry(3),
archive_entry_acl(3), archive_read_disk(3),
-archive_write_disk(3) libarchive(3),</p>
+archive_write_disk(3), libarchive(3)</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_entry_rdevmajor</b>,
<b>archive_entry_set_rdevmajor</b>,
<b>archive_entry_rdevminor</b>,
-<b>archive_entry_set_rdevminor</b>, — accessor
+<b>archive_entry_set_rdevminor</b> — accessor
functions for manipulating archive entry descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">archive_entry_acl(3),
+<p style="margin-left:6%;">stat(2), archive_entry_acl(3),
archive_entry_perms(3), archive_entry_time(3),
-libarchive(3), stat(2)</p>
+libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_entry_mtime</b>, <b>archive_entry_mtime_nsec</b>,
<b>archive_entry_mtime_is_set</b>,
<b>archive_entry_set_mtime</b>,
-<b>archive_entry_unset_mtime</b>, — functions for
+<b>archive_entry_unset_mtime</b> — functions for
manipulating times in archive entry descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">archive_entry(3)
-libarchive(3),</p>
+<p style="margin-left:6%;">archive_entry(3),
+libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:21 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_read_free</b>() to release all resources,
including all memory allocated by the library.</p>
-<p style="margin-top: 1em"><b>EXAMPLE</b></p>
+<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following illustrates basic
usage of the library. In this example, the callback
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read_new(3), archive_read_data(3),
+<p style="margin-left:6%;">tar(1), archive_read_data(3),
archive_read_extract(3), archive_read_filter(3),
archive_read_format(3), archive_read_header(3),
-archive_read_open(3), archive_read_set_options(3),
-archive_util(3), tar(5)</p>
+archive_read_new(3), archive_read_open(3),
+archive_read_set_options(3), archive_util(3), libarchive(3),
+tar(5)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>archive_read_set_passphrase_callback</b>()</p>
-<p style="margin-left:17%;">Register callback function that
-will be invoked to get a passphrase for decrption after
-trying all passphrases registered by the
+<p style="margin-left:17%;">Register a callback function
+that will be invoked to get a passphrase for decryption
+after trying all the passphrases registered by the
<b>archive_read_add_passphrase</b>() function failed.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read(3), archive_read_set_options(3)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_read_set_options(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
September 14, 2014 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:15 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>NAME</b></p>
-<p style="margin-left:6%;"><b>archive_read_data
-archive_read_data_block</b>, <b>archive_read_data_skip</b>,
+<p style="margin-left:6%;"><b>archive_read_data</b>,
+<b>archive_read_data_block</b>,
+<b>archive_read_data_skip</b>,
<b>archive_read_data_into_fd</b> — functions for
reading streaming archives</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read(3), archive_read_extract(3),
-archive_read_filter(3), archive_read_format(3),
-archive_read_header(3), archive_read_open(3),
-archive_read_set_options(3), archive_util(3), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_read_extract(3), archive_read_filter(3),
+archive_read_format(3), archive_read_header(3),
+archive_read_open(3), archive_read_set_options(3),
+archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-left:27%;">Skip files and directories with
the nodump file attribute (file flag) set. By default, the
-nodump file atrribute is ignored.</p>
+nodump file attribute is ignored.</p>
<p><b>ARCHIVE_READDISK_MAC_COPYFILE</b></p>
<p><b>ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS</b></p>
<p style="margin-left:27%;">Do not traverse mount points.
-By defaut, moint points are traversed.</p>
+By default, mount points are traversed.</p>
<p><b>ARCHIVE_READDISK_NO_XATTR</b></p>
<p style="margin-left:17%; margin-top: 1em">Where
necessary, user and group ids are converted to user and
-group names using the currently registered lookup functions
+group names using the currently-registered lookup functions
above. This affects the file ownership fields and ACL values
in the struct archive_entry object.</p>
<i>struct archive</i> object and the overall design of the
library can be found in the libarchive(3) overview.</p>
-<p style="margin-top: 1em"><b>EXAMPLE</b></p>
+<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following illustrates basic
usage of the library by showing how to use it to copy an
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">archive_read(3),
+<p style="margin-left:6%;">tar(1), archive_read(3),
archive_util(3), archive_write(3), archive_write_disk(3),
-tar(1), libarchive(3)</p>
+libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read(3), archive_read_data(3),
-archive_read_filter(3), archive_read_format(3),
-archive_read_open(3), archive_read_set_options(3),
-archive_util(3), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_read_data(3), archive_read_filter(3),
+archive_read_format(3), archive_read_open(3),
+archive_read_set_options(3), archive_util(3), libarchive(3),
+tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">libarchive(3), archive_read(3),
+<p style="margin-left:6%;">archive_read(3),
archive_read_data(3), archive_read_format(3),
-archive_read_format(3)</p>
+archive_read_format(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
August 14, 2014 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read_data(3), archive_read_filter(3),
-archive_read_set_options(3), archive_util(3), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_read_data(3),
+archive_read_filter(3), archive_read_set_options(3),
+archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">libarchive(3),
-archive_read_new(3), archive_read_data(3),
+<p style="margin-left:6%;">archive_read_data(3),
archive_read_filter(3), archive_read_format(3),
-archive_read_open(3), archive_read_set_options(3),
-archive_util(3)</p>
+archive_read_new(3), archive_read_open(3),
+archive_read_set_options(3), archive_util(3),
+libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read(3), archive_read_data(3),
-archive_read_extract(3), archive_read_filter(3),
-archive_read_format(3), archive_read_open(3),
-archive_read_set_options(3), archive_util(3), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_read_data(3), archive_read_extract(3),
+archive_read_filter(3), archive_read_format(3),
+archive_read_open(3), archive_read_set_options(3),
+archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:22 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read_data(3), archive_read_filter(3),
-archive_read_format(3), archive_read_set_options(3),
-archive_util(3), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_read_data(3),
+archive_read_filter(3), archive_read_format(3),
+archive_read_set_options(3), archive_util(3), libarchive(3),
+tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
processing is complete. The callback should return
<b>ARCHIVE_OK</b> on success. On failure, the callback
should invoke <b>archive_set_error</b>() to register an
-error code and message and return <b>ARCHIVE_FATAL.</b></p>
+error code and message and return <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read(3), archive_read_data(3),
-archive_read_filter(3), archive_read_format(3),
-archive_read_set_options(3), archive_util(3), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_read_data(3), archive_read_filter(3),
+archive_read_format(3), archive_read_set_options(3),
+archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write_set_options(3), archive_read(3)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_write_set_options(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:16 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p><b>archive_compression</b>()</p>
<p style="margin-left:17%;">Synonym for
-<b>archive_filter_code(a,</b>(<i>0)</i>).</p>
+<b>archive_filter_code</b>(<i>a</i>, <i>0</i>).</p>
<p><b>archive_compression_name</b>()</p>
<p style="margin-left:17%;">Synonym for
-<b>archive_filter_name(a,</b>(<i>0)</i>).</p>
+<b>archive_filter_name</b>(<i>a</i>, <i>0</i>).</p>
<p><b>archive_copy_error</b>()</p>
three filters: filter 0 is the gunzip filter, filter 1 is
the uudecode filter, and filter 2 is the pseudo-filter that
wraps the archive read functions. In this case, requesting
-<b>archive_position(a,</b>(<i>-1)</i>) would be a synonym
-for <b>archive_position(a,</b>(<i>2)</i>) which would return
-the number of bytes currently read from the archive, while
-<b>archive_position(a,</b>(<i>1)</i>) would return the
-number of bytes after uudecoding, and
-<b>archive_position(a,</b>(<i>0)</i>) would return the
-number of bytes after decompression.</p>
+<b>archive_position</b>(<i>a</i>, <i>-1</i>) would be a
+synonym for <b>archive_position</b>(<i>a</i>, <i>2</i>)
+which would return the number of bytes currently read from
+the archive, while <b>archive_position</b>(<i>a</i>,
+<i>1</i>) would return the number of bytes after uudecoding,
+and <b>archive_position</b>(<i>a</i>, <i>0</i>) would return
+the number of bytes after decompression.</p>
<p><b>archive_filter_name</b>()</p>
<p style="margin-left:17%;">Returns the number of bytes
read from or written to the indicated filter. In particular,
-<b>archive_position(a,</b>(<i>0)</i>) returns the number of
-bytes read or written by the format handler, while
-<b>archive_position(a,</b>(<i>-1)</i>) returns the number of
-bytes read or written to the archive. See
+<b>archive_position</b>(<i>a</i>, <i>0</i>) returns the
+number of bytes read or written by the format handler, while
+<b>archive_position</b>(<i>a</i>, <i>-1</i>) returns the
+number of bytes read or written to the archive. See
<b>archive_filter_count</b>() for details of the numbering
here.</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_write_free</b>() function to release all
resources.</p>
-<p style="margin-top: 1em"><b>EXAMPLE</b></p>
+<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following sketch illustrates
basic usage of the library. In this example, the callback
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write_set_options(3), cpio(5), mtree(5), tar(5)</p>
+<p style="margin-left:6%;">tar(1),
+archive_write_set_options(3), libarchive(3), cpio(5),
+mtree(5), tar(5)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write_set_options(3), cpio(5), mtree(5), tar(5)</p>
+<p style="margin-left:6%;">tar(1),
+archive_write_set_options(3), libarchive(3), cpio(5),
+mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
+<p style="margin-left:6%;">tar(1),
archive_write_finish_entry(3), archive_write_set_options(3),
-cpio(5), mtree(5), tar(5)</p>
+libarchive(3), cpio(5), mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 28, 2017 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">archive_read(3),
-archive_write(3), tar(1), libarchive(3)</p>
+<p style="margin-left:6%;">tar(1), archive_read(3),
+archive_write(3), libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_write_add_filter_program</b>,
<b>archive_write_add_filter_uuencode</b>,
<b>archive_write_add_filter_xz</b>,
-<b>archive_write_add_filter_zstd</b>, — functions
+<b>archive_write_add_filter_zstd</b> — functions
enabling output filters</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write(3), archive_write_format(3),
-archive_write_set_options(3), cpio(5), mtree(5), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_write(3),
+archive_write_format(3), archive_write_set_options(3),
+libarchive(3), cpio(5), mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
August 14, 2014 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:23 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write_data(3), archive_write_set_options(3),
-cpio(5), mtree(5), tar(5)</p>
+<p style="margin-left:6%;">tar(1), archive_write_data(3),
+archive_write_set_options(3), libarchive(3), cpio(5),
+mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 28, 2017 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_write_set_format_v7tar</b>,
<b>archive_write_set_format_warc</b>,
<b>archive_write_set_format_xar</b>,
-<b>archive_write_set_format_zip</b>, — functions for
+<b>archive_write_set_format_zip</b> — functions for
creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write(3), archive_write_set_options(3), cpio(5),
+<p style="margin-left:6%;">tar(1), archive_write(3),
+archive_write_set_options(3), libarchive(3), cpio(5),
libarchive-formats(5), mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write_set_options(3), cpio(5), mtree(5), tar(5)</p>
+<p style="margin-left:6%;">tar(1),
+archive_write_set_options(3), libarchive(3), cpio(5),
+mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write_set_options(3), cpio(5), mtree(5), tar(5)</p>
+<p style="margin-left:6%;">tar(1),
+archive_write_set_options(3), libarchive(3), cpio(5),
+mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February 2, 2012 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write(3), archive_write_set_options(3), cpio(5),
+<p style="margin-left:6%;">tar(1), archive_write(3),
+archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
processing is complete. The callback should return
<b>ARCHIVE_OK</b> on success. On failure, the callback
should invoke <b>archive_set_error</b>() to register an
-error code and message and return <b>ARCHIVE_FATAL.</b></p>
+error code and message and return <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-left:6%; margin-top: 1em">Note that if the
client-provided write callback function returns a non-zero
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write(3), archive_write_blocksize(3),
-archive_write_filter(3), archive_write_format(3),
-archive_write_new(3), archive_write_set_options(3), cpio(5),
+<p style="margin-left:6%;">tar(1), archive_write(3),
+archive_write_blocksize(3), archive_write_filter(3),
+archive_write_format(3), archive_write_new(3),
+archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>archive_write_set_format_option</b>()</p>
<p style="margin-left:17%;">Specifies an option that will
-be passed to currently-registered filters (including
+be passed to the currently-registered filters (including
decompression filters) or format readers.</p>
<p style="margin-left:17%; margin-top: 1em">If
<b>archive_write_set_format_option</b>(), then
<b>archive_write_set_filter_option</b>(). If either function
returns <b>ARCHIVE_FATAL</b>, <b>ARCHIVE_FATAL</b> will be
-returned immediately. Otherwise, greater of the two values
-will be returned.</p>
+returned immediately. Otherwise, the greater of the two
+values will be returned.</p>
<p style="margin-top: 1em"><b>archive_write_set_options</b>()</p>
used without floppy or hard disk emulation. If the boot
image is exactly 1.2MB, 1.44MB, or 2.88MB, then the default
is <b>fd</b>, otherwise the default is
-<b>no-emulation.</b></p>
+<b>no-emulation</b>.</p>
<p>Format iso9660 - filename and size extensions</p>
<p style="margin-left:27%;">If enabled, allows filenames to
contain trailing period characters, in violation of the
-ISO9660 specification. If disabled,trailing periods will be
+ISO9660 specification. If disabled, trailing periods will be
converted to underscore characters. This does not impact
names stored in the Rockridge or Joliet extension area.
Default: disabled.</p>
This option can be provided multiple times to suppress
compression on many files.</p>
+<p>Format pax <b><br>
+hdrcharset</b></p>
+
+<p style="margin-left:27%;">This sets the character set
+used for filenames, uname and gname. The value is one of
+“BINARY” or “UTF-8”. With
+“BINARY” there is no character conversion, with
+“UTF-8” names are converted to UTF-8.</p>
+
+<p><b>xattrheader</b></p>
+
+<p style="margin-left:27%;">When storing extended
+attributes, this option configures which headers should be
+written. The value is one of “all”,
+“LIBARCHIVE”, or “SCHILY”. By
+default, both “LIBARCHIVE.xattr” and
+“SCHILY.xattr” headers are written.</p>
+
+<p>Format 7zip <b><br>
+compression</b></p>
+
+<p style="margin-left:27%;">The value is one of
+“store”, “deflate”,
+“bzip2”, “lzma1”,
+“lzma2” or “ppmd” to indicate how
+the following entries should be compressed. Note that this
+setting is ignored for directories, symbolic links, and
+other special entries.</p>
+
+<p><b>compression-level</b></p>
+
+<p style="margin-left:27%;">The value is interpreted as a
+decimal integer specifying the compression level. Values
+between 0 and 9 are supported. The interpretation of the
+compression level depends on the chosen compression
+method.</p>
+
<p>Format zip <b><br>
compression</b></p>
setting is ignored for directories, symbolic links, and
other special entries.</p>
+<p><b>compression-level</b></p>
+
+<p style="margin-left:27%;">The value is interpreted as a
+decimal integer specifying the compression level. Values
+between 0 and 9 are supported. A compression level of 0
+switches the compression method to “store”,
+other values will enable “deflate” compression
+with the given level.</p>
+
<p><b>experimental</b></p>
<p style="margin-left:27%;">This boolean option enables or
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_read_set_options(3), archive_write(3)</p>
+<p style="margin-left:6%;">tar(1),
+archive_read_set_options(3), archive_write(3),
+libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-top: 1em"><b>BUGS</b></p>
-<p style="margin-left:6%;">BSD February 2, 2012
+<p style="margin-left:6%;">BSD December 3, 2019
BSD</p>
<hr>
</body>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
archive_write_set_passphrase</b>()</p>
<p style="margin-left:17%;">Set a passphrase for writing an
-encryption archive. If <i>passphrase</i> is NULL or empty,
+encrypted archive. If <i>passphrase</i> is NULL or empty,
this function will do nothing and <b>ARCHIVE_FAILED</b> will
be returned. Otherwise, <b>ARCHIVE_OK</b> will be
returned.</p>
<p style="margin-top: 1em"><b>archive_write_set_passphrase_callback</b>()</p>
-<p style="margin-left:17%;">Register callback function that
-will be invoked to get a passphrase for encrption if the
-passphrase was not set by the
+<p style="margin-left:17%;">Register a callback function
+that will be invoked to get a passphrase for encryption if
+the passphrase was not set by the
<b>archive_write_set_passphrase</b>() function.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">tar(1), libarchive(3),
-archive_write(3), archive_write_set_options(3)</p>
+<p style="margin-left:6%;">tar(1), archive_write(3),
+archive_write_set_options(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
September 21, 2014 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:19 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:26 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">bzip2(1), tar(1), gzip(1),
-mt(1), pax(1), libarchive(3), cpio(5),
+<p style="margin-left:6%;">bzip2(1), gzip(1), mt(1),
+pax(1), tar(1), libarchive(3), cpio(5),
libarchive-formats(5), tar(5)</p>
<p style="margin-top: 1em"><b>STANDARDS</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:19 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:26 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
hierarchies, invoke <b>tar</b> as</p>
<p style="margin-left:14%;"><b>tar -cf</b> <i>-</i>
-<b>-C</b> <i>srcdir .</i> | <b>tar -xpf</b> <i>-</i>
+<b>-C</b> <i>srcdir .</i> | <b>tar -xpf</b> <i>-</i>
<b>-C</b> <i>destdir</i></p>
<p style="margin-left:6%;">or more traditionally</p>
-<p style="margin-left:14%;">cd srcdir ; <b>tar -cf</b>
-<i>- .</i> | (<i>cd destdir ;</i> <b>tar -xpf</b>
-<i>-</i>)</p>
+<p style="margin-left:14%;">cd srcdir ; <b>tar -cf</b> <i>-
+.</i> | (<i>cd destdir ;</i> <b>tar -xpf</b> <i>-</i>)</p>
<p style="margin-left:6%; margin-top: 1em">In create mode,
the list of files and directories to be archived can also
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:24 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:25 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:25 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:25 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
-<p style="margin-left:6%;">libarchive(3), archive_read(3),
+<p style="margin-left:6%;">archive_read(3),
archive_read_filter(3), archive_read_format(3),
-archive_read_set_options(3), archive_write(3),
-archive_write_filter(3), archive_write_format(3),
-archive_write_set_options(3), archive_util(3)</p>
+archive_read_set_options(3), archive_util(3),
+archive_write(3), archive_write_filter(3),
+archive_write_format(3), archive_write_set_options(3),
+libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
December 23, 2011 BSD</p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:18 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:25 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
-archive_read(3), archive_write(3), archive_write_disk(3)
-libarchive(3),</p>
+archive_read(3), archive_write(3), archive_write_disk(3),
+libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:19 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:25 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<p style="margin-left:6%;">cksum(1), find(1), mtree(8)</p>
-<p style="margin-top: 1em"><b>BUGS <br>
-HISTORY</b></p>
+<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>mtree</b> utility
appeared in 4.3BSD-Reno. The MD5 digest capability was added
<!-- Creator : groff version 1.22.4 -->
-<!-- CreationDate: Wed Jun 12 21:10:19 2019 -->
+<!-- CreationDate: Mon Dec 30 01:41:25 2019 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
by Joerg Schilling’s <b>star</b> implementation.</p>
<p style="margin-top: 1em"><b>SCHILY.acl.access</b>,
-<b>SCHILY.acl.default, SCHILY.acl.ace</b></p>
+<b>SCHILY.acl.default</b>, <b>SCHILY.acl.ace</b></p>
<p style="margin-left:17%;">Stores the access, default and
NFSv4 ACLs as textual strings in a format that is an
<p style="margin-left:17%;">The full size of the file on
disk. XXX explain? XXX</p>
-<p style="margin-top: 1em"><b>SCHILY.dev, SCHILY.ino</b>,
-<b>SCHILY.nlinks</b></p>
+<p style="margin-top: 1em"><b>SCHILY.dev</b>,
+<b>SCHILY.ino</b>, <b>SCHILY.nlinks</b></p>
<p style="margin-left:17%;">The device number, inode
number, and link count for the entry. In particular, note
the file metadata was last changed.)</p>
-<p style="margin-top: 1em"><b>LIBARCHIVE.xattr.</b><i>namespace</i>.<i>key</i></p>
+<p style="margin-top: 1em"><b>LIBARCHIVE.xattr</b>.<i>namespace</i>.<i>key</i></p>
<p style="margin-left:17%;">Libarchive stores
POSIX.1e-style extended attributes using keys of this form.
\fB\%archive_entry_clear\fP,
\fB\%archive_entry_clone\fP,
\fB\%archive_entry_free\fP,
-\fB\%archive_entry_new\fP,
+\fB\%archive_entry_new\fP
\- functions for managing archive entry descriptions
.SH LIBRARY
.ad l
Similarly, if you store a wide string and then store a
narrow string for the same data, the previously-set wide string will
be discarded in favor of the new data.
-.PP
.SH SEE ALSO
.ad l
\fBarchive_entry_acl\fP(3),
\fBarchive_entry_paths\fP(3),
\fBarchive_entry_perms\fP(3),
-\fBarchive_entry_time\fP(3)
-\fBlibarchive\fP(3),
+\fBarchive_entry_time\fP(3),
+\fBlibarchive\fP(3)
.SH HISTORY
.ad l
The
\fB\%archive_entry_acl_from_text\fP,
\fB\%archive_entry_acl_from_text_w\fP,
\fB\%archive_entry_acl_next\fP,
-\fB\%archive_entry_acl_next_w\fP,
\fB\%archive_entry_acl_reset\fP,
\fB\%archive_entry_acl_to_text\fP,
\fB\%archive_entry_acl_to_text_w\fP,
.br
\fIint\fP
.br
-\fB\%archive_entry_acl_next_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP, \fI\%int\ *ret_type\fP, \fI\%int\ *ret_permset\fP, \fI\%int\ *ret_tag\fP, \fI\%int\ *ret_qual\fP, \fI\%const\ wchar_t\ **ret_name\fP);
-.br
-\fIint\fP
-.br
\fB\%archive_entry_acl_reset\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP);
.br
\fIchar *\fP
.ad l
The
``Access Control Lists (ACLs)''
-extend the standard Unix perssion model.
+extend the standard Unix permission model.
The ACL interface of
\fB\%libarchive\fP
-supports both POSIX.1e and NFSv4 style ACLs. Use of ACLs is restricted by
+supports both POSIX.1e and NFSv4 style ACLs.
+Use of ACLs is restricted by
various levels of ACL support in operating systems, file systems and archive
formats.
.SS POSIX.1e Access Control Lists
A POSIX.1e ACL consists of a number of independent entries.
-Each entry specifies the permission set as bitmask of basic permissions.
+Each entry specifies the permission set as a bitmask of basic permissions.
Valid permissions in the
are:
.RS 5
It .BR ARCHIVE_ENTRY_ACL_USER_OBJ
The owner of the file.
It .BR ARCHIVE_ENTRY_ACL_GROUP
-The group specied by the name field.
+The group specified by the name field.
It .BR ARCHIVE_ENTRY_ACL_GROUP_OBJ
-The group who owns the file.
+The group which owns the file.
It .BR ARCHIVE_ENTRY_ACL_MASK
The maximum permissions to be obtained via group permissions.
It .BR ARCHIVE_ENTRY_ACL_OTHER
-Any principal who is not file owner or a member of the owning group.
+Any principal who is not the file owner or a member of the owning group.
.RE
.PP
The principals
are equivalent to user, group and other in the classic Unix permission
model and specify non-extended ACL entries.
.PP
-All files with have an access ACL
+All files have an access ACL
(.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS.)
This specifies the permissions required for access to the file itself.
Directories have an additional ACL
(.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,)
-which controls the initial access ACL for newly created directory entries.
+which controls the initial access ACL for newly-created directory entries.
.SS NFSv4 Access Control Lists
A NFSv4 ACL consists of multiple individual entries called Access Control
Entries (ACEs).
It .BR ARCHIVE_ENTRY_ACL_USER_OBJ
The owner of the file.
It .BR ARCHIVE_ENTRY_ACL_GROUP
-The group specied by the name field.
+The group specified by the name field.
It .BR ARCHIVE_ENTRY_ACL_GROUP_OBJ
-The group who owns the file.
+The group which owns the file.
It .BR ARCHIVE_ENTRY_ACL_EVERYONE
-Any principal who is not file owner or a member of the owning group.
+Any principal who is not the file owner or a member of the owning group.
.RE
.PP
Entries with the
integer.
.PP
NFSv4 ACE permissions and flags are stored in the same
-bitfield. Some permissions share the same constant and permission character but
-have different effect on directories than on files. The following ACE
-permissions are supported:
+bitfield.
+Some permissions share the same constant and permission character
+but have different effect on directories than on files.
+The following ACE permissions are supported:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_READ_DATA (.B r )
Only inherit, do not apply the permission on the directory itself.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT (.B n )
-Do not propagate inherit flags. Only first-level entries inherit ACLs.
+Do not propagate inherit flags.
+Only first-level entries inherit ACLs.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS (.B S )
Trigger alarm or audit on successful access.
\fB\%archive_entry_acl_add_entry_w\fP()
add a single ACL entry.
For the access ACL and non-extended principals, the classic Unix permissions
-are updated. An archive entry cannot contain both POSIX.1e and NFSv4 ACL
-entries.
+are updated.
+An archive entry cannot contain both POSIX.1e and NFSv4 ACL entries.
.PP
\fB\%archive_entry_acl_clear\fP()
removes all ACL entries and resets the enumeration pointer.
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_ALARM
.RE
-for NFSv4 ACLs. For POSIX.1e ACLs if
+for NFSv4 ACLs.
+For POSIX.1e ACLs if
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
is included and at least one extended ACL entry is found,
the three non-extended ACLs are added.
(or merge with existing)
ACL entries from
(wide)
-text. The argument
+text.
+The argument
may take one of the following values:
.RS 5
.TP
.RE
Supports all formats that can be created with
\fB\%archive_entry_acl_to_text\fP()
-or respective
+or respectively
\fB\%archive_entry_acl_to_text_w\fP().
-Existing ACL entries are preserved. To get a clean new ACL from text
+Existing ACL entries are preserved.
+To get a clean new ACL from text
\fB\%archive_entry_acl_clear\fP()
-must be called first. Entries prefixed with
+must be called first.
+Entries prefixed with
``default:''
are treated as
.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
are skipped.
.PP
\fB\%archive_entry_acl_next\fP()
-and
-\fB\%archive_entry_acl_next_w\fP()
return the next entry of the ACL list.
This functions may only be called after
\fB\%archive_entry_acl_reset\fP()
.PP
\fB\%archive_entry_acl_reset\fP()
prepare reading the list of ACL entries with
-\fB\%archive_entry_acl_next\fP()
-or
-\fB\%archive_entry_acl_next_w\fP().
-The function returns either 0, if no non-extended ACLs are found.
+\fB\%archive_entry_acl_next\fP().
+The function returns 0 if no non-extended ACLs are found.
In this case, the access permissions should be obtained by
\fBarchive_entry_mode\fP(3)
or set using
\fB\%archive_entry_acl_to_text_w\fP()
convert the ACL entries for the given type into a
(wide)
-string of ACL entries separated by newline. If the pointer
+string of ACL entries separated by newline.
+If the pointer
is not NULL, then the function shall return the length of the string
(not including the NULL terminator)
in the location pointed to by
``default:''.
.PP
\fB\%archive_entry_acl_types\fP()
-get ACL entry types contained in an archive entry's ACL. As POSIX.1e and NFSv4
+get ACL entry types contained in an archive entry's ACL.
+As POSIX.1e and NFSv4
ACL entries cannot be mixed, this function is a very efficient way to detect if
an ACL already contains POSIX.1e or NFSv4 ACL entries.
.SH RETURN VALUES
if one or more entries were invalid or non-parseable.
.PP
\fB\%archive_entry_acl_next\fP()
-and
-\fB\%archive_entry_acl_next_w\fP()
-return
+returns
.BR ARCHIVE_OK
on success,
.BR ARCHIVE_EOF
.ad l
\fB\%archive_entry_symlink_type\fP,
\fB\%archive_entry_set_symlink_type\fP
-\- miscellaneous functions for manipulating properties of archive_entry.
+\- miscellaneous functions for manipulating properties of archive_entry
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
\fB\%archive_entry_symlink_type\fP()
returns and the function
\fB\%archive_entry_set_symlink_type\fP()
-sets the type of the symbolic link stored in an archive entry. These functions
+sets the type of the symbolic link stored in an archive entry.
+These functions
have special meaning on operating systems that support multiple symbolic link
types (e.g. Microsoft Windows).
.PP
.TP
UTF-8
Unicode strings encoded as UTF-8.
-This are convience functions to update both the multibyte and wide
+These are convenience functions to update both the multibyte and wide
character strings at the same time.
.RE
.PP
archive directly.
.PP
For that reason, it is only available as multibyte string.
-The link path is a convience function for conditionally setting
+The link path is a convenience function for conditionally setting
hardlink or symlink destination.
It doesn't have a corresponding get accessor function.
.PP
\fB\%archive_entry_set_XXX\fP()
-is an alias for
+is an alias for
\fB\%archive_entry_copy_XXX\fP().
.SH SEE ALSO
.ad l
-\fBarchive_entry\fP(3)
-\fBlibarchive\fP(3),
+\fBarchive_entry\fP(3),
+\fBlibarchive\fP(3)
and
\fB\%archive_entry_set_perm\fP()
store the given user id, group id and permission in the entry.
-The permission is also set as side effect of calling
+The permission is also set as a side effect of calling
\fB\%archive_entry_set_mode\fP().
.PP
\fB\%archive_entry_strmode\fP()
.TP
UTF-8
Unicode strings encoded as UTF-8.
-This are convience functions to update both the multibyte and wide
+These are convenience functions to update both the multibyte and wide
character strings at the same time.
.RE
.PP
\fB\%archive_entry_set_XXX\fP()
-is an alias for
+is an alias for
\fB\%archive_entry_copy_XXX\fP().
.SS File Flags
File flags are transparently converted between a bitmap
\fB\%archive_entry_copy_fflags_text\fP()
and
\fB\%archive_entry_copy_fflags_text_w\fP()
-functions parse the provided text and sets the internal bitmap values.
+functions parse the provided text and set the internal bitmap values.
This is a platform-specific operation; names that are not meaningful
on the current platform will be ignored.
The function returns a pointer to the start of the first name that was not
\fBarchive_entry\fP(3),
\fBarchive_entry_acl\fP(3),
\fBarchive_read_disk\fP(3),
-\fBarchive_write_disk\fP(3)
-\fBlibarchive\fP(3),
+\fBarchive_write_disk\fP(3),
+\fBlibarchive\fP(3)
.SH BUGS
.ad l
The platform types
\fB\%archive_entry_rdevmajor\fP,
\fB\%archive_entry_set_rdevmajor\fP,
\fB\%archive_entry_rdevminor\fP,
-\fB\%archive_entry_set_rdevminor\fP,
+\fB\%archive_entry_set_rdevminor\fP
\- accessor functions for manipulating archive entry descriptions
.SH LIBRARY
.ad l
the split form.
.SH SEE ALSO
.ad l
+\fBstat\fP(2),
\fBarchive_entry_acl\fP(3),
\fBarchive_entry_perms\fP(3),
\fBarchive_entry_time\fP(3),
-\fBlibarchive\fP(3),
-\fBstat\fP(2)
+\fBlibarchive\fP(3)
\fB\%archive_entry_mtime_nsec\fP,
\fB\%archive_entry_mtime_is_set\fP,
\fB\%archive_entry_set_mtime\fP,
-\fB\%archive_entry_unset_mtime\fP,
+\fB\%archive_entry_unset_mtime\fP
\- functions for manipulating times in archive entry descriptions
.SH LIBRARY
.ad l
Unset time fields have a second and nanosecond field of 0.
.SH SEE ALSO
.ad l
-\fBarchive_entry\fP(3)
-\fBlibarchive\fP(3),
+\fBarchive_entry\fP(3),
+\fBlibarchive\fP(3)
.SH HISTORY
.ad l
The
to close the archive, then call
\fB\%archive_read_free\fP()
to release all resources, including all memory allocated by the library.
-.SH EXAMPLE
+.SH EXAMPLES
.ad l
The following illustrates basic usage of the library.
In this example,
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
-\fBarchive_read_new\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_extract\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_format\fP(3),
\fBarchive_read_header\fP(3),
+\fBarchive_read_new\fP(3),
\fBarchive_read_open\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
.SH HISTORY
.ad l
will be returned.
Otherwise,
\fBARCHIVE_OK\fP
-will be returned.
+will be returned.
.TP
\fB\%archive_read_set_passphrase_callback\fP()
-Register callback function that will be invoked to get a passphrase
-for decrption after trying all passphrases registered by the
+Register a callback function that will be invoked to get a passphrase
+for decryption after trying all the passphrases registered by the
\fB\%archive_read_add_passphrase\fP()
function failed.
.RE
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
-\fBarchive_read_set_options\fP(3)
+\fBarchive_read_set_options\fP(3),
+\fBlibarchive\fP(3)
.TH ARCHIVE_READ_DATA 3 "February 2, 2012" ""
.SH NAME
.ad l
-\fB\%archive_read_data\fP
+\fB\%archive_read_data\fP,
\fB\%archive_read_data_block\fP,
\fB\%archive_read_data_skip\fP,
\fB\%archive_read_data_into_fd\fP
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
\fBarchive_read_extract\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_open\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
.TP
\fBARCHIVE_READDISK_HONOR_NODUMP\fP
Skip files and directories with the nodump file attribute (file flag) set.
-By default, the nodump file atrribute is ignored.
+By default, the nodump file attribute is ignored.
.TP
\fBARCHIVE_READDISK_MAC_COPYFILE\fP
-Mac OS X specific. Read metadata (ACLs and extended attributes) with
+Mac OS X specific.
+Read metadata (ACLs and extended attributes) with
\fBcopyfile\fP(3).
By default, metadata is read using
\fBcopyfile\fP(3).
.TP
\fBARCHIVE_READDISK_NO_TRAVERSE_MOUNTS\fP
Do not traverse mount points.
-By defaut, moint points are traversed.
+By default, mount points are traversed.
.TP
\fBARCHIVE_READDISK_NO_XATTR\fP
Do not read extended file attributes (xattrs).
(For example, directory traversal libraries often provide this information.)
.PP
Where necessary, user and group ids are converted to user and group names
-using the currently registered lookup functions above.
+using the currently-registered lookup functions above.
This affects the file ownership fields and ACL values in the
Tn struct archive_entry
object.
object and the overall design of the library can be found in the
\fBlibarchive\fP(3)
overview.
-.SH EXAMPLE
+.SH EXAMPLES
.ad l
The following illustrates basic usage of the library by
showing how to use it to copy an item on disk into an archive.
functions.
.SH SEE ALSO
.ad l
+\fBtar\fP(1),
\fBarchive_read\fP(3),
\fBarchive_util\fP(3),
\fBarchive_write\fP(3),
\fBarchive_write_disk\fP(3),
-\fBtar\fP(1),
\fBlibarchive\fP(3)
.SH HISTORY
.ad l
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_open\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
functions.
.SH SEE ALSO
.ad l
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_format\fP(3),
-\fBarchive_read_format\fP(3)
+\fBarchive_read_format\fP(3),
+\fBlibarchive\fP(3)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
.SH BUGS
.ad l
functions.
.SH SEE ALSO
.ad l
-\fBlibarchive\fP(3),
-\fBarchive_read_new\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_format\fP(3),
+\fBarchive_read_new\fP(3),
\fBarchive_read_open\fP(3),
\fBarchive_read_set_options\fP(3),
-\fBarchive_util\fP(3)
+\fBarchive_util\fP(3),
+\fBlibarchive\fP(3)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_extract\fP(3),
\fBarchive_read_open\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_format\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
\fB\%archive_set_error\fP()
to register an error code and message and
return
-\fBARCHIVE_FATAL.\fP
+\fBARCHIVE_FATAL\fP.
.SH RETURN VALUES
.ad l
These functions return
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
\fBarchive_read_data\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_format\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
+\fBlibarchive\fP(3),
\fBtar\fP(5)
.TP
\fBread_concatenated_archives\fP
Ignore zeroed blocks in the archive, which occurs when multiple tar archives
-have been concatenated together. Without this option, only the contents of
+have been concatenated together.
+Without this option, only the contents of
the first concatenated archive would be read.
.RE
.RE
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
+\fBarchive_read\fP(3),
\fBarchive_write_set_options\fP(3),
-\fBarchive_read\fP(3)
+\fBlibarchive\fP(3)
.TP
\fB\%archive_compression\fP()
Synonym for
-\fB\%archive_filter_code(a,\fP(\fI\%0)\fP).
+\fB\%archive_filter_code\fP(\fI\%a\fP, \fI\%0\fP).
.TP
\fB\%archive_compression_name\fP()
Synonym for
-\fB\%archive_filter_name(a,\fP(\fI\%0)\fP).
+\fB\%archive_filter_name\fP(\fI\%a\fP, \fI\%0\fP).
.TP
\fB\%archive_copy_error\fP()
Copies error information from one archive to another.
filter 1 is the uudecode filter,
and filter 2 is the pseudo-filter that wraps the archive read functions.
In this case, requesting
-\fB\%archive_position(a,\fP(\fI\%-1)\fP)
+\fB\%archive_position\fP(\fI\%a\fP, \fI\%-1\fP)
would be a synonym for
-\fB\%archive_position(a,\fP(\fI\%2)\fP)
+\fB\%archive_position\fP(\fI\%a\fP, \fI\%2\fP)
which would return the number of bytes currently read from the archive, while
-\fB\%archive_position(a,\fP(\fI\%1)\fP)
+\fB\%archive_position\fP(\fI\%a\fP, \fI\%1\fP)
would return the number of bytes after uudecoding, and
-\fB\%archive_position(a,\fP(\fI\%0)\fP)
+\fB\%archive_position\fP(\fI\%a\fP, \fI\%0\fP)
would return the number of bytes after decompression.
.TP
\fB\%archive_filter_name\fP()
\fB\%archive_position\fP()
Returns the number of bytes read from or written to the indicated filter.
In particular,
-\fB\%archive_position(a,\fP(\fI\%0)\fP)
+\fB\%archive_position\fP(\fI\%a\fP, \fI\%0\fP)
returns the number of bytes read or written by the format handler, while
-\fB\%archive_position(a,\fP(\fI\%-1)\fP)
+\fB\%archive_position\fP(\fI\%a\fP, \fI\%-1\fP)
returns the number of bytes read or written to the archive.
See
\fB\%archive_filter_count\fP()
After all entries have been written, use the
\fB\%archive_write_free\fP()
function to release all resources.
-.SH EXAMPLE
+.SH EXAMPLES
.ad l
The following sketch illustrates basic usage of the library.
In this example,
if (archive_write_set_format_filter_by_ext(a, outname) != ARCHIVE_OK) {
archive_write_add_filter_gzip(a);
archive_write_set_format_ustar(a);
- }
+ }
archive_write_open(a, mydata, myopen, mywrite, myclose);
while (*filename) {
stat(*filename, &st);
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write_finish_entry\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
for more information on file attributes.
.TP
\fBARCHIVE_EXTRACT_MAC_METADATA\fP
-Mac OS X specific. Restore metadata using
+Mac OS X specific.
+Restore metadata using
\fBcopyfile\fP(3).
By default,
\fBcopyfile\fP(3)
functions.
.SH SEE ALSO
.ad l
+\fBtar\fP(1),
\fBarchive_read\fP(3),
\fBarchive_write\fP(3),
-\fBtar\fP(1),
\fBlibarchive\fP(3)
.SH HISTORY
.ad l
\fB\%archive_write_add_filter_program\fP,
\fB\%archive_write_add_filter_uuencode\fP,
\fB\%archive_write_add_filter_xz\fP,
-\fB\%archive_write_add_filter_zstd\fP,
+\fB\%archive_write_add_filter_zstd\fP
\- functions enabling output filters
.SH LIBRARY
.ad l
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write\fP(3),
\fBarchive_write_format\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write_data\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
\fB\%archive_write_set_format_v7tar\fP,
\fB\%archive_write_set_format_warc\fP,
\fB\%archive_write_set_format_xar\fP,
-\fB\%archive_write_set_format_zip\fP,
+\fB\%archive_write_set_format_zip\fP
\- functions for creating archives
.SH LIBRARY
.ad l
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBlibarchive-formats\fP(5),
\fBmtree\fP(5),
to release the resources.
This can be used to speed recovery when the archive creation
must be aborted.
-Note that the created archive is likely to be malformed in this case;
+Note that the created archive is likely to be malformed in this case;
.TP
\fB\%archive_write_close\fP()
Complete the archive and invoke the close callback.
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
\fB\%archive_set_error\fP()
to register an error code and message and
return
-\fBARCHIVE_FATAL.\fP
+\fBARCHIVE_FATAL\fP.
.PP
Note that if the client-provided write callback function
returns a non-zero value, that error will be propagated back to the caller
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write\fP(3),
\fBarchive_write_blocksize\fP(3),
\fBarchive_write_filter\fP(3),
\fBarchive_write_format\fP(3),
\fBarchive_write_new\fP(3),
\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBmtree\fP(5),
\fBtar\fP(5)
-.TH ARCHIVE_WRITE_OPTIONS 3 "February 2, 2012" ""
+.TH ARCHIVE_WRITE_OPTIONS 3 "December 3, 2019" ""
.SH NAME
.ad l
\fB\%archive_write_set_filter_option\fP,
.TP
\fB\%archive_write_set_filter_option\fP(),
\fB\%archive_write_set_format_option\fP()
-Specifies an option that will be passed to currently-registered
+Specifies an option that will be passed to the currently-registered
filters (including decompression filters) or format readers.
.PP
If
\fBARCHIVE_FATAL\fP
will be returned
immediately.
-Otherwise, greater of the two values will be returned.
+Otherwise, the greater of the two values will be returned.
.TP
\fB\%archive_write_set_options\fP()
\fIoptions\fP
.TP
\fBabstract-file\fP=\fIfilename\fP
The file with the specified name will be identified in the ISO9660 metadata
-as holding the abstract for this volume. Default: none.
+as holding the abstract for this volume.
+Default: none.
.TP
\fBapplication-id\fP=\fIfilename\fP
The file with the specified name will be identified in the ISO9660 metadata
-as holding the application identifier for this volume. Default: none.
+as holding the application identifier for this volume.
+Default: none.
.TP
\fBbiblio-file\fP=\fIfilename\fP
The file with the specified name will be identified in the ISO9660 metadata
-as holding the bibliography for this volume. Default: none.
+as holding the bibliography for this volume.
+Default: none.
.TP
\fBcopyright-file\fP=\fIfilename\fP
The file with the specified name will be identified in the ISO9660 metadata
-as holding the copyright for this volume. Default: none.
+as holding the copyright for this volume.
+Default: none.
.TP
\fBpublisher\fP=\fIfilename\fP
The file with the specified name will be identified in the ISO9660 metadata
-as holding the publisher information for this volume. Default: none.
+as holding the publisher information for this volume.
+Default: none.
.TP
\fBvolume-id\fP=\fIstring\fP
The specified string will be used as the Volume Identifier in the ISO9660 metadata.
-It is limited to 32 bytes. Default: none.
+It is limited to 32 bytes.
+Default: none.
.RE
.TP
Format iso9660 - boot support
the default is
\fBfd\fP,
otherwise the default is
-\fBno-emulation.\fP
+\fBno-emulation\fP.
.RE
.TP
Format iso9660 - filename and size extensions
.TP
\fBallow-period\fP
If enabled, allows filenames to contain trailing period characters, in violation of the ISO9660 specification.
-If disabled,trailing periods will be converted to underscore characters.
+If disabled, trailing periods will be converted to underscore characters.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.TP
on many files.
.RE
.TP
+Format pax
+.RS 5
+.TP
+\fBhdrcharset\fP
+This sets the character set used for filenames, uname and gname.
+The value is one of
+``BINARY''
+or
+``UTF-8''.
+With
+``BINARY''
+there is no character conversion, with
+``UTF-8''
+names are converted to UTF-8.
+.TP
+\fBxattrheader\fP
+When storing extended attributes, this option configures which
+headers should be written. The value is one of
+``all'',
+``LIBARCHIVE'',
+or
+``SCHILY''.
+By default, both
+``LIBARCHIVE.xattr''
+and
+``SCHILY.xattr''
+headers are written.
+.RE
+.TP
+Format 7zip
+.RS 5
+.TP
+\fBcompression\fP
+The value is one of
+``store'',
+``deflate'',
+``bzip2'',
+``lzma1'',
+``lzma2''
+or
+``ppmd''
+to indicate how the following entries should be compressed.
+Note that this setting is ignored for directories, symbolic links,
+and other special entries.
+.TP
+\fBcompression-level\fP
+The value is interpreted as a decimal integer specifying the
+compression level.
+Values between 0 and 9 are supported.
+The interpretation of the compression level depends on the chosen
+compression method.
+.RE
+.TP
Format zip
.RS 5
.TP
Note that this setting is ignored for directories, symbolic links,
and other special entries.
.TP
+\fBcompression-level\fP
+The value is interpreted as a decimal integer specifying the
+compression level.
+Values between 0 and 9 are supported.
+A compression level of 0 switches the compression method to
+``store'',
+other values will enable
+``deflate''
+compression with the given level.
+.TP
\fBexperimental\fP
This boolean option enables or disables experimental Zip features
that may not be compatible with other Zip implementations.
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_read_set_options\fP(3),
-\fBarchive_write\fP(3)
+\fBarchive_write\fP(3),
+\fBlibarchive\fP(3)
.SH HISTORY
.ad l
The
.RS 5
.TP
\fB\%archive_write_set_passphrase\fP()
-Set a passphrase for writing an encryption archive.
+Set a passphrase for writing an encrypted archive.
If
\fIpassphrase\fP
is
will be returned.
Otherwise,
\fBARCHIVE_OK\fP
-will be returned.
+will be returned.
.TP
\fB\%archive_write_set_passphrase_callback\fP()
-Register callback function that will be invoked to get a passphrase
-for encrption if the passphrase was not set by the
+Register a callback function that will be invoked to get a passphrase
+for encryption if the passphrase was not set by the
\fB\%archive_write_set_passphrase\fP()
function.
.RE
.SH SEE ALSO
.ad l
\fBtar\fP(1),
-\fBlibarchive\fP(3),
\fBarchive_write\fP(3),
-\fBarchive_write_set_options\fP(3)
+\fBarchive_write_set_options\fP(3),
+\fBlibarchive\fP(3)
Read a list of filenames from standard input and copy the files to the
specified directory.
.RE
-.PP
.SH OPTIONS
.ad l
Unless specifically stated otherwise, options are applicable in
.SH SEE ALSO
.ad l
\fBbzip2\fP(1),
-\fBtar\fP(1),
\fBgzip\fP(1),
\fBmt\fP(1),
\fBpax\fP(1),
+\fBtar\fP(1),
\fBlibarchive\fP(3),
\fBcpio\fP(5),
\fBlibarchive-formats\fP(5),
.TP
\fB\-Fl\fP acls
(c, r, u, x modes only)
-Archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of
+Archive or extract POSIX.1e or NFSv4 ACLs.
+This is the reverse of
\fB\-Fl\fP no-acls
and the default behavior in c, r, and u modes (except on Mac OS X) or if
\fB\%tar\fP
-is run in x mode as root. On Mac OS X this option translates extended ACLs
-to NFSv4 ACLs. To store extended ACLs the
+is run in x mode as root.
+On Mac OS X this option translates extended ACLs to NFSv4 ACLs.
+To store extended ACLs the
\fB\-Fl\fP mac-metadata
option is preferred.
.TP
.TP
\fB\-Fl\fP mac-metadata
(c, r, u and x mode only)
-Mac OS X specific. Archive or extract extended ACLs and extended file
+Mac OS X specific.
+Archive or extract extended ACLs and extended file
attributes using
\fBcopyfile\fP(3)
-in AppleDouble format. This is the reverse of
+in AppleDouble format.
+This is the reverse of
\fB\-Fl\fP no-mac-metadata.
and the default behavior in c, r, and u modes or if
\fB\%tar\fP
.TP
\fB\-Fl\fP no-acls
(c, r, u, x modes only)
-Do not archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of
+Do not archive or extract POSIX.1e or NFSv4 ACLs.
+This is the reverse of
\fB\-Fl\fP acls
and the default behavior if
\fB\%tar\fP
.TP
\fB\-Fl\fP no-fflags
(c, r, u, x modes only)
-Do not archive or extract file attributes or file flags. This is the reverse of
+Do not archive or extract file attributes or file flags.
+This is the reverse of
\fB\-Fl\fP fflags
and the default behavior if
\fB\%tar\fP
.TP
\fB\-Fl\fP no-mac-metadata
(x mode only)
-Mac OS X specific. Do not archive or extract ACLs and extended file attributes
+Mac OS X specific.
+Do not archive or extract ACLs and extended file attributes
using
\fBcopyfile\fP(3)
-in AppleDouble format. This is the reverse of
+in AppleDouble format.
+This is the reverse of
\fB\-Fl\fP mac-metadata.
and the default behavior if
\fB\%tar\fP
.TP
\fB\-Fl\fP no-xattrs
(c, r, u, x modes only)
-Do not archive or extract extended file attributes. This is the reverse of
+Do not archive or extract extended file attributes.
+This is the reverse of
\fB\-Fl\fP xattrs
and the default behavior if
\fB\%tar\fP
A decimal integer from 1 to 9 specifying the gzip compression level.
.TP
\fBgzip:timestamp\fP
-Store timestamp. This is enabled by default, use
+Store timestamp.
+This is enabled by default, use
\fB!timestamp\fP
or
\fBgzip:!timestamp\fP
A decimal integer from 1 to 9 specifying the lzop compression level.
.TP
\fBlz4:stream-checksum\fP
-Enable stream checksum. This is by default, use
+Enable stream checksum.
+This is by default, use
\fBlz4:!stream-checksum\fP
to disable.
.TP
.TP
\fBread_concatenated_archives\fP
Ignore zeroed blocks in the archive, which occurs when multiple tar archives
-have been concatenated together. Without this option, only the contents of
-the first concatenated archive would be read. This option is comparable to
-the
+have been concatenated together.
+Without this option, only the contents of
+the first concatenated archive would be read.
+This option is comparable to the
\fB\-i\fP, \fB\-Fl\fP ignore-zeros
option of GNU tar.
.RE
Preserve file permissions.
Attempt to restore the full permissions, including file modes, file attributes
or file flags, extended file attributes and ACLs, if available, for each item
-extracted from the archive. This is the reverse of
+extracted from the archive.
+This is the reverse of
\fB\-Fl\fP no-same-permissions
and the default if
\fB\%tar\fP
-is being run as root. It can be partially overridden by also specifying
+is being run as root.
+It can be partially overridden by also specifying
\fB\-Fl\fP no-acls,
\fB\-Fl\fP no-fflags,
\fB\-Fl\fP no-mac-metadata
.TP
\fB\-Fl\fP xattrs
(c, r, u, x modes only)
-Archive or extract extended file attributes. This is the reverse of
+Archive or extract extended file attributes.
+This is the reverse of
\fB\-Fl\fP no-xattrs
and the default behavior in c, r, and u modes or if
\fB\%tar\fP
\fB\%tar\fP
as
.RS 4
-\fB\%tar\fP \fB\-cf\fP \fI-\fP \fB\-C\fP \fIsrcdir\\fP. | \fB\%tar\fP \fB\-xpf\fP \fI-\fP \fB\-C\fP \fIdestdir\fP
+\fB\%tar\fP \fB\-cf\fP \fI-\fP \fB\-C\fP \fIsrcdir\fP \&. | \fB\%tar\fP \fB\-xpf\fP \fI-\fP \fB\-C\fP \fIdestdir\fP
.RE
or more traditionally
.RS 4
-cd srcdir \&; \fB\%tar\fP \fB\-cf\fP \fI-\\fP. | (cd destdir \&; \fB\%tar\fP \fB\-xpf\fP \fI-\fP)
+cd srcdir \&; \fB\%tar\fP \fB\-cf\fP \fI-\fP \&. | (cd destdir \&; \fB\%tar\fP \fB\-xpf\fP \fI-\fP)
.RE
.PP
In create mode, the list of files and directories to be archived
\fBmtree\fP(5)
format can be used to create an output archive with arbitrary ownership,
permissions, or names that differ from existing data on disk:
-.PP
.RS 4
.nf
$ cat input.mtree
This page describes user-visible changes in libarchive3, and lists
public functions and other symbols changed, deprecated or removed
in libarchive3, along with their replacements if any.
-.PP
.SS Multiple Filters
Libarchive2 permitted a single (input or output) filter active
on an archive.
.RE
.SH SEE ALSO
.ad l
-\fBlibarchive\fP(3),
\fBarchive_read\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_format\fP(3),
\fBarchive_read_set_options\fP(3),
+\fBarchive_util\fP(3),
\fBarchive_write\fP(3),
\fBarchive_write_filter\fP(3),
\fBarchive_write_format\fP(3),
\fBarchive_write_set_options\fP(3),
-\fBarchive_util\fP(3)
+\fBlibarchive\fP(3)
\fBarchive_entry\fP(3),
\fBarchive_read\fP(3),
\fBarchive_write\fP(3),
-\fBarchive_write_disk\fP(3)
-\fBlibarchive\fP(3),
+\fBarchive_write_disk\fP(3),
+\fBlibarchive\fP(3)
.SH HISTORY
.ad l
The
.B char
file types.
The value must be one of the following forms:
-.PP
.RS 5
.TP
\fIformat\fP, \fImajor\fP, \fIminor\fP Bo, \fIsubunit\fP Bc
.B solaris ,
.B sunos ,
.B svr3 ,
-.B svr4 ,
-and
+.B svr4 ,
+and
.B ultrix .
.PP
See
\fBuname\fP
The file owner as a symbolic name.
.RE
-.PP
.SH SEE ALSO
.ad l
\fBcksum\fP(1),
\fBfind\fP(1),
\fBmtree\fP(8)
-.SH BUGS
-.ad l
.SH HISTORY
.ad l
The
\fB\%star\fP
implementation.
.TP
-\fBSCHILY.acl.access\fP, \fBSCHILY.acl.default,\fP \fBSCHILY.acl.ace\fP
+\fBSCHILY.acl.access\fP, \fBSCHILY.acl.default\fP, \fBSCHILY.acl.ace\fP
Stores the access, default and NFSv4 ACLs as textual strings in a format
that is an extension of the format specified by POSIX.1e draft 17.
In particular, each user or group access specification can include
The full size of the file on disk.
XXX explain? XXX
.TP
-\fBSCHILY.dev,\fP \fBSCHILY.ino\fP, \fBSCHILY.nlinks\fP
+\fBSCHILY.dev\fP, \fBSCHILY.ino\fP, \fBSCHILY.nlinks\fP
The device number, inode number, and link count for the entry.
In particular, note that a pax interchange format archive using Joerg
Schilling's
attribute, which refers to the time when the file
metadata was last changed.)
.TP
-\fBLIBARCHIVE.xattr.\fP \fInamespace\fP.\fIkey\fP
+\fBLIBARCHIVE.xattr\fP. \fInamespace\fP. \fIkey\fP
Libarchive stores POSIX.1e-style extended attributes using
keys of this form.
The
GNU tar multivolume marker, indicating the file is a continuation of a file from the previous volume.
.TP
\fBN\fP
-GNU tar long filename support. Deprecated.
+GNU tar long filename support.
+Deprecated.
.TP
\fBS\fP
GNU tar sparse regular file.
NAME
archive_entry_clear, archive_entry_clone, archive_entry_free,
- archive_entry_new, — functions for managing archive entry descriptions
+ archive_entry_new — functions for managing archive entry descriptions
LIBRARY
Streaming Archive Library (libarchive, -larchive)
SEE ALSO
archive_entry_acl(3), archive_entry_paths(3), archive_entry_perms(3),
- archive_entry_time(3) libarchive(3),
+ archive_entry_time(3), libarchive(3)
HISTORY
The libarchive library first appeared in FreeBSD 5.3.
archive_entry_acl_add_entry, archive_entry_acl_add_entry_w,
archive_entry_acl_clear, archive_entry_acl_count,
archive_entry_acl_from_text, archive_entry_acl_from_text_w,
- archive_entry_acl_next, archive_entry_acl_next_w,
- archive_entry_acl_reset, archive_entry_acl_to_text,
- archive_entry_acl_to_text_w, archive_entry_acl_types — functions for ma‐
- nipulating Access Control Lists in archive entry descriptions
+ archive_entry_acl_next, archive_entry_acl_reset,
+ archive_entry_acl_to_text, archive_entry_acl_to_text_w,
+ archive_entry_acl_types — functions for manipulating Access Control Lists
+ in archive entry descriptions
LIBRARY
Streaming Archive Library (libarchive, -larchive)
const char **ret_name);
int
- archive_entry_acl_next_w(struct archive_entry *a, int type,
- int *ret_type, int *ret_permset, int *ret_tag, int *ret_qual,
- const wchar_t **ret_name);
-
- int
archive_entry_acl_reset(struct archive_entry *a, int type);
char *
archive_entry_acl_types(struct archive_entry *a);
DESCRIPTION
- The “Access Control Lists (ACLs)” extend the standard Unix perssion
+ The “Access Control Lists (ACLs)” extend the standard Unix permission
model. The ACL interface of libarchive supports both POSIX.1e and NFSv4
- style ACLs. Use of ACLs is restricted by various levels of ACL support in
- operating systems, file systems and archive formats.
+ style ACLs. Use of ACLs is restricted by various levels of ACL support
+ in operating systems, file systems and archive formats.
POSIX.1e Access Control Lists
A POSIX.1e ACL consists of a number of independent entries. Each entry
- specifies the permission set as bitmask of basic permissions. Valid per‐
- missions in the permset are:
+ specifies the permission set as a bitmask of basic permissions. Valid
+ permissions in the permset are:
ARCHIVE_ENTRY_ACL_READ (r)
ARCHIVE_ENTRY_ACL_WRITE (w)
ARCHIVE_ENTRY_ACL_EXECUTE (x)
values are:
ARCHIVE_ENTRY_ACL_USER The user specified by the name field.
ARCHIVE_ENTRY_ACL_USER_OBJ The owner of the file.
- ARCHIVE_ENTRY_ACL_GROUP The group specied by the name field.
- ARCHIVE_ENTRY_ACL_GROUP_OBJ The group who owns the file.
+ ARCHIVE_ENTRY_ACL_GROUP The group specified by the name field.
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ The group which owns the file.
ARCHIVE_ENTRY_ACL_MASK The maximum permissions to be obtained
via group permissions.
- ARCHIVE_ENTRY_ACL_OTHER Any principal who is not file owner or
- a member of the owning group.
+ ARCHIVE_ENTRY_ACL_OTHER Any principal who is not the file
+ owner or a member of the owning group.
The principals ARCHIVE_ENTRY_ACL_USER_OBJ, ARCHIVE_ENTRY_ACL_GROUP_OBJ
and ARCHIVE_ENTRY_ACL_OTHER are equivalent to user, group and other in
the classic Unix permission model and specify non-extended ACL entries.
- All files with have an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS). This
- specifies the permissions required for access to the file itself. Direc‐
- tories have an additional ACL (ARCHIVE_ENTRY_ACL_TYPE_DEFAULT), which
- controls the initial access ACL for newly created directory entries.
+ All files have an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS). This spec‐
+ ifies the permissions required for access to the file itself. Directo‐
+ ries have an additional ACL (ARCHIVE_ENTRY_ACL_TYPE_DEFAULT), which con‐
+ trols the initial access ACL for newly-created directory entries.
NFSv4 Access Control Lists
A NFSv4 ACL consists of multiple individual entries called Access Control
values are:
ARCHIVE_ENTRY_ACL_USER The user specified by the name field.
ARCHIVE_ENTRY_ACL_USER_OBJ The owner of the file.
- ARCHIVE_ENTRY_ACL_GROUP The group specied by the name field.
- ARCHIVE_ENTRY_ACL_GROUP_OBJ The group who owns the file.
- ARCHIVE_ENTRY_ACL_EVERYONE Any principal who is not file owner or
- a member of the owning group.
+ ARCHIVE_ENTRY_ACL_GROUP The group specified by the name field.
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ The group which owns the file.
+ ARCHIVE_ENTRY_ACL_EVERYONE Any principal who is not the file
+ owner or a member of the owning group.
Entries with the ARCHIVE_ENTRY_ACL_USER or ARCHIVE_ENTRY_ACL_GROUP tag
store the user and group name in the name string and optionally the user
NFSv4 ACE permissions and flags are stored in the same permset bitfield.
Some permissions share the same constant and permission character but
- have different effect on directories than on files. The following ACE
+ have different effect on directories than on files. The following ACE
permissions are supported:
ARCHIVE_ENTRY_ACL_READ_DATA (r)
Read data (file).
Only inherit, do not apply the permission on the directory
itself.
ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT (n)
- Do not propagate inherit flags. Only first-level entries
+ Do not propagate inherit flags. Only first-level entries
inherit ACLs.
ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS (S)
Trigger alarm or audit on successful access.
Functions
archive_entry_acl_add_entry() and archive_entry_acl_add_entry_w() add a
single ACL entry. For the access ACL and non-extended principals, the
- classic Unix permissions are updated. An archive entry cannot contain
+ classic Unix permissions are updated. An archive entry cannot contain
both POSIX.1e and NFSv4 ACL entries.
archive_entry_acl_clear() removes all ACL entries and resets the enumera‐
ARCHIVE_ENTRY_ACL_TYPE_DENY
ARCHIVE_ENTRY_ACL_TYPE_AUDIT
ARCHIVE_ENTRY_ACL_TYPE_ALARM
- for NFSv4 ACLs. For POSIX.1e ACLs if ARCHIVE_ENTRY_ACL_TYPE_ACCESS is in‐
- cluded and at least one extended ACL entry is found, the three non-ex‐
+ for NFSv4 ACLs. For POSIX.1e ACLs if ARCHIVE_ENTRY_ACL_TYPE_ACCESS is
+ included and at least one extended ACL entry is found, the three non-ex‐
tended ACLs are added.
archive_entry_acl_from_text() and archive_entry_acl_from_text_w() add new
- (or merge with existing) ACL entries from (wide) text. The argument type
+ (or merge with existing) ACL entries from (wide) text. The argument type
may take one of the following values:
ARCHIVE_ENTRY_ACL_TYPE_ACCESS
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
ARCHIVE_ENTRY_ACL_TYPE_NFS4
Supports all formats that can be created with archive_entry_acl_to_text()
- or respective archive_entry_acl_to_text_w(). Existing ACL entries are
- preserved. To get a clean new ACL from text archive_entry_acl_clear()
- must be called first. Entries prefixed with “default:” are treated as
+ or respectively archive_entry_acl_to_text_w(). Existing ACL entries are
+ preserved. To get a clean new ACL from text archive_entry_acl_clear()
+ must be called first. Entries prefixed with “default:” are treated as
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT unless type is
ARCHIVE_ENTRY_ACL_TYPE_NFS4. Invalid entries, non-parseable ACL entries
and entries beginning with the ‘#’ character (comments) are skipped.
- archive_entry_acl_next() and archive_entry_acl_next_w() return the next
- entry of the ACL list. This functions may only be called after
- archive_entry_acl_reset() has indicated the presence of extended ACL en‐
- tries.
+ archive_entry_acl_next() return the next entry of the ACL list. This
+ functions may only be called after archive_entry_acl_reset() has indi‐
+ cated the presence of extended ACL entries.
archive_entry_acl_reset() prepare reading the list of ACL entries with
- archive_entry_acl_next() or archive_entry_acl_next_w(). The function re‐
- turns either 0, if no non-extended ACLs are found. In this case, the ac‐
- cess permissions should be obtained by archive_entry_mode(3) or set using
- chmod(2). Otherwise, the function returns the same value as
- archive_entry_acl_count().
+ archive_entry_acl_next(). The function returns 0 if no non-extended ACLs
+ are found. In this case, the access permissions should be obtained by
+ archive_entry_mode(3) or set using chmod(2). Otherwise, the function re‐
+ turns the same value as archive_entry_acl_count().
archive_entry_acl_to_text() and archive_entry_acl_to_text_w() convert the
ACL entries for the given type into a (wide) string of ACL entries sepa‐
- rated by newline. If the pointer len_p is not NULL, then the function
+ rated by newline. If the pointer len_p is not NULL, then the function
shall return the length of the string (not including the NULL terminator)
in the location pointed to by len_p. The flag argument is a bitwise-or.
are prefixed with “default:”.
archive_entry_acl_types() get ACL entry types contained in an archive en‐
- try's ACL. As POSIX.1e and NFSv4 ACL entries cannot be mixed, this func‐
+ try's ACL. As POSIX.1e and NFSv4 ACL entries cannot be mixed, this func‐
tion is a very efficient way to detect if an ACL already contains
POSIX.1e or NFSv4 ACL entries.
ARCHIVE_OK if all entries were successfully parsed and ARCHIVE_WARN if
one or more entries were invalid or non-parseable.
- archive_entry_acl_next() and archive_entry_acl_next_w() return ARCHIVE_OK
- on success, ARCHIVE_EOF if no more ACL entries exist and ARCHIVE_WARN if
- archive_entry_acl_reset() has not been called first.
+ archive_entry_acl_next() returns ARCHIVE_OK on success, ARCHIVE_EOF if no
+ more ACL entries exist and ARCHIVE_WARN if archive_entry_acl_reset() has
+ not been called first.
archive_entry_acl_to_text() returns a string representing the ACL entries
matching the given type and flags on success or NULL on error.
NAME
archive_entry_symlink_type, archive_entry_set_symlink_type — miscella‐
- neous functions for manipulating properties of archive_entry.
+ neous functions for manipulating properties of archive_entry
LIBRARY
Streaming Archive Library (libarchive, -larchive)
DESCRIPTION
The function archive_entry_symlink_type() returns and the function
archive_entry_set_symlink_type() sets the type of the symbolic link
- stored in an archive entry. These functions have special meaning on oper‐
- ating systems that support multiple symbolic link types (e.g. Microsoft
+ stored in an archive entry. These functions have special meaning on op‐
+ erating systems that support multiple symbolic link types (e.g. Microsoft
Windows).
Supported values are:
wchar_t * Wide character strings in the current locale. The accessor
functions are named XXX_w().
- UTF-8 Unicode strings encoded as UTF-8. This are convience func‐
+ UTF-8 Unicode strings encoded as UTF-8. These are convenience func‐
tions to update both the multibyte and wide character strings
at the same time.
chive directly.
For that reason, it is only available as multibyte string. The link path
- is a convience function for conditionally setting hardlink or symlink
+ is a convenience function for conditionally setting hardlink or symlink
destination. It doesn't have a corresponding get accessor function.
archive_entry_set_XXX() is an alias for archive_entry_copy_XXX().
SEE ALSO
- archive_entry(3) libarchive(3),
+ archive_entry(3), libarchive(3)
BSD February 2, 2012 BSD
permission from the given entry. The corresponding functions
archive_entry_set_uid(), archive_entry_set_gid(), and
archive_entry_set_perm() store the given user id, group id and permission
- in the entry. The permission is also set as side effect of calling
+ in the entry. The permission is also set as a side effect of calling
archive_entry_set_mode().
archive_entry_strmode() returns a string representation of the permission
wchar_t * Wide character strings in the current locale. The accessor
functions are named XXX_w().
- UTF-8 Unicode strings encoded as UTF-8. This are convience func‐
+ UTF-8 Unicode strings encoded as UTF-8. These are convenience func‐
tions to update both the multibyte and wide character strings
at the same time.
The canonical text format is a comma-separated list of flag names. The
archive_entry_copy_fflags_text() and archive_entry_copy_fflags_text_w()
- functions parse the provided text and sets the internal bitmap values.
+ functions parse the provided text and set the internal bitmap values.
This is a platform-specific operation; names that are not meaningful on
the current platform will be ignored. The function returns a pointer to
the start of the first name that was not recognized, or NULL if every
SEE ALSO
archive_entry(3), archive_entry_acl(3), archive_read_disk(3),
- archive_write_disk(3) libarchive(3),
+ archive_write_disk(3), libarchive(3)
BUGS
The platform types uid_t and gid_t are often 16 or 32 bit wide. In this
archive_entry_ino_is_set, archive_entry_ino64, archive_entry_set_ino64,
archive_entry_nlink, archive_entry_rdev, archive_entry_set_rdev,
archive_entry_rdevmajor, archive_entry_set_rdevmajor,
- archive_entry_rdevminor, archive_entry_set_rdevminor, — accessor func‐
- tions for manipulating archive entry descriptions
+ archive_entry_rdevminor, archive_entry_set_rdevminor — accessor functions
+ for manipulating archive entry descriptions
LIBRARY
Streaming Archive Library (libarchive, -larchive)
split form.
SEE ALSO
- archive_entry_acl(3), archive_entry_perms(3), archive_entry_time(3),
- libarchive(3), stat(2)
+ stat(2), archive_entry_acl(3), archive_entry_perms(3),
+ archive_entry_time(3), libarchive(3)
BSD February 2, 2012 BSD
archive_entry_ctime_is_set, archive_entry_set_ctime,
archive_entry_unset_ctime, archive_entry_mtime, archive_entry_mtime_nsec,
archive_entry_mtime_is_set, archive_entry_set_mtime,
- archive_entry_unset_mtime, — functions for manipulating times in archive
+ archive_entry_unset_mtime — functions for manipulating times in archive
entry descriptions
LIBRARY
ond field of 0.
SEE ALSO
- archive_entry(3) libarchive(3),
+ archive_entry(3), libarchive(3)
HISTORY
The libarchive library first appeared in FreeBSD 5.3.
archive_read_close() to close the archive, then call archive_read_free()
to release all resources, including all memory allocated by the library.
-EXAMPLE
+EXAMPLES
The following illustrates basic usage of the library. In this example,
the callback functions are simply wrappers around the standard open(2),
read(2), and close(2) system calls.
}
SEE ALSO
- tar(1), libarchive(3), archive_read_new(3), archive_read_data(3),
- archive_read_extract(3), archive_read_filter(3), archive_read_format(3),
- archive_read_header(3), archive_read_open(3),
- archive_read_set_options(3), archive_util(3), tar(5)
+ tar(1), archive_read_data(3), archive_read_extract(3),
+ archive_read_filter(3), archive_read_format(3), archive_read_header(3),
+ archive_read_new(3), archive_read_open(3), archive_read_set_options(3),
+ archive_util(3), libarchive(3), tar(5)
HISTORY
The libarchive library first appeared in FreeBSD 5.3.
returned.
archive_read_set_passphrase_callback()
- Register callback function that will be invoked to get a
- passphrase for decrption after trying all passphrases registered
- by the archive_read_add_passphrase() function failed.
+ Register a callback function that will be invoked to get a
+ passphrase for decryption after trying all the passphrases regis‐
+ tered by the archive_read_add_passphrase() function failed.
SEE ALSO
- tar(1), libarchive(3), archive_read(3), archive_read_set_options(3)
+ tar(1), archive_read(3), archive_read_set_options(3), libarchive(3)
BSD September 14, 2014 BSD
ARCHIVE_READ_DATA(3) BSD Library Functions Manual ARCHIVE_READ_DATA(3)
NAME
- archive_read_data archive_read_data_block, archive_read_data_skip,
+ archive_read_data, archive_read_data_block, archive_read_data_skip,
archive_read_data_into_fd — functions for reading streaming archives
LIBRARY
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_read(3), archive_read_extract(3),
- archive_read_filter(3), archive_read_format(3), archive_read_header(3),
- archive_read_open(3), archive_read_set_options(3), archive_util(3),
- tar(5)
+ tar(1), archive_read(3), archive_read_extract(3), archive_read_filter(3),
+ archive_read_format(3), archive_read_header(3), archive_read_open(3),
+ archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
BSD February 2, 2012 BSD
the following values:
ARCHIVE_READDISK_HONOR_NODUMP
Skip files and directories with the nodump file attribute
- (file flag) set. By default, the nodump file atrribute
+ (file flag) set. By default, the nodump file attribute
is ignored.
ARCHIVE_READDISK_MAC_COPYFILE
- Mac OS X specific. Read metadata (ACLs and extended at‐
+ Mac OS X specific. Read metadata (ACLs and extended at‐
tributes) with copyfile(3). By default, metadata is read
using copyfile(3).
ARCHIVE_READDISK_NO_ACL
(Linux) or chflags(1) (FreeBSD, Mac OS X) for more infor‐
mation on file attributes.
ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS
- Do not traverse mount points. By defaut, moint points
+ Do not traverse mount points. By default, mount points
are traversed.
ARCHIVE_READDISK_NO_XATTR
Do not read extended file attributes (xattrs). By de‐
tory traversal libraries often provide this information.)
Where necessary, user and group ids are converted to user and
- group names using the currently registered lookup functions
+ group names using the currently-registered lookup functions
above. This affects the file ownership fields and ACL values in
the struct archive_entry object.
More information about the struct archive object and the overall design
of the library can be found in the libarchive(3) overview.
-EXAMPLE
+EXAMPLES
The following illustrates basic usage of the library by showing how to
use it to copy an item on disk into an archive.
archive_errno() and archive_error_string() functions.
SEE ALSO
- archive_read(3), archive_util(3), archive_write(3),
- archive_write_disk(3), tar(1), libarchive(3)
+ tar(1), archive_read(3), archive_util(3), archive_write(3),
+ archive_write_disk(3), libarchive(3)
HISTORY
The libarchive library first appeared in FreeBSD 5.3. The
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_read(3), archive_read_data(3),
- archive_read_filter(3), archive_read_format(3), archive_read_open(3),
- archive_read_set_options(3), archive_util(3), tar(5)
+ tar(1), archive_read(3), archive_read_data(3), archive_read_filter(3),
+ archive_read_format(3), archive_read_open(3),
+ archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
BSD February 2, 2012 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- libarchive(3), archive_read(3), archive_read_data(3),
- archive_read_format(3), archive_read_format(3)
+ archive_read(3), archive_read_data(3), archive_read_format(3),
+ archive_read_format(3), libarchive(3)
BSD August 14, 2014 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_read_data(3), archive_read_filter(3),
- archive_read_set_options(3), archive_util(3), tar(5)
+ tar(1), archive_read_data(3), archive_read_filter(3),
+ archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
BUGS
Many traditional archiver programs treat empty files as valid empty ar‐
archive_errno() and archive_error_string() functions.
SEE ALSO
- libarchive(3), archive_read_new(3), archive_read_data(3),
- archive_read_filter(3), archive_read_format(3), archive_read_open(3),
- archive_read_set_options(3), archive_util(3)
+ archive_read_data(3), archive_read_filter(3), archive_read_format(3),
+ archive_read_new(3), archive_read_open(3), archive_read_set_options(3),
+ archive_util(3), libarchive(3)
BSD February 2, 2012 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_read(3), archive_read_data(3),
- archive_read_extract(3), archive_read_filter(3), archive_read_format(3),
- archive_read_open(3), archive_read_set_options(3), archive_util(3),
- tar(5)
+ tar(1), archive_read(3), archive_read_data(3), archive_read_extract(3),
+ archive_read_filter(3), archive_read_format(3), archive_read_open(3),
+ archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
BSD February 2, 2012 BSD
overview manual page for libarchive(3).
SEE ALSO
- tar(1), libarchive(3), archive_read_data(3), archive_read_filter(3),
+ tar(1), archive_read_data(3), archive_read_filter(3),
archive_read_format(3), archive_read_set_options(3), archive_util(3),
- tar(5)
+ libarchive(3), tar(5)
BSD February 2, 2012 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_read(3), archive_read_data(3),
- archive_read_filter(3), archive_read_format(3),
- archive_read_set_options(3), archive_util(3), tar(5)
+ tar(1), archive_read(3), archive_read_data(3), archive_read_filter(3),
+ archive_read_format(3), archive_read_set_options(3), archive_util(3),
+ libarchive(3), tar(5)
BSD February 2, 2012 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write_set_options(3), archive_read(3)
+ tar(1), archive_read(3), archive_write_set_options(3), libarchive(3)
BSD February 2, 2012 BSD
Clears any error information left over from a previous call. Not
generally used in client code.
archive_compression()
- Synonym for archive_filter_code(a,(0)).
+ Synonym for archive_filter_code(a, 0).
archive_compression_name()
- Synonym for archive_filter_name(a,(0)).
+ Synonym for archive_filter_name(a, 0).
archive_copy_error()
Copies error information from one archive to another.
archive_errno()
are three filters: filter 0 is the gunzip filter, filter 1 is the
uudecode filter, and filter 2 is the pseudo-filter that wraps the
archive read functions. In this case, requesting
- archive_position(a,(-1)) would be a synonym for
- archive_position(a,(2)) which would return the number of bytes
- currently read from the archive, while archive_position(a,(1))
+ archive_position(a, -1) would be a synonym for
+ archive_position(a, 2) which would return the number of bytes
+ currently read from the archive, while archive_position(a, 1)
would return the number of bytes after uudecoding, and
- archive_position(a,(0)) would return the number of bytes after
- decompression.
+ archive_position(a, 0) would return the number of bytes after de‐
+ compression.
archive_filter_name()
Returns a textual name identifying the indicated filter. See
archive_filter_count() for details of the numbering.
A textual description of the format of the current entry.
archive_position()
Returns the number of bytes read from or written to the indicated
- filter. In particular, archive_position(a,(0)) returns the num‐
- ber of bytes read or written by the format handler, while
- archive_position(a,(-1)) returns the number of bytes read or
- written to the archive. See archive_filter_count() for details
- of the numbering here.
+ filter. In particular, archive_position(a, 0) returns the number
+ of bytes read or written by the format handler, while
+ archive_position(a, -1) returns the number of bytes read or writ‐
+ ten to the archive. See archive_filter_count() for details of
+ the numbering here.
archive_set_error()
Sets the numeric error code and error description that will be
returned by archive_errno() and archive_error_string(). This
After all entries have been written, use the archive_write_free() func‐
tion to release all resources.
-EXAMPLE
+EXAMPLES
The following sketch illustrates basic usage of the library. In this ex‐
ample, the callback functions are simply wrappers around the standard
open(2), write(2), and close(2) system calls.
}
SEE ALSO
- tar(1), libarchive(3), archive_write_set_options(3), cpio(5), mtree(5),
+ tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
tar(5)
HISTORY
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write_set_options(3), cpio(5), mtree(5),
+ tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
tar(5)
BSD February 2, 2012 BSD
as success.
SEE ALSO
- tar(1), libarchive(3), archive_write_finish_entry(3),
- archive_write_set_options(3), cpio(5), mtree(5), tar(5)
+ tar(1), archive_write_finish_entry(3), archive_write_set_options(3),
+ libarchive(3), cpio(5), mtree(5), tar(5)
BSD February 28, 2017 BSD
(Linux) or chflags(1) (FreeBSD, Mac OS X) for more infor‐
mation on file attributes.
ARCHIVE_EXTRACT_MAC_METADATA
- Mac OS X specific. Restore metadata using copyfile(3).
+ Mac OS X specific. Restore metadata using copyfile(3).
By default, copyfile(3) metadata is ignored.
ARCHIVE_EXTRACT_NO_OVERWRITE
Existing files on disk will not be overwritten. By de‐
archive_errno() and archive_error_string() functions.
SEE ALSO
- archive_read(3), archive_write(3), tar(1), libarchive(3)
+ tar(1), archive_read(3), archive_write(3), libarchive(3)
HISTORY
The libarchive library first appeared in FreeBSD 5.3. The
archive_write_add_filter_lzip, archive_write_add_filter_lzma,
archive_write_add_filter_lzop, archive_write_add_filter_none,
archive_write_add_filter_program, archive_write_add_filter_uuencode,
- archive_write_add_filter_xz, archive_write_add_filter_zstd, — functions
+ archive_write_add_filter_xz, archive_write_add_filter_zstd — functions
enabling output filters
LIBRARY
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write(3), archive_write_format(3),
- archive_write_set_options(3), cpio(5), mtree(5), tar(5)
+ tar(1), archive_write(3), archive_write_format(3),
+ archive_write_set_options(3), libarchive(3), cpio(5), mtree(5), tar(5)
BSD August 14, 2014 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write_data(3),
- archive_write_set_options(3), cpio(5), mtree(5), tar(5)
+ tar(1), archive_write_data(3), archive_write_set_options(3),
+ libarchive(3), cpio(5), mtree(5), tar(5)
BSD February 28, 2017 BSD
archive_write_set_format_shar, archive_write_set_format_shar_dump,
archive_write_set_format_ustar, archive_write_set_format_v7tar,
archive_write_set_format_warc, archive_write_set_format_xar,
- archive_write_set_format_zip, — functions for creating archives
+ archive_write_set_format_zip — functions for creating archives
LIBRARY
Streaming Archive Library (libarchive, -larchive)
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write(3), archive_write_set_options(3),
+ tar(1), archive_write(3), archive_write_set_options(3), libarchive(3),
cpio(5), libarchive-formats(5), mtree(5), tar(5)
BSD February 14, 2013 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write_set_options(3), cpio(5), mtree(5),
+ tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
tar(5)
BSD February 2, 2012 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write_set_options(3), cpio(5), mtree(5),
+ tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
tar(5)
BSD February 2, 2012 BSD
overview manual page for libarchive(3).
SEE ALSO
- tar(1), libarchive(3), archive_write(3), archive_write_set_options(3),
+ tar(1), archive_write(3), archive_write_set_options(3), libarchive(3),
cpio(5), mtree(5), tar(5)
BSD February 2, 2012 BSD
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_write(3), archive_write_blocksize(3),
+ tar(1), archive_write(3), archive_write_blocksize(3),
archive_write_filter(3), archive_write_format(3), archive_write_new(3),
- archive_write_set_options(3), cpio(5), mtree(5), tar(5)
+ archive_write_set_options(3), libarchive(3), cpio(5), mtree(5), tar(5)
BSD February 2, 2012 BSD
cific write modules.
archive_write_set_filter_option(), archive_write_set_format_option()
- Specifies an option that will be passed to currently-registered
- filters (including decompression filters) or format readers.
+ Specifies an option that will be passed to the currently-regis‐
+ tered filters (including decompression filters) or format read‐
+ ers.
If option and value are both NULL, these functions will do noth‐
ing and ARCHIVE_OK will be returned. If option is NULL but value
Calls archive_write_set_format_option(), then
archive_write_set_filter_option(). If either function returns
ARCHIVE_FATAL, ARCHIVE_FATAL will be returned immediately. Oth‐
- erwise, greater of the two values will be returned.
+ erwise, the greater of the two values will be returned.
archive_write_set_options()
options is a comma-separated list of options. If options is NULL
allow-period
If enabled, allows filenames to contain trailing period
characters, in violation of the ISO9660 specification.
- If disabled,trailing periods will be converted to under‐
+ If disabled, trailing periods will be converted to under‐
score characters. This does not impact names stored in
the Rockridge or Joliet extension area. Default: dis‐
abled.
Specifies a filename that should not be compressed when
using zisofs=direct. This option can be provided multi‐
ple times to suppress compression on many files.
+ Format pax
+ hdrcharset
+ This sets the character set used for filenames, uname and
+ gname. The value is one of “BINARY” or “UTF-8”. With
+ “BINARY” there is no character conversion, with “UTF-8”
+ names are converted to UTF-8.
+ xattrheader
+ When storing extended attributes, this option configures
+ which headers should be written. The value is one of
+ “all”, “LIBARCHIVE”, or “SCHILY”. By default, both
+ “LIBARCHIVE.xattr” and “SCHILY.xattr” headers are writ‐
+ ten.
+ Format 7zip
+ compression
+ The value is one of “store”, “deflate”, “bzip2”, “lzma1”,
+ “lzma2” or “ppmd” to indicate how the following entries
+ should be compressed. Note that this setting is ignored
+ for directories, symbolic links, and other special en‐
+ tries.
+ compression-level
+ The value is interpreted as a decimal integer specifying
+ the compression level. Values between 0 and 9 are sup‐
+ ported. The interpretation of the compression level de‐
+ pends on the chosen compression method.
Format zip
compression
The value is either “store” or “deflate” to indicate how
the following entries should be compressed. Note that
this setting is ignored for directories, symbolic links,
and other special entries.
+ compression-level
+ The value is interpreted as a decimal integer specifying
+ the compression level. Values between 0 and 9 are sup‐
+ ported. A compression level of 0 switches the compres‐
+ sion method to “store”, other values will enable
+ “deflate” compression with the given level.
experimental
This boolean option enables or disables experimental Zip
features that may not be compatible with other Zip imple‐
archive_errno() and archive_error_string() functions.
SEE ALSO
- tar(1), libarchive(3), archive_read_set_options(3), archive_write(3)
+ tar(1), archive_read_set_options(3), archive_write(3), libarchive(3)
HISTORY
The libarchive library first appeared in FreeBSD 5.3.
Michihiro NAKAJIMA.
BUGS
-BSD February 2, 2012 BSD
+BSD December 3, 2019 BSD
DESCRIPTION
archive_write_set_passphrase()
- Set a passphrase for writing an encryption archive. If
- passphrase is NULL or empty, this function will do nothing and
+ Set a passphrase for writing an encrypted archive. If passphrase
+ is NULL or empty, this function will do nothing and
ARCHIVE_FAILED will be returned. Otherwise, ARCHIVE_OK will be
returned.
archive_write_set_passphrase_callback()
- Register callback function that will be invoked to get a
- passphrase for encrption if the passphrase was not set by the
+ Register a callback function that will be invoked to get a
+ passphrase for encryption if the passphrase was not set by the
archive_write_set_passphrase() function.
SEE ALSO
- tar(1), libarchive(3), archive_write(3), archive_write_set_options(3)
+ tar(1), archive_write(3), archive_write_set_options(3), libarchive(3)
BSD September 21, 2014 BSD
standard syntax.
SEE ALSO
- bzip2(1), tar(1), gzip(1), mt(1), pax(1), libarchive(3), cpio(5),
+ bzip2(1), gzip(1), mt(1), pax(1), tar(1), libarchive(3), cpio(5),
libarchive-formats(5), tar(5)
STANDARDS
restricted pax format and bzip2 compression.
--acls (c, r, u, x modes only) Archive or extract POSIX.1e or NFSv4
- ACLs. This is the reverse of --no-acls and the default behavior
+ ACLs. This is the reverse of --no-acls and the default behavior
in c, r, and u modes (except on Mac OS X) or if tar is run in x
- mode as root. On Mac OS X this option translates extended ACLs to
- NFSv4 ACLs. To store extended ACLs the --mac-metadata option is
- preferred.
+ mode as root. On Mac OS X this option translates extended ACLs
+ to NFSv4 ACLs. To store extended ACLs the --mac-metadata option
+ is preferred.
-B, --read-full-blocks
Ignored for compatibility with other tar(1) implementations.
modification time is set to the time stored in the archive.
--mac-metadata
- (c, r, u and x mode only) Mac OS X specific. Archive or extract
+ (c, r, u and x mode only) Mac OS X specific. Archive or extract
extended ACLs and extended file attributes using copyfile(3) in
- AppleDouble format. This is the reverse of --no-mac-metadata.
+ AppleDouble format. This is the reverse of --no-mac-metadata.
and the default behavior in c, r, and u modes or if tar is run in
x mode as root.
--no-acls
(c, r, u, x modes only) Do not archive or extract POSIX.1e or
- NFSv4 ACLs. This is the reverse of --acls and the default behav‐
+ NFSv4 ACLs. This is the reverse of --acls and the default behav‐
ior if tar is run as non-root in x mode (on Mac OS X as any user
in c, r, u and x modes).
--no-fflags
(c, r, u, x modes only) Do not archive or extract file attributes
- or file flags. This is the reverse of --fflags and the default
+ or file flags. This is the reverse of --fflags and the default
behavior if tar is run as non-root in x mode.
--no-mac-metadata
- (x mode only) Mac OS X specific. Do not archive or extract ACLs
+ (x mode only) Mac OS X specific. Do not archive or extract ACLs
and extended file attributes using copyfile(3) in AppleDouble
- format. This is the reverse of --mac-metadata. and the default
+ format. This is the reverse of --mac-metadata. and the default
behavior if tar is run as non-root in x mode.
--no-same-owner
--no-xattrs
(c, r, u, x modes only) Do not archive or extract extended file
- attributes. This is the reverse of --xattrs and the default be‐
+ attributes. This is the reverse of --xattrs and the default be‐
havior if tar is run as non-root in x mode.
--numeric-owner
A decimal integer from 1 to 9 specifying the gzip com‐
pression level.
gzip:timestamp
- Store timestamp. This is enabled by default, use
+ Store timestamp. This is enabled by default, use
!timestamp or gzip:!timestamp to disable.
lrzip:compression=type
Use type as compression method. Supported values are
A decimal integer from 1 to 9 specifying the lzop com‐
pression level.
lz4:stream-checksum
- Enable stream checksum. This is by default, use
+ Enable stream checksum. This is by default, use
lz4:!stream-checksum to disable.
lz4:block-checksum
Enable block checksum (Disabled by default).
(x mode only) Preserve file permissions. Attempt to restore the
full permissions, including file modes, file attributes or file
flags, extended file attributes and ACLs, if available, for each
- item extracted from the archive. This is the reverse of
+ item extracted from the archive. This is the reverse of
--no-same-permissions and the default if tar is being run as
- root. It can be partially overridden by also specifying
+ root. It can be partially overridden by also specifying
--no-acls, --no-fflags, --no-mac-metadata or --no-xattrs.
--passphrase passphrase
--xattrs
(c, r, u, x modes only) Archive or extract extended file at‐
- tributes. This is the reverse of --no-xattrs and the default be‐
+ tributes. This is the reverse of --no-xattrs and the default be‐
havior in c, r, and u modes or if tar is run in x mode as root.
-y (c mode only) Compress the resulting archive with bzip2(1). In
10240
SEE ALSO
- libarchive(3), archive_read(3), archive_read_filter(3),
- archive_read_format(3), archive_read_set_options(3), archive_write(3),
+ archive_read(3), archive_read_filter(3), archive_read_format(3),
+ archive_read_set_options(3), archive_util(3), archive_write(3),
archive_write_filter(3), archive_write_format(3),
- archive_write_set_options(3), archive_util(3)
+ archive_write_set_options(3), libarchive(3)
BSD December 23, 2011 BSD
SEE ALSO
archive_entry(3), archive_read(3), archive_write(3),
- archive_write_disk(3) libarchive(3),
+ archive_write_disk(3), libarchive(3)
HISTORY
The libarchive library first appeared in FreeBSD 5.3.
SEE ALSO
cksum(1), find(1), mtree(8)
-BUGS
HISTORY
The mtree utility appeared in 4.3BSD-Reno. The MD5 digest capability was
added in FreeBSD 2.1, in response to the widespread use of programs which
'''archive_entry_clear''',
'''archive_entry_clone''',
'''archive_entry_free''',
-'''archive_entry_new''',
+'''archive_entry_new'''
- functions for managing archive entry descriptions
== LIBRARY ==
Streaming Archive Library (libarchive, -larchive)
'''struct stat'''
plus associated pathname, textual group and user names, etc.
These objects are used by
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
to represent the metadata associated with a particular
entry in an archive.
=== Create and Destroy===
Due to high number of functions, the accessor functions can be found in
man pages grouped by the purpose.
<dl>
-<dt>[[ManPageArchiveEntryAcl3]]</dt><dd>
+<dt>[[ManPagerchiventrycl3]]</dt><dd>
Access Control List manipulation
-</dd><dt>[[ManPageArchiveEntryPaths3]]</dt><dd>
+</dd><dt>[[ManPagerchiventryaths3]]</dt><dd>
Path name manipulation
-</dd><dt>[[ManPageArchiveEntryPerms3]]</dt><dd>
+</dd><dt>[[ManPagerchiventryerms3]]</dt><dd>
User, group and mode manipulation
-</dd><dt>[[ManPageArchiveEntryStat3]]</dt><dd>
+</dd><dt>[[ManPagerchiventrytat3]]</dt><dd>
Functions not in the other groups and copying to/from
''struct'' stat.
-</dd><dt>[[ManPageArchiveEntryTime3]]</dt><dd>
+</dd><dt>[[ManPagerchiventryime3]]</dt><dd>
Time field manipulation
</dd></dl>
Similarly, if you store a wide string and then store a
narrow string for the same data, the previously-set wide string will
be discarded in favor of the new data.
-
== SEE ALSO ==
-[[ManPageArchiveEntryAcl3]],
-[[ManPageArchiveEntryPaths3]],
-[[ManPageArchiveEntryPerms3]],
-[[ManPageArchiveEntryTime3]]
-[[ManPageLibarchive3]],
+[[ManPagerchiventrycl3]],
+[[ManPagerchiventryaths3]],
+[[ManPagerchiventryerms3]],
+[[ManPagerchiventryime3]],
+[[ManPageibarchive3]]
== HISTORY ==
The
'''libarchive'''
'''archive_entry_acl_from_text''',
'''archive_entry_acl_from_text_w''',
'''archive_entry_acl_next''',
-'''archive_entry_acl_next_w''',
'''archive_entry_acl_reset''',
'''archive_entry_acl_to_text''',
'''archive_entry_acl_to_text_w''',
<br>
''int''
<br>
-'''archive_entry_acl_next_w'''(''struct archive_entry *a'', ''int type'', ''int *ret_type'', ''int *ret_permset'', ''int *ret_tag'', ''int *ret_qual'', ''const wchar_t **ret_name'');
-<br>
-''int''
-<br>
'''archive_entry_acl_reset'''(''struct archive_entry *a'', ''int type'');
<br>
''char *''
== DESCRIPTION ==
The
"Access Control Lists (ACLs)"
-extend the standard Unix perssion model.
+extend the standard Unix permission model.
The ACL interface of
'''libarchive'''
-supports both POSIX.1e and NFSv4 style ACLs. Use of ACLs is restricted by
+supports both POSIX.1e and NFSv4 style ACLs.
+Use of ACLs is restricted by
various levels of ACL support in operating systems, file systems and archive
formats.
=== POSIX.1e Access Control Lists===
A POSIX.1e ACL consists of a number of independent entries.
-Each entry specifies the permission set as bitmask of basic permissions.
+Each entry specifies the permission set as a bitmask of basic permissions.
Valid permissions in the
are:
<dl>
The owner of the file.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_GROUP
-The group specied by the name field.
+The group specified by the name field.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_GROUP_OBJ
-The group who owns the file.
+The group which owns the file.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_MASK
The maximum permissions to be obtained via group permissions.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_OTHER
-Any principal who is not file owner or a member of the owning group.
+Any principal who is not the file owner or a member of the owning group.
</dd>
The principals
are equivalent to user, group and other in the classic Unix permission
model and specify non-extended ACL entries.
-All files with have an access ACL
+All files have an access ACL
()
ARCHIVE_ENTRY_ACL_TYPE_ACCESS.
This specifies the permissions required for access to the file itself.
Directories have an additional ACL
()
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
-which controls the initial access ACL for newly created directory entries.
+which controls the initial access ACL for newly-created directory entries.
=== NFSv4 Access Control Lists===
A NFSv4 ACL consists of multiple individual entries called Access Control
Entries (ACEs).
The owner of the file.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_GROUP
-The group specied by the name field.
+The group specified by the name field.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_GROUP_OBJ
-The group who owns the file.
+The group which owns the file.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_EVERYONE
-Any principal who is not file owner or a member of the owning group.
+Any principal who is not the file owner or a member of the owning group.
</dd>
Entries with the
integer.
NFSv4 ACE permissions and flags are stored in the same
-bitfield. Some permissions share the same constant and permission character but
-have different effect on directories than on files. The following ACE
-permissions are supported:
+bitfield.
+Some permissions share the same constant and permission character
+but have different effect on directories than on files.
+The following ACE permissions are supported:
<dl>
<dt></dt><dd>
ARCHIVE_ENTRY_ACL_READ_DATA (.B r )
Only inherit, do not apply the permission on the directory itself.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT (.B n )
-Do not propagate inherit flags. Only first-level entries inherit ACLs.
+Do not propagate inherit flags.
+Only first-level entries inherit ACLs.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS (.B S )
Trigger alarm or audit on successful access.
'''archive_entry_acl_add_entry_w'''()
add a single ACL entry.
For the access ACL and non-extended principals, the classic Unix permissions
-are updated. An archive entry cannot contain both POSIX.1e and NFSv4 ACL
-entries.
+are updated.
+An archive entry cannot contain both POSIX.1e and NFSv4 ACL entries.
'''archive_entry_acl_clear'''()
removes all ACL entries and resets the enumeration pointer.
</dd><dt></dt><dd>
ARCHIVE_ENTRY_ACL_TYPE_ALARM
</dd></dl>
-for NFSv4 ACLs. For POSIX.1e ACLs if
+for NFSv4 ACLs.
+For POSIX.1e ACLs if
ARCHIVE_ENTRY_ACL_TYPE_ACCESS
is included and at least one extended ACL entry is found,
the three non-extended ACLs are added.
(or merge with existing)
ACL entries from
(wide)
-text. The argument
+text.
+The argument
may take one of the following values:
<dl>
<dt></dt><dd>
</dd></dl>
Supports all formats that can be created with
'''archive_entry_acl_to_text'''()
-or respective
+or respectively
'''archive_entry_acl_to_text_w'''().
-Existing ACL entries are preserved. To get a clean new ACL from text
+Existing ACL entries are preserved.
+To get a clean new ACL from text
'''archive_entry_acl_clear'''()
-must be called first. Entries prefixed with
+must be called first.
+Entries prefixed with
"default:"
are treated as
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
are skipped.
'''archive_entry_acl_next'''()
-and
-'''archive_entry_acl_next_w'''()
return the next entry of the ACL list.
This functions may only be called after
'''archive_entry_acl_reset'''()
'''archive_entry_acl_reset'''()
prepare reading the list of ACL entries with
-'''archive_entry_acl_next'''()
-or
-'''archive_entry_acl_next_w'''().
-The function returns either 0, if no non-extended ACLs are found.
+'''archive_entry_acl_next'''().
+The function returns 0 if no non-extended ACLs are found.
In this case, the access permissions should be obtained by
-[[ManPageArchiveEntryMode3]]
+[[ManPagerchiventryode3]]
or set using
[[chmod(2)|http://www.freebsd.org/cgi/man.cgi?query=chmod&sektion=2]].
Otherwise, the function returns the same value as
'''archive_entry_acl_to_text_w'''()
convert the ACL entries for the given type into a
(wide)
-string of ACL entries separated by newline. If the pointer
+string of ACL entries separated by newline.
+If the pointer
is not NULL, then the function shall return the length of the string
(not including the NULL terminator)
in the location pointed to by
"default:".
'''archive_entry_acl_types'''()
-get ACL entry types contained in an archive entry's ACL. As POSIX.1e and NFSv4
+get ACL entry types contained in an archive entry's ACL.
+As POSIX.1e and NFSv4
ACL entries cannot be mixed, this function is a very efficient way to detect if
an ACL already contains POSIX.1e or NFSv4 ACL entries.
== RETURN VALUES ==
if one or more entries were invalid or non-parseable.
'''archive_entry_acl_next'''()
-and
-'''archive_entry_acl_next_w'''()
-return
+returns
ARCHIVE_OK
on success,
ARCHIVE_EOF
'''archive_entry_acl_types'''()
returns a bitmask of ACL entry types or 0 if archive entry has no ACL entries.
== SEE ALSO ==
-[[ManPageArchiveEntry3]],
-[[ManPageLibarchive3]]
+[[ManPagerchiventry3]],
+[[ManPageibarchive3]]
'''archive_entry_linkresolver_set_strategy'''()
function selects the optimal hardlink strategy for the given format.
The format code can be obtained from
-[[ManPageArchiveFormat3]].
+[[ManPagerchiveormat3]].
The function can be called more than once, but it is recommended to
flush all deferred entries first.
[[malloc(3)|http://www.freebsd.org/cgi/man.cgi?query=malloc&sektion=3]]
failures.
== SEE ALSO ==
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
== NAME ==
'''archive_entry_symlink_type''',
'''archive_entry_set_symlink_type'''
-- miscellaneous functions for manipulating properties of archive_entry.
+- miscellaneous functions for manipulating properties of archive_entry
== LIBRARY ==
Streaming Archive Library (libarchive, -larchive)
== SYNOPSIS ==
'''archive_entry_symlink_type'''()
returns and the function
'''archive_entry_set_symlink_type'''()
-sets the type of the symbolic link stored in an archive entry. These functions
+sets the type of the symbolic link stored in an archive entry.
+These functions
have special meaning on operating systems that support multiple symbolic link
types (e.g. Microsoft Windows).
Symbolic link points to a directory
</dd></dl>
== SEE ALSO ==
-[[ManPageArchiveEntry3]],
-[[ManPageArchiveEntryPaths3]],
-[[ManPageArchiveEntryStat3]],
-[[ManPageLibarchive3]]
+[[ManPagerchiventry3]],
+[[ManPagerchiventryaths3]],
+[[ManPagerchiventrytat3]],
+[[ManPageibarchive3]]
'''archive_entry_update_symlink_utf8'''(''struct archive_entry *a'', ''const char *path'');
== DESCRIPTION ==
Path names supported by
-[[ManPageArchiveEntry3]]:
+[[ManPagerchiventry3]]:
<dl>
<dt>hardlink</dt><dd>
Destination of the hardlink.
Path in the archive
</dd><dt>sourcepath</dt><dd>
Path on the disk for use by
-[[ManPageArchiveReadDisk3]].
+[[ManPagerchiveeadisk3]].
</dd><dt>symlink</dt><dd>
Destination of the symbolic link.
</dd></dl>
'''XXX_w'''().
</dd><dt>UTF-8</dt><dd>
Unicode strings encoded as UTF-8.
-This are convience functions to update both the multibyte and wide
+These are convenience functions to update both the multibyte and wide
character strings at the same time.
</dd></dl>
archive directly.
For that reason, it is only available as multibyte string.
-The link path is a convience function for conditionally setting
+The link path is a convenience function for conditionally setting
hardlink or symlink destination.
It doesn't have a corresponding get accessor function.
'''archive_entry_set_XXX'''()
-is an alias for
+is an alias for
'''archive_entry_copy_XXX'''().
== SEE ALSO ==
-[[ManPageArchiveEntry3]]
-[[ManPageLibarchive3]],
+[[ManPagerchiventry3]],
+[[ManPageibarchive3]]
and
'''archive_entry_set_perm'''()
store the given user id, group id and permission in the entry.
-The permission is also set as side effect of calling
+The permission is also set as a side effect of calling
'''archive_entry_set_mode'''().
'''archive_entry_strmode'''()
'''XXX_w'''().
</dd><dt>UTF-8</dt><dd>
Unicode strings encoded as UTF-8.
-This are convience functions to update both the multibyte and wide
+These are convenience functions to update both the multibyte and wide
character strings at the same time.
</dd></dl>
'''archive_entry_set_XXX'''()
-is an alias for
+is an alias for
'''archive_entry_copy_XXX'''().
=== File Flags===
File flags are transparently converted between a bitmap
'''archive_entry_copy_fflags_text'''()
and
'''archive_entry_copy_fflags_text_w'''()
-functions parse the provided text and sets the internal bitmap values.
+functions parse the provided text and set the internal bitmap values.
This is a platform-specific operation; names that are not meaningful
on the current platform will be ignored.
The function returns a pointer to the start of the first name that was not
[[strtofflags(3)|http://www.freebsd.org/cgi/man.cgi?query=strtofflags&sektion=3]],
which stops parsing at the first unrecognized name.)
== SEE ALSO ==
-[[ManPageArchiveEntry3]],
-[[ManPageArchiveEntryAcl3]],
-[[ManPageArchiveReadDisk3]],
-[[ManPageArchiveWriteDisk3]]
-[[ManPageLibarchive3]],
+[[ManPagerchiventry3]],
+[[ManPagerchiventrycl3]],
+[[ManPagerchiveeadisk3]],
+[[ManPagerchiveriteisk3]],
+[[ManPageibarchive3]]
== BUGS ==
The platform types
''uid_t''
'''archive_entry_rdevmajor''',
'''archive_entry_set_rdevmajor''',
'''archive_entry_rdevminor''',
-'''archive_entry_set_rdevminor''',
+'''archive_entry_set_rdevminor'''
- accessor functions for manipulating archive entry descriptions
== LIBRARY ==
Streaming Archive Library (libarchive, -larchive)
and
'''archive_entry_ino64'''()
are used by
-[[ManPageArchiveEntryLinkify3]]
+[[ManPagerchiventryinkify3]]
to find hardlinks.
The pair of device and inode is supposed to identify hardlinked files.
Some archive formats use the combined form, while other formats use
the split form.
== SEE ALSO ==
-[[ManPageArchiveEntryAcl3]],
-[[ManPageArchiveEntryPerms3]],
-[[ManPageArchiveEntryTime3]],
-[[ManPageLibarchive3]],
-[[stat(2)|http://www.freebsd.org/cgi/man.cgi?query=stat&sektion=2]]
+[[stat(2)|http://www.freebsd.org/cgi/man.cgi?query=stat&sektion=2]],
+[[ManPagerchiventrycl3]],
+[[ManPagerchiventryerms3]],
+[[ManPagerchiventryime3]],
+[[ManPageibarchive3]]
'''archive_entry_mtime_nsec''',
'''archive_entry_mtime_is_set''',
'''archive_entry_set_mtime''',
-'''archive_entry_unset_mtime''',
+'''archive_entry_unset_mtime'''
- functions for manipulating times in archive entry descriptions
== LIBRARY ==
Streaming Archive Library (libarchive, -larchive)
Supported time fields are atime (access time), birthtime (creation time),
ctime (last time an inode property was changed) and mtime (modification time).
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
provides a high-resolution interface.
The timestamps are truncated automatically depending on the archive format
(for archiving) or the filesystem capabilities (for restoring).
'''XXX_is_set'''().
Unset time fields have a second and nanosecond field of 0.
== SEE ALSO ==
-[[ManPageArchiveEntry3]]
-[[ManPageLibarchive3]],
+[[ManPagerchiventry3]],
+[[ManPageibarchive3]]
== HISTORY ==
The
'''libarchive'''
resources.
=== Create archive object===
See
-[[ManPageArchiveReadNew3]].
+[[ManPagerchiveeadew3]].
To read an archive, you must first obtain an initialized
'''struct archive'''
'''archive_read_new'''().
=== Enable filters and formats===
See
-[[ManPageArchiveReadFilter3]]
+[[ManPagerchiveeadilter3]]
and
-[[ManPageArchiveReadFormat3]].
+[[ManPagerchiveeadormat3]].
You can then modify this object for the desired operations with the
various
currently supported by the library.
=== Set options===
See
-[[ManPageArchiveReadSetOptions3]].
+[[ManPagerchiveeadetptions3]].
=== Open archive===
See
-[[ManPageArchiveReadOpen3]].
+[[ManPagerchiveeadpen3]].
Once you have prepared the
'''struct archive'''
most appropriate for the medium.
=== Consume archive===
See
-[[ManPageArchiveReadHeader3]],
-[[ManPageArchiveReadData3]]
+[[ManPagerchiveeadeader3]],
+[[ManPagerchiveeadata3]]
and
-[[ManPageArchiveReadExtract3]].
+[[ManPagerchiveeadxtract3]].
Each archive entry consists of a header followed by a certain
amount of data.
pathname, file permissions, or ownership.
=== Release resources===
See
-[[ManPageArchiveReadFree3]].
+[[ManPagerchiveeadree3]].
Once you have finished reading data from the archive, you
should call
to close the archive, then call
'''archive_read_free'''()
to release all resources, including all memory allocated by the library.
-== EXAMPLE ==
+== EXAMPLES ==
The following illustrates basic usage of the library.
In this example,
the callback functions are simply wrappers around the standard
```
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveReadNew3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadExtract3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadHeader3]],
-[[ManPageArchiveReadOpen3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadxtract3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadeader3]],
+[[ManPagerchiveeadew3]],
+[[ManPagerchiveeadpen3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
== HISTORY ==
The
will be returned.
Otherwise,
'''ARCHIVE_OK'''
-will be returned.
+will be returned.
</dd><dt>'''archive_read_set_passphrase_callback'''()</dt><dd>
-Register callback function that will be invoked to get a passphrase
-for decrption after trying all passphrases registered by the
+Register a callback function that will be invoked to get a passphrase
+for decryption after trying all the passphrases registered by the
'''archive_read_add_passphrase'''()
function failed.
</dd></dl>
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadSetOptions3]]
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPageibarchive3]]
ARCHIVE_READ_DATA(3) manual page
== NAME ==
-'''archive_read_data'''
+'''archive_read_data''',
'''archive_read_data_block''',
'''archive_read_data_skip''',
'''archive_read_data_into_fd'''
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadExtract3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadHeader3]],
-[[ManPageArchiveReadOpen3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadxtract3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadeader3]],
+[[ManPagerchiveeadpen3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
<dl>
<dt>'''ARCHIVE_READDISK_HONOR_NODUMP'''</dt><dd>
Skip files and directories with the nodump file attribute (file flag) set.
-By default, the nodump file atrribute is ignored.
+By default, the nodump file attribute is ignored.
</dd><dt>'''ARCHIVE_READDISK_MAC_COPYFILE'''</dt><dd>
-Mac OS X specific. Read metadata (ACLs and extended attributes) with
+Mac OS X specific.
+Read metadata (ACLs and extended attributes) with
[[copyfile(3)|http://www.freebsd.org/cgi/man.cgi?query=copyfile&sektion=3]].
By default, metadata is read using
[[copyfile(3)|http://www.freebsd.org/cgi/man.cgi?query=copyfile&sektion=3]].
for more information on file attributes.
</dd><dt>'''ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS'''</dt><dd>
Do not traverse mount points.
-By defaut, moint points are traversed.
+By default, mount points are traversed.
</dd><dt>'''ARCHIVE_READDISK_NO_XATTR'''</dt><dd>
Do not read extended file attributes (xattrs).
By default, extended file attributes are read from disk.
The
'''archive_entry'''
object must have already been created with
-[[ManPageArchiveEntryNew3]]
+[[ManPagerchiventryew3]]
and at least one of the source path or path fields must already be set.
(If both are set, the source path will be used.)
(For example, directory traversal libraries often provide this information.)
Where necessary, user and group ids are converted to user and group names
-using the currently registered lookup functions above.
+using the currently-registered lookup functions above.
This affects the file ownership fields and ACL values in the
'''struct archive_entry'''
object.
More information about the
''struct'' archive
object and the overall design of the library can be found in the
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
overview.
-== EXAMPLE ==
+== EXAMPLES ==
The following illustrates basic usage of the library by
showing how to use it to copy an item on disk into an archive.
```text
'''archive_error_string'''()
functions.
== SEE ALSO ==
-[[ManPageArchiveRead3]],
-[[ManPageArchiveUtil3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteDisk3]],
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]]
+[[ManPagerchiveead3]],
+[[ManPagerchivetil3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteisk3]],
+[[ManPageibarchive3]]
== HISTORY ==
The
'''libarchive'''
This API should provide a set of methods for walking a directory tree.
That would make it a direct parallel of the
-[[ManPageArchiveRead3]]
+[[ManPagerchiveead3]]
API.
When such methods are implemented, the
"hybrid"
<dl>
<dt>'''archive_read_extract'''(), '''archive_read_extract_set_skip_file'''()</dt><dd>
A convenience function that wraps the corresponding
-[[ManPageArchiveWriteDisk3]]
+[[ManPagerchiveriteisk3]]
interfaces.
The first call to
'''archive_read_extract'''()
creates a restore object using
-[[ManPageArchiveWriteDiskNew3]]
+[[ManPagerchiveriteiskew3]]
and
-[[ManPageArchiveWriteDiskSetStandardLookup3]],
+[[ManPagerchiveriteiskettandardookup3]],
then transparently invokes
-[[ManPageArchiveWriteDiskSetOptions3]],
-[[ManPageArchiveWriteHeader3]],
-[[ManPageArchiveWriteData3]],
+[[ManPagerchiveriteisketptions3]],
+[[ManPagerchiveriteeader3]],
+[[ManPagerchiveriteata3]],
and
-[[ManPageArchiveWriteFinishEntry3]]
+[[ManPagerchiveriteinishntry3]]
to create the entry on disk and copy data into it.
The
''flags''
argument is passed unmodified to
-[[ManPageArchiveWriteDiskSetOptions3]].
+[[ManPagerchiveriteisketptions3]].
</dd><dt>'''archive_read_extract2'''()</dt><dd>
This is another version of
'''archive_read_extract'''()
that allows you to provide your own restore object.
In particular, this allows you to override the standard lookup functions
using
-[[ManPageArchiveWriteDiskSetGroupLookup3]],
+[[ManPagerchiveriteisketroupookup3]],
and
-[[ManPageArchiveWriteDiskSetUserLookup3]].
+[[ManPagerchiveriteisketserookup3]].
Note that
'''archive_read_extract2'''()
does not accept a
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadOpen3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadpen3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
'''archive_error_string'''()
functions.
== SEE ALSO ==
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadFormat3]]
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadormat3]],
+[[ManPageibarchive3]]
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
== BUGS ==
Many traditional archiver programs treat
'''archive_error_string'''()
functions.
== SEE ALSO ==
-[[ManPageLibarchive3]],
-[[ManPageArchiveReadNew3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadOpen3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]]
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadew3]],
+[[ManPagerchiveeadpen3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]]
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadExtract3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadOpen3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadxtract3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadpen3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
A complete description of the
'''struct archive'''
object can be found in the overview manual page for
-[[ManPageLibarchive3]].
+[[ManPageibarchive3]].
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
and
'''struct archive_entry'''
objects can be found in the overview manual page for
-[[ManPageLibarchive3]].
+[[ManPageibarchive3]].
== CLIENT CALLBACKS ==
The callback functions must match the following prototypes:
<ul>
'''archive_set_error'''()
to register an error code and message and
return
-'''ARCHIVE_FATAL.'''
+'''ARCHIVE_FATAL'''.
== RETURN VALUES ==
These functions return
'''ARCHIVE_OK'''
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadData3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveUtil3]],
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadata3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPageibarchive3]],
[[ManPageTar5]]
to disable.
</dd><dt>'''read_concatenated_archives'''</dt><dd>
Ignore zeroed blocks in the archive, which occurs when multiple tar archives
-have been concatenated together. Without this option, only the contents of
+have been concatenated together.
+Without this option, only the contents of
the first concatenated archive would be read.
</dd></dl>
</dd></dl>
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteSetOptions3]],
-[[ManPageArchiveRead3]]
+[[ManPagerchiveead3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]]
These functions provide access to various information about the
'''struct archive'''
object used in the
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library.
<dl>
<dt>'''archive_clear_error'''()</dt><dd>
Not generally used in client code.
</dd><dt>'''archive_compression'''()</dt><dd>
Synonym for
-'''archive_filter_code(a,'''(''0)'').
+'''archive_filter_code'''(''a'', ''0'').
</dd><dt>'''archive_compression_name'''()</dt><dd>
Synonym for
-'''archive_filter_name(a,'''(''0)'').
+'''archive_filter_name'''(''a'', ''0'').
</dd><dt>'''archive_copy_error'''()</dt><dd>
Copies error information from one archive to another.
</dd><dt>'''archive_errno'''()</dt><dd>
</dd><dt>'''archive_file_count'''()</dt><dd>
Returns a count of the number of files processed by this archive object.
The count is incremented by calls to
-[[ManPageArchiveWriteHeader3]]
+[[ManPagerchiveriteeader3]]
or
-[[ManPageArchiveReadNextHeader3]].
+[[ManPagerchiveeadexteader3]].
</dd><dt>'''archive_filter_code'''()</dt><dd>
Returns a numeric code identifying the indicated filter.
See
filter 1 is the uudecode filter,
and filter 2 is the pseudo-filter that wraps the archive read functions.
In this case, requesting
-'''archive_position(a,'''(''-1)'')
+'''archive_position'''(''a'', ''-1'')
would be a synonym for
-'''archive_position(a,'''(''2)'')
+'''archive_position'''(''a'', ''2'')
which would return the number of bytes currently read from the archive, while
-'''archive_position(a,'''(''1)'')
+'''archive_position'''(''a'', ''1'')
would return the number of bytes after uudecoding, and
-'''archive_position(a,'''(''0)'')
+'''archive_position'''(''a'', ''0'')
would return the number of bytes after decompression.
</dd><dt>'''archive_filter_name'''()</dt><dd>
Returns a textual name identifying the indicated filter.
</dd><dt>'''archive_position'''()</dt><dd>
Returns the number of bytes read from or written to the indicated filter.
In particular,
-'''archive_position(a,'''(''0)'')
+'''archive_position'''(''a'', ''0'')
returns the number of bytes read or written by the format handler, while
-'''archive_position(a,'''(''-1)'')
+'''archive_position'''(''a'', ''-1'')
returns the number of bytes read or written to the archive.
See
'''archive_filter_count'''()
not uniformly supported and should not be used.
</dd></dl>
== SEE ALSO ==
-[[ManPageArchiveRead3]],
-[[ManPageArchiveWrite3]],
-[[ManPageLibarchive3]],
+[[ManPagerchiveead3]],
+[[ManPagerchiverite3]],
+[[ManPageibarchive3]],
[[printf(3)|http://www.freebsd.org/cgi/man.cgi?query=printf&sektion=3]]
== HISTORY ==
The
close the archive and release all resources.
=== Create archive object===
See
-[[ManPageArchiveWriteNew3]].
+[[ManPagerchiveriteew3]].
To write an archive, you must first obtain an initialized
'''struct archive'''
'''archive_write_new'''().
=== Enable filters and formats, configure block size and padding===
See
-[[ManPageArchiveWriteFilter3]],
-[[ManPageArchiveWriteFormat3]]
+[[ManPagerchiveriteilter3]],
+[[ManPagerchiveriteormat3]]
and
-[[ManPageArchiveWriteBlocksize3]].
+[[ManPagerchiveritelocksize3]].
You can then modify this object for the desired operations with the
various
support.
=== Set options===
See
-[[ManPageArchiveWriteSetOptions3]].
+[[ManPagerchiveriteetptions3]].
=== Open archive===
See
-[[ManPageArchiveWriteOpen3]].
+[[ManPagerchiveritepen3]].
Once you have prepared the
'''struct archive'''
object, or a block of memory from which to write the archive data.
=== Produce archive===
See
-[[ManPageArchiveWriteHeader3]]
+[[ManPagerchiveriteeader3]]
and
-[[ManPageArchiveWriteData3]].
+[[ManPagerchiveriteata3]].
Individual archive entries are written in a three-step
process:
field, which specifies the size of the data portion of the object.
=== Release resources===
See
-[[ManPageArchiveWriteFree3]].
+[[ManPagerchiveriteree3]].
After all entries have been written, use the
'''archive_write_free'''()
function to release all resources.
-== EXAMPLE ==
+== EXAMPLES ==
The following sketch illustrates basic usage of the library.
In this example,
the callback functions are simply wrappers around the standard
if (archive_write_set_format_filter_by_ext(a, outname) != ARCHIVE_OK) {
archive_write_add_filter_gzip(a);
archive_write_set_format_ustar(a);
- }
+ }
archive_write_open(a, mydata, myopen, mywrite, myclose);
while (*filename) {
stat(*filename, &st);
```
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
and consider any non-negative value as success.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteFinishEntry3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiveriteinishntry3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
(FreeBSD, Mac OS X)
for more information on file attributes.
</dd><dt>'''ARCHIVE_EXTRACT_MAC_METADATA'''</dt><dd>
-Mac OS X specific. Restore metadata using
+Mac OS X specific.
+Restore metadata using
[[copyfile(3)|http://www.freebsd.org/cgi/man.cgi?query=copyfile&sektion=3]].
By default,
[[copyfile(3)|http://www.freebsd.org/cgi/man.cgi?query=copyfile&sektion=3]]
More information about the
''struct'' archive
object and the overall design of the library can be found in the
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
overview.
Many of these functions are also documented under
-[[ManPageArchiveWrite3]].
+[[ManPagerchiverite3]].
== RETURN VALUES ==
Most functions return
'''ARCHIVE_OK'''
'''archive_error_string'''()
functions.
== SEE ALSO ==
-[[ManPageArchiveRead3]],
-[[ManPageArchiveWrite3]],
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]]
+[[ManPagerchiveead3]],
+[[ManPagerchiverite3]],
+[[ManPageibarchive3]]
== HISTORY ==
The
'''libarchive'''
'''archive_write_add_filter_program''',
'''archive_write_add_filter_uuencode''',
'''archive_write_add_filter_xz''',
-'''archive_write_add_filter_zstd''',
+'''archive_write_add_filter_zstd'''
- functions enabling output filters
== LIBRARY ==
Streaming Archive Library (libarchive, -larchive)
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteFormat3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteormat3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteData3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiveriteata3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
'''archive_write_set_format_v7tar''',
'''archive_write_set_format_warc''',
'''archive_write_set_format_xar''',
-'''archive_write_set_format_zip''',
+'''archive_write_set_format_zip'''
- functions for creating archives
== LIBRARY ==
Streaming Archive Library (libarchive, -larchive)
</dt> <dd>
Set the format as specified.
More details on the formats supported by libarchive can be found in the
-[[ManPageLibarchiveFormats5]]
+[[ManPageibarchiveormats5]]
manual page.
</dd></dl>
== RETURN VALUES ==
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
-[[ManPageLibarchiveFormats5]],
+[[ManPageibarchiveormats5]],
[[ManPageMtree5]],
[[ManPageTar5]]
to release the resources.
This can be used to speed recovery when the archive creation
must be aborted.
-Note that the created archive is likely to be malformed in this case;
+Note that the created archive is likely to be malformed in this case;
</dd><dt>'''archive_write_close'''()</dt><dd>
Complete the archive and invoke the close callback.
</dd><dt>'''archive_write_finish'''()</dt><dd>
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
'''struct archive_entry'''
structure.
See
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
for information on creating and populating
'''struct archive_entry'''
objects.
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
A complete description of the
'''struct archive'''
object can be found in the overview manual page for
-[[ManPageLibarchive3]].
+[[ManPageibarchive3]].
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
More information about the
''struct'' archive
object and the overall design of the library can be found in the
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
overview.
Note that the convenience forms above vary in how
they block the output.
See
-[[ManPageArchiveWriteBlocksize3]]
+[[ManPagerchiveritelocksize3]]
if you need to control the block size used for writes
or the end-of-file padding behavior.
== CLIENT CALLBACKS ==
'''archive_set_error'''()
to register an error code and message and
return
-'''ARCHIVE_FATAL.'''
+'''ARCHIVE_FATAL'''.
Note that if the client-provided write callback function
returns a non-zero value, that error will be propagated back to the caller
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteBlocksize3]],
-[[ManPageArchiveWriteFilter3]],
-[[ManPageArchiveWriteFormat3]],
-[[ManPageArchiveWriteNew3]],
-[[ManPageArchiveWriteSetOptions3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveritelocksize3]],
+[[ManPagerchiveriteilter3]],
+[[ManPagerchiveriteormat3]],
+[[ManPagerchiveriteew3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
[[ManPageMtree5]],
[[ManPageTar5]]
'''archive_write_set_filter_option'''(),
'''archive_write_set_format_option'''()
</dt> <dd>
-Specifies an option that will be passed to currently-registered
+Specifies an option that will be passed to the currently-registered
filters (including decompression filters) or format readers.
If
'''ARCHIVE_FATAL'''
will be returned
immediately.
-Otherwise, greater of the two values will be returned.
+Otherwise, the greater of the two values will be returned.
</dd><dt>'''archive_write_set_options'''()</dt><dd>
''options''
is a comma-separated list of options.
<dl>
<dt>'''abstract-file'''=''filename''</dt><dd>
The file with the specified name will be identified in the ISO9660 metadata
-as holding the abstract for this volume. Default: none.
+as holding the abstract for this volume.
+Default: none.
</dd><dt>'''application-id'''=''filename''</dt><dd>
The file with the specified name will be identified in the ISO9660 metadata
-as holding the application identifier for this volume. Default: none.
+as holding the application identifier for this volume.
+Default: none.
</dd><dt>'''biblio-file'''=''filename''</dt><dd>
The file with the specified name will be identified in the ISO9660 metadata
-as holding the bibliography for this volume. Default: none.
+as holding the bibliography for this volume.
+Default: none.
</dd><dt>'''copyright-file'''=''filename''</dt><dd>
The file with the specified name will be identified in the ISO9660 metadata
-as holding the copyright for this volume. Default: none.
+as holding the copyright for this volume.
+Default: none.
</dd><dt>'''publisher'''=''filename''</dt><dd>
The file with the specified name will be identified in the ISO9660 metadata
-as holding the publisher information for this volume. Default: none.
+as holding the publisher information for this volume.
+Default: none.
</dd><dt>'''volume-id'''=''string''</dt><dd>
The specified string will be used as the Volume Identifier in the ISO9660 metadata.
-It is limited to 32 bytes. Default: none.
+It is limited to 32 bytes.
+Default: none.
</dd></dl>
</dd><dt>Format iso9660 - boot support</dt><dd>
These options are used to make an ISO9660 image that can be directly
the default is
'''fd''',
otherwise the default is
-'''no-emulation.'''
+'''no-emulation'''.
</dd></dl>
</dd><dt>Format iso9660 - filename and size extensions</dt><dd>
Various extensions to the base ISO9660 format.
Default: disabled.
</dd><dt>'''allow-period'''</dt><dd>
If enabled, allows filenames to contain trailing period characters, in violation of the ISO9660 specification.
-If disabled,trailing periods will be converted to underscore characters.
+If disabled, trailing periods will be converted to underscore characters.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
</dd><dt>'''allow-pvd-lowercase'''</dt><dd>
This option can be provided multiple times to suppress compression
on many files.
</dd></dl>
+</dd><dt>Format pax</dt><dd>
+<dl>
+<dt>'''hdrcharset'''</dt><dd>
+This sets the character set used for filenames, uname and gname.
+The value is one of
+"BINARY"
+or
+"UTF-8".
+With
+"BINARY"
+there is no character conversion, with
+"UTF-8"
+names are converted to UTF-8.
+</dd><dt>'''xattrheader'''</dt><dd>
+When storing extended attributes, this option configures which
+headers should be written. The value is one of
+"all",
+"LIBARCHIVE",
+or
+"SCHILY".
+By default, both
+"LIBARCHIVE.xattr"
+and
+"SCHILY.xattr"
+headers are written.
+</dd></dl>
+</dd><dt>Format 7zip</dt><dd>
+<dl>
+<dt>'''compression'''</dt><dd>
+The value is one of
+"store",
+"deflate",
+"bzip2",
+"lzma1",
+"lzma2"
+or
+"ppmd"
+to indicate how the following entries should be compressed.
+Note that this setting is ignored for directories, symbolic links,
+and other special entries.
+</dd><dt>'''compression-level'''</dt><dd>
+The value is interpreted as a decimal integer specifying the
+compression level.
+Values between 0 and 9 are supported.
+The interpretation of the compression level depends on the chosen
+compression method.
+</dd></dl>
</dd><dt>Format zip</dt><dd>
<dl>
<dt>'''compression'''</dt><dd>
to indicate how the following entries should be compressed.
Note that this setting is ignored for directories, symbolic links,
and other special entries.
+</dd><dt>'''compression-level'''</dt><dd>
+The value is interpreted as a decimal integer specifying the
+compression level.
+Values between 0 and 9 are supported.
+A compression level of 0 switches the compression method to
+"store",
+other values will enable
+"deflate"
+compression with the given level.
</dd><dt>'''experimental'''</dt><dd>
This boolean option enables or disables experimental Zip features
that may not be compatible with other Zip implementations.
functions.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveWrite3]]
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchiverite3]],
+[[ManPageibarchive3]]
== HISTORY ==
The
'''libarchive'''
== DESCRIPTION ==
<dl>
<dt>'''archive_write_set_passphrase'''()</dt><dd>
-Set a passphrase for writing an encryption archive.
+Set a passphrase for writing an encrypted archive.
If
''passphrase''
is
will be returned.
Otherwise,
'''ARCHIVE_OK'''
-will be returned.
+will be returned.
</dd><dt>'''archive_write_set_passphrase_callback'''()</dt><dd>
-Register callback function that will be invoked to get a passphrase
-for encrption if the passphrase was not set by the
+Register a callback function that will be invoked to get a passphrase
+for encryption if the passphrase was not set by the
'''archive_write_set_passphrase'''()
function.
</dd></dl>
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageLibarchive3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteSetOptions3]]
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]]
Read a list of filenames from standard input and copy the files to the
specified directory.
</dd></dl>
-
== OPTIONS ==
Unless specifically stated otherwise, options are applicable in
all operating modes.
The default format is
''odc''.
See
-[[ManPageLibarchiveFormats5]]
+[[ManPageibarchiveormats5]]
for more complete information about the
formats currently supported by the underlying
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library.
</dd><dt>-h, --help</dt><dd>
Print usage information.
standard syntax.
== SEE ALSO ==
[[bzip2(1)|http://www.freebsd.org/cgi/man.cgi?query=bzip2&sektion=1]],
-[[ManPageBsdtar1]],
[[gzip(1)|http://www.freebsd.org/cgi/man.cgi?query=gzip&sektion=1]],
[[mt(1)|http://www.freebsd.org/cgi/man.cgi?query=mt&sektion=1]],
[[pax(1)|http://www.freebsd.org/cgi/man.cgi?query=pax&sektion=1]],
-[[ManPageLibarchive3]],
+[[ManPageBsdtar1]],
+[[ManPageibarchive3]],
[[ManPageCpio5]],
-[[ManPageLibarchiveFormats5]],
+[[ManPageibarchiveormats5]],
[[ManPageTar5]]
== STANDARDS ==
There is no current POSIX standard for the cpio command; it appeared
even though it was not well-known outside of AT&T until some time later.
This is a complete re-implementation based on the
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library.
== BUGS ==
The cpio archive format has several basic limitations:
restricted pax format and bzip2 compression.
</dd><dt>--acls</dt><dd>
(c, r, u, x modes only)
-Archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of
+Archive or extract POSIX.1e or NFSv4 ACLs.
+This is the reverse of
--no-acls
and the default behavior in c, r, and u modes (except on Mac OS X) or if
'''tar'''
-is run in x mode as root. On Mac OS X this option translates extended ACLs
-to NFSv4 ACLs. To store extended ACLs the
+is run in x mode as root.
+On Mac OS X this option translates extended ACLs to NFSv4 ACLs.
+To store extended ACLs the
--mac-metadata
option is preferred.
</dd><dt>-B, --read-full-blocks</dt><dd>
and
"ustar".
Other formats may also be supported; see
-[[ManPageLibarchiveFormats5]]
+[[ManPageibarchiveormats5]]
for more information about currently-supported formats.
In r and u modes, when extending an existing archive, the format specified
here must be compatible with the format of the existing archive on disk.
By default, the modification time is set to the time stored in the archive.
</dd><dt>--mac-metadata</dt><dd>
(c, r, u and x mode only)
-Mac OS X specific. Archive or extract extended ACLs and extended file
+Mac OS X specific.
+Archive or extract extended ACLs and extended file
attributes using
[[copyfile(3)|http://www.freebsd.org/cgi/man.cgi?query=copyfile&sektion=3]]
-in AppleDouble format. This is the reverse of
+in AppleDouble format.
+This is the reverse of
--no-mac-metadata.
and the default behavior in c, r, and u modes or if
'''tar'''
[[find(1)|http://www.freebsd.org/cgi/man.cgi?query=find&sektion=1]].
</dd><dt>--no-acls</dt><dd>
(c, r, u, x modes only)
-Do not archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of
+Do not archive or extract POSIX.1e or NFSv4 ACLs.
+This is the reverse of
--acls
and the default behavior if
'''tar'''
is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes).
</dd><dt>--no-fflags</dt><dd>
(c, r, u, x modes only)
-Do not archive or extract file attributes or file flags. This is the reverse of
+Do not archive or extract file attributes or file flags.
+This is the reverse of
--fflags
and the default behavior if
'''tar'''
is run as non-root in x mode.
</dd><dt>--no-mac-metadata</dt><dd>
(x mode only)
-Mac OS X specific. Do not archive or extract ACLs and extended file attributes
+Mac OS X specific.
+Do not archive or extract ACLs and extended file attributes
using
[[copyfile(3)|http://www.freebsd.org/cgi/man.cgi?query=copyfile&sektion=3]]
-in AppleDouble format. This is the reverse of
+in AppleDouble format.
+This is the reverse of
--mac-metadata.
and the default behavior if
'''tar'''
is run as non-root.
</dd><dt>--no-xattrs</dt><dd>
(c, r, u, x modes only)
-Do not archive or extract extended file attributes. This is the reverse of
+Do not archive or extract extended file attributes.
+This is the reverse of
--xattrs
and the default behavior if
'''tar'''
</dd><dt>'''gzip:compression-level'''</dt><dd>
A decimal integer from 1 to 9 specifying the gzip compression level.
</dd><dt>'''gzip:timestamp'''</dt><dd>
-Store timestamp. This is enabled by default, use
+Store timestamp.
+This is enabled by default, use
'''!timestamp'''
or
'''gzip:!timestamp'''
</dd><dt>'''lz4:compression-level'''</dt><dd>
A decimal integer from 1 to 9 specifying the lzop compression level.
</dd><dt>'''lz4:stream-checksum'''</dt><dd>
-Enable stream checksum. This is by default, use
+Enable stream checksum.
+This is by default, use
'''lz4:!stream-checksum'''
to disable.
</dd><dt>'''lz4:block-checksum'''</dt><dd>
aes128 (WinZip AES-128 encryption) and aes256 (WinZip AES-256 encryption).
</dd><dt>'''read_concatenated_archives'''</dt><dd>
Ignore zeroed blocks in the archive, which occurs when multiple tar archives
-have been concatenated together. Without this option, only the contents of
-the first concatenated archive would be read. This option is comparable to
-the
+have been concatenated together.
+Without this option, only the contents of
+the first concatenated archive would be read.
+This option is comparable to the
-i, --ignore-zeros
option of GNU tar.
</dd></dl>
Preserve file permissions.
Attempt to restore the full permissions, including file modes, file attributes
or file flags, extended file attributes and ACLs, if available, for each item
-extracted from the archive. This is the reverse of
+extracted from the archive.
+This is the reverse of
--no-same-permissions
and the default if
'''tar'''
-is being run as root. It can be partially overridden by also specifying
+is being run as root.
+It can be partially overridden by also specifying
--no-acls,
--no-fflags,
--no-mac-metadata
for more information about the handling of exclusions.
</dd><dt>--xattrs</dt><dd>
(c, r, u, x modes only)
-Archive or extract extended file attributes. This is the reverse of
+Archive or extract extended file attributes.
+This is the reverse of
--no-xattrs
and the default behavior in c, r, and u modes or if
'''tar'''
'''tar'''
as
```text
-tar -cf - -C srcdir\. | tar -xpf - -C destdir
+tar -cf - -C srcdir . | tar -xpf - -C destdir
```
or more traditionally
```text
-cd srcdir ; tar -cf -\. | (cd destdir ; tar -xpf -)
+cd srcdir ; tar -cf - . | (cd destdir ; tar -xpf -)
```
In create mode, the list of files and directories to be archived
[[ManPageMtree5]]
format can be used to create an output archive with arbitrary ownership,
permissions, or names that differ from existing data on disk:
-
```text
$ cat input.mtree
#mtree
and
'''archive_write_set_options'''()
API calls that are described in
-[[ManPageArchiveRead3]]
+[[ManPagerchiveead3]]
and
-[[ManPageArchiveWrite3]].
+[[ManPagerchiverite3]].
== COMPATIBILITY ==
The bundled-arguments format is supported for compatibility
with historic implementations.
[[pax(1)|http://www.freebsd.org/cgi/man.cgi?query=pax&sektion=1]],
[[shar(1)|http://www.freebsd.org/cgi/man.cgi?query=shar&sektion=1]],
[[xz(1)|http://www.freebsd.org/cgi/man.cgi?query=xz&sektion=1]],
-[[ManPageLibarchive3]],
-[[ManPageLibarchiveFormats5]],
+[[ManPageibarchive3]],
+[[ManPageibarchiveormats5]],
[[ManPageTar5]]
== STANDARDS ==
There is no current POSIX standard for the tar command; it appeared
FreeBSD 1.0.
This is a complete re-implementation based on the
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library.
It was first released with
FreeBSD 5.4
pages for each API or utility function.
== READING AN ARCHIVE ==
See
-[[ManPageArchiveRead3]].
+[[ManPagerchiveead3]].
== WRITING AN ARCHIVE ==
See
-[[ManPageArchiveWrite3]].
+[[ManPagerchiverite3]].
== WRITING ENTRIES TO DISK ==
The
-[[ManPageArchiveWriteDisk3]]
+[[ManPagerchiveriteisk3]]
API allows you to write
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
objects to disk using the same API used by
-[[ManPageArchiveWrite3]].
+[[ManPagerchiverite3]].
The
-[[ManPageArchiveWriteDisk3]]
+[[ManPagerchiveriteisk3]]
API is used internally by
'''archive_read_extract'''('';'')
using it directly can provide greater control over how entries
operations.
== READING ENTRIES FROM DISK ==
The
-[[ManPageArchiveReadDisk3]]
+[[ManPagerchiveeadisk3]]
supports for populating
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
objects from information in the filesystem.
This includes the information accessible from the
[[stat(2)|http://www.freebsd.org/cgi/man.cgi?query=stat&sektion=2]]
system call as well as ACLs, extended attributes,
and other metadata.
The
-[[ManPageArchiveReadDisk3]]
+[[ManPagerchiveeadisk3]]
API also supports iterating over directory trees,
which allows directories of files to be read using
an API compatible with
the
-[[ManPageArchiveRead3]]
+[[ManPagerchiveead3]]
API.
== DESCRIPTION ==
Detailed descriptions of each function are provided by the
structure contains a complete description of a single archive
entry.
It uses an opaque interface that is fully documented in
-[[ManPageArchiveEntry3]].
+[[ManPagerchiventry3]].
Users familiar with historic formats should be aware that the newer
variants have eliminated most restrictions on the length of textual fields.
functions can be used to obtain more information.
== ENVIRONMENT ==
There are character set conversions within the
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
functions that are impacted by the currently-selected locale.
== SEE ALSO ==
[[ManPageBsdtar1]],
-[[ManPageArchiveEntry3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveUtil3]],
-[[ManPageArchiveWrite3]],
+[[ManPagerchiventry3]],
+[[ManPagerchiveead3]],
+[[ManPagerchivetil3]],
+[[ManPagerchiverite3]],
[[ManPageTar5]]
== HISTORY ==
The
This page describes user-visible changes in libarchive3, and lists
public functions and other symbols changed, deprecated or removed
in libarchive3, along with their replacements if any.
-
=== Multiple Filters===
Libarchive2 permitted a single (input or output) filter active
on an archive.
```
</dd></dl>
== SEE ALSO ==
-[[ManPageLibarchive3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveReadFilter3]],
-[[ManPageArchiveReadFormat3]],
-[[ManPageArchiveReadSetOptions3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteFilter3]],
-[[ManPageArchiveWriteFormat3]],
-[[ManPageArchiveWriteSetOptions3]],
-[[ManPageArchiveUtil3]]
+[[ManPagerchiveead3]],
+[[ManPagerchiveeadilter3]],
+[[ManPagerchiveeadormat3]],
+[[ManPagerchiveeadetptions3]],
+[[ManPagerchivetil3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteilter3]],
+[[ManPagerchiveriteormat3]],
+[[ManPagerchiveriteetptions3]],
+[[ManPageibarchive3]]
- archive formats supported by the libarchive library
== DESCRIPTION ==
The
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library reads and writes a variety of streaming archive formats.
Generally speaking, all of these archive formats consist of a series of
"entries".
functions to enable all supported formats.
=== Tar Formats===
The
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library can read most tar archives.
It can write POSIX-standard
"ustar"
<dl>
<dt>'''gnutar'''</dt><dd>
The
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library can read most GNU-format tar archives.
It currently supports the most popular GNU extensions, including
modern long filename and linkname support, as well as atime and ctime data.
formats.
The
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library can write GNU tar format, including long filename
and linkname support, as well as atime and ctime data.
</dd><dt>'''pax'''</dt><dd>
The
-[[ManPageLibarchive3]]
+[[ManPageibarchive3]]
library can read and write POSIX-compliant pax interchange format
archives.
Pax interchange format archives are an extension of the older ustar
'''archive_entry'''
object.
When writing, libarchive supports use of the
-[[ManPageArchiveWriteSetOptions3]]
+[[ManPagerchiveriteetptions3]]
interface to specify which keywords should be included in the
output.
If libarchive was compiled with access to suitable
Externally, libarchive exposes most operations through an
opaque, object-style interface.
The
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
objects store information about a single filesystem object.
The rest of the library provides facilities to write
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
objects to archive files,
read them from archive files,
and write them to disk.
(There are plans to add a facility to read
-[[ManPageArchiveEntry3]]
+[[ManPagerchiventry3]]
objects from disk as well.)
The read and write APIs each have four layers: a public API
code to select and write entries, regardless of the target.
== READ ARCHITECTURE ==
From the outside, clients use the
-[[ManPageArchiveRead3]]
+[[ManPagerchiveead3]]
API to manipulate an
'''archive'''
object to read entries and bodies from an archive stream.
The lowest layer is the I/O layer.
This layer can be overridden by clients, but most clients use
the packaged I/O callbacks provided, for example, by
-[[ManPageArchiveReadOpenMemory3]],
+[[ManPagerchiveeadpenemory3]],
and
-[[ManPageArchiveReadOpenFd3]].
+[[ManPagerchiveeadpend3]].
The compression layer calls the I/O layer to
read bytes and decompresses them for the format layer.
The format layer unpacks a stream of uncompressed bytes and
most ZIP archives, though it cannot always extract as much information
as a dedicated ZIP program.
== SEE ALSO ==
-[[ManPageArchiveEntry3]],
-[[ManPageArchiveRead3]],
-[[ManPageArchiveWrite3]],
-[[ManPageArchiveWriteDisk3]]
-[[ManPageLibarchive3]],
+[[ManPagerchiventry3]],
+[[ManPagerchiveead3]],
+[[ManPagerchiverite3]],
+[[ManPagerchiveriteisk3]],
+[[ManPageibarchive3]]
== HISTORY ==
The
'''libarchive'''
.B char
file types.
The value must be one of the following forms:
-
<dl>
<dt>''format'',''major'',''minor''Bo,''subunit'' Bc</dt><dd>
A device with
.B solaris ,
.B sunos ,
.B svr3 ,
-.B svr4 ,
-and
+.B svr4 ,
+and
.B ultrix .
See
</dd><dt>'''uname'''</dt><dd>
The file owner as a symbolic name.
</dd></dl>
-
== SEE ALSO ==
[[cksum(1)|http://www.freebsd.org/cgi/man.cgi?query=cksum&sektion=1]],
[[find(1)|http://www.freebsd.org/cgi/man.cgi?query=find&sektion=1]],
[[mtree(8)|http://www.freebsd.org/cgi/man.cgi?query=mtree&sektion=8]]
-== BUGS ==
== HISTORY ==
The
'''mtree'''
Vendor-specific attributes used by Joerg Schilling's
'''star'''
implementation.
-</dd><dt>'''SCHILY.acl.access''', '''SCHILY.acl.default,''' '''SCHILY.acl.ace'''</dt><dd>
+</dd><dt>'''SCHILY.acl.access''', '''SCHILY.acl.default''', '''SCHILY.acl.ace'''</dt><dd>
Stores the access, default and NFSv4 ACLs as textual strings in a format
that is an extension of the format specified by POSIX.1e draft 17.
In particular, each user or group access specification can include
</dd><dt>'''SCHILY.realsize'''</dt><dd>
The full size of the file on disk.
XXX explain? XXX
-</dd><dt>'''SCHILY.dev,''' '''SCHILY.ino''', '''SCHILY.nlinks'''</dt><dd>
+</dd><dt>'''SCHILY.dev''', '''SCHILY.ino''', '''SCHILY.nlinks'''</dt><dd>
The device number, inode number, and link count for the entry.
In particular, note that a pax interchange format archive using Joerg
Schilling's
"ctime"
attribute, which refers to the time when the file
metadata was last changed.)
-</dd><dt>'''LIBARCHIVE.xattr.'''''namespace''.''key''</dt><dd>
+</dd><dt>'''LIBARCHIVE.xattr'''.''namespace''.''key''</dt><dd>
Libarchive stores POSIX.1e-style extended attributes using
keys of this form.
The
</dd><dt>'''M'''</dt><dd>
GNU tar multivolume marker, indicating the file is a continuation of a file from the previous volume.
</dd><dt>'''N'''</dt><dd>
-GNU tar long filename support. Deprecated.
+GNU tar long filename support.
+Deprecated.
</dd><dt>'''S'''</dt><dd>
GNU tar sparse regular file.
</dd><dt>'''V'''</dt><dd>
}
archive_read_close(a);
archive_read_free(a);
+
+ archive_write_close(ext);
+ archive_write_free(ext);
exit(0);
}
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3004000
+#define ARCHIVE_VERSION_NUMBER 3004001
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
*/
#if defined(__BORLANDC__) && __BORLANDC__ >= 0x560
# include <stdint.h>
-#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__) && !defined(_SCO_DS) && !defined(__osf__)
+#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__) && !defined(_SCO_DS) && !defined(__osf__) && !defined(__CLANG_INTTYPES_H)
# include <inttypes.h>
#endif
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.4.0"
+#define ARCHIVE_VERSION_ONLY_STRING "3.4.1"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
.Nm archive_entry_clear ,
.Nm archive_entry_clone ,
.Nm archive_entry_free ,
-.Nm archive_entry_new ,
+.Nm archive_entry_new
.Nd functions for managing archive entry descriptions
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
Similarly, if you store a wide string and then store a
narrow string for the same data, the previously-set wide string will
be discarded in favor of the new data.
-.Pp
.\" .Sh EXAMPLE
.\" .Sh RETURN VALUES
.\" .Sh ERRORS
.Xr archive_entry_acl 3 ,
.Xr archive_entry_paths 3 ,
.Xr archive_entry_perms 3 ,
-.Xr archive_entry_time 3
-.Xr libarchive 3 ,
+.Xr archive_entry_time 3 ,
+.Xr libarchive 3
.Sh HISTORY
The
.Nm libarchive
#define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */
-#define ARCHIVE_VERSION_NUMBER 3004000
+#define ARCHIVE_VERSION_NUMBER 3004001
/*
* Note: archive_entry.h is for use outside of libarchive; the
__LA_DECL int archive_entry_acl_next(struct archive_entry *, int /* want_type */,
int * /* type */, int * /* permset */, int * /* tag */,
int * /* qual */, const char ** /* name */);
-__LA_DECL int archive_entry_acl_next_w(struct archive_entry *, int /* want_type */,
- int * /* type */, int * /* permset */, int * /* tag */,
- int * /* qual */, const wchar_t ** /* name */);
/*
* Construct a text-format ACL. The flags argument is a bitmask that
.Nm archive_entry_acl_from_text ,
.Nm archive_entry_acl_from_text_w ,
.Nm archive_entry_acl_next ,
-.Nm archive_entry_acl_next_w ,
.Nm archive_entry_acl_reset ,
.Nm archive_entry_acl_to_text ,
.Nm archive_entry_acl_to_text_w ,
.Fa "const char **ret_name"
.Fc
.Ft int
-.Fo archive_entry_acl_next_w
-.Fa "struct archive_entry *a"
-.Fa "int type"
-.Fa "int *ret_type"
-.Fa "int *ret_permset"
-.Fa "int *ret_tag"
-.Fa "int *ret_qual"
-.Fa "const wchar_t **ret_name"
-.Fc
-.Ft int
.Fn archive_entry_acl_reset "struct archive_entry *a" "int type"
.Ft char *
.Fo archive_entry_acl_to_text
.Sh DESCRIPTION
The
.Dq Access Control Lists (ACLs)
-extend the standard Unix perssion model.
+extend the standard Unix permission model.
The ACL interface of
.Nm libarchive
-supports both POSIX.1e and NFSv4 style ACLs. Use of ACLs is restricted by
+supports both POSIX.1e and NFSv4 style ACLs.
+Use of ACLs is restricted by
various levels of ACL support in operating systems, file systems and archive
formats.
.Ss POSIX.1e Access Control Lists
A POSIX.1e ACL consists of a number of independent entries.
-Each entry specifies the permission set as bitmask of basic permissions.
+Each entry specifies the permission set as a bitmask of basic permissions.
Valid permissions in the
.Fa permset
are:
.It Dv ARCHIVE_ENTRY_ACL_USER_OBJ
The owner of the file.
.It Dv ARCHIVE_ENTRY_ACL_GROUP
-The group specied by the name field.
+The group specified by the name field.
.It Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
-The group who owns the file.
+The group which owns the file.
.It Dv ARCHIVE_ENTRY_ACL_MASK
The maximum permissions to be obtained via group permissions.
.It Dv ARCHIVE_ENTRY_ACL_OTHER
-Any principal who is not file owner or a member of the owning group.
+Any principal who is not the file owner or a member of the owning group.
.El
.Pp
The principals
are equivalent to user, group and other in the classic Unix permission
model and specify non-extended ACL entries.
.Pp
-All files with have an access ACL
+All files have an access ACL
.Pq Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS .
This specifies the permissions required for access to the file itself.
Directories have an additional ACL
.Pq Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT ,
-which controls the initial access ACL for newly created directory entries.
+which controls the initial access ACL for newly-created directory entries.
.Ss NFSv4 Access Control Lists
A NFSv4 ACL consists of multiple individual entries called Access Control
Entries (ACEs).
.It Dv ARCHIVE_ENTRY_ACL_USER_OBJ
The owner of the file.
.It Dv ARCHIVE_ENTRY_ACL_GROUP
-The group specied by the name field.
+The group specified by the name field.
.It Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
-The group who owns the file.
+The group which owns the file.
.It Dv ARCHIVE_ENTRY_ACL_EVERYONE
-Any principal who is not file owner or a member of the owning group.
+Any principal who is not the file owner or a member of the owning group.
.El
.Pp
Entries with the
.Pp
NFSv4 ACE permissions and flags are stored in the same
.Fa permset
-bitfield. Some permissions share the same constant and permission character but
-have different effect on directories than on files. The following ACE
-permissions are supported:
+bitfield.
+Some permissions share the same constant and permission character
+but have different effect on directories than on files.
+The following ACE permissions are supported:
.Bl -tag -offset indent -compact -width ARCHIV
.It Dv ARCHIVE_ENTRY_ACL_READ_DATA ( Sy r )
Read data (file).
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY ( Sy i )
Only inherit, do not apply the permission on the directory itself.
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT ( Sy n )
-Do not propagate inherit flags. Only first-level entries inherit ACLs.
+Do not propagate inherit flags.
+Only first-level entries inherit ACLs.
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS ( Sy S )
Trigger alarm or audit on successful access.
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS ( Sy F )
.Fn archive_entry_acl_add_entry_w
add a single ACL entry.
For the access ACL and non-extended principals, the classic Unix permissions
-are updated. An archive entry cannot contain both POSIX.1e and NFSv4 ACL
-entries.
+are updated.
+An archive entry cannot contain both POSIX.1e and NFSv4 ACL entries.
.Pp
.Fn archive_entry_acl_clear
removes all ACL entries and resets the enumeration pointer.
.It Dv ARCHIVE_ENTRY_ACL_TYPE_AUDIT
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALARM
.El
-for NFSv4 ACLs. For POSIX.1e ACLs if
+for NFSv4 ACLs.
+For POSIX.1e ACLs if
.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
is included and at least one extended ACL entry is found,
the three non-extended ACLs are added.
.Pq or merge with existing
ACL entries from
.Pq wide
-text. The argument
+text.
+The argument
.Fa type
may take one of the following values:
.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_DEFAULT"
.El
Supports all formats that can be created with
.Fn archive_entry_acl_to_text
-or respective
+or respectively
.Fn archive_entry_acl_to_text_w .
-Existing ACL entries are preserved. To get a clean new ACL from text
+Existing ACL entries are preserved.
+To get a clean new ACL from text
.Fn archive_entry_acl_clear
-must be called first. Entries prefixed with
+must be called first.
+Entries prefixed with
.Dq default:
are treated as
.Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
are skipped.
.Pp
.Fn archive_entry_acl_next
-and
-.Fn archive_entry_acl_next_w
return the next entry of the ACL list.
This functions may only be called after
.Fn archive_entry_acl_reset
.Pp
.Fn archive_entry_acl_reset
prepare reading the list of ACL entries with
-.Fn archive_entry_acl_next
-or
-.Fn archive_entry_acl_next_w .
-The function returns either 0, if no non-extended ACLs are found.
+.Fn archive_entry_acl_next .
+The function returns 0 if no non-extended ACLs are found.
In this case, the access permissions should be obtained by
.Xr archive_entry_mode 3
or set using
.Fn archive_entry_acl_to_text_w
convert the ACL entries for the given type into a
.Pq wide
-string of ACL entries separated by newline. If the pointer
+string of ACL entries separated by newline.
+If the pointer
.Fa len_p
is not NULL, then the function shall return the length of the string
.Pq not including the NULL terminator
.Dq default: .
.Pp
.Fn archive_entry_acl_types
-get ACL entry types contained in an archive entry's ACL. As POSIX.1e and NFSv4
+get ACL entry types contained in an archive entry's ACL.
+As POSIX.1e and NFSv4
ACL entries cannot be mixed, this function is a very efficient way to detect if
an ACL already contains POSIX.1e or NFSv4 ACL entries.
.Sh RETURN VALUES
if one or more entries were invalid or non-parseable.
.Pp
.Fn archive_entry_acl_next
-and
-.Fn archive_entry_acl_next_w
-return
+returns
.Dv ARCHIVE_OK
on success,
.Dv ARCHIVE_EOF
.Sh NAME
.Nm archive_entry_symlink_type ,
.Nm archive_entry_set_symlink_type
-.Nd miscellaneous functions for manipulating properties of archive_entry.
+.Nd miscellaneous functions for manipulating properties of archive_entry
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.Fn archive_entry_symlink_type
returns and the function
.Fn archive_entry_set_symlink_type
-sets the type of the symbolic link stored in an archive entry. These functions
+sets the type of the symbolic link stored in an archive entry.
+These functions
have special meaning on operating systems that support multiple symbolic link
types (e.g. Microsoft Windows).
.Pp
.Fn XXX_w .
.It UTF-8
Unicode strings encoded as UTF-8.
-This are convience functions to update both the multibyte and wide
+These are convenience functions to update both the multibyte and wide
character strings at the same time.
.El
.Pp
archive directly.
.Pp
For that reason, it is only available as multibyte string.
-The link path is a convience function for conditionally setting
+The link path is a convenience function for conditionally setting
hardlink or symlink destination.
It doesn't have a corresponding get accessor function.
.Pp
.Fn archive_entry_set_XXX
-is an alias for
+is an alias for
.Fn archive_entry_copy_XXX .
.Sh SEE ALSO
-.Xr archive_entry 3
-.Xr libarchive 3 ,
+.Xr archive_entry 3 ,
+.Xr libarchive 3
and
.Fn archive_entry_set_perm
store the given user id, group id and permission in the entry.
-The permission is also set as side effect of calling
+The permission is also set as a side effect of calling
.Fn archive_entry_set_mode .
.Pp
.Fn archive_entry_strmode
.Fn XXX_w .
.It UTF-8
Unicode strings encoded as UTF-8.
-This are convience functions to update both the multibyte and wide
+These are convenience functions to update both the multibyte and wide
character strings at the same time.
.El
.Pp
.Fn archive_entry_set_XXX
-is an alias for
+is an alias for
.Fn archive_entry_copy_XXX .
.Ss File Flags
File flags are transparently converted between a bitmap
.Fn archive_entry_copy_fflags_text
and
.Fn archive_entry_copy_fflags_text_w
-functions parse the provided text and sets the internal bitmap values.
+functions parse the provided text and set the internal bitmap values.
This is a platform-specific operation; names that are not meaningful
on the current platform will be ignored.
The function returns a pointer to the start of the first name that was not
.Xr archive_entry 3 ,
.Xr archive_entry_acl 3 ,
.Xr archive_read_disk 3 ,
-.Xr archive_write_disk 3
-.Xr libarchive 3 ,
+.Xr archive_write_disk 3 ,
+.Xr libarchive 3
.Sh BUGS
The platform types
.Vt uid_t
.Nm archive_entry_rdevmajor ,
.Nm archive_entry_set_rdevmajor ,
.Nm archive_entry_rdevminor ,
-.Nm archive_entry_set_rdevminor ,
+.Nm archive_entry_set_rdevminor
.Nd accessor functions for manipulating archive entry descriptions
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
Some archive formats use the combined form, while other formats use
the split form.
.Sh SEE ALSO
+.Xr stat 2 ,
.Xr archive_entry_acl 3 ,
.Xr archive_entry_perms 3 ,
.Xr archive_entry_time 3 ,
-.Xr libarchive 3 ,
-.Xr stat 2
+.Xr libarchive 3
.Nm archive_entry_mtime_nsec ,
.Nm archive_entry_mtime_is_set ,
.Nm archive_entry_set_mtime ,
-.Nm archive_entry_unset_mtime ,
+.Nm archive_entry_unset_mtime
.Nd functions for manipulating times in archive entry descriptions
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
.Fn XXX_is_set .
Unset time fields have a second and nanosecond field of 0.
.Sh SEE ALSO
-.Xr archive_entry 3
-.Xr libarchive 3 ,
+.Xr archive_entry 3 ,
+.Xr libarchive 3
.Sh HISTORY
The
.Nm libarchive
static int
__hmac_sha1_init(archive_hmac_sha1_ctx *ctx, const uint8_t *key, size_t key_len)
{
+#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
BCRYPT_ALG_HANDLE hAlg;
BCRYPT_HASH_HANDLE hHash;
DWORD hash_len;
.Fn archive_read_free
to release all resources, including all memory allocated by the library.
.\"
-.Sh EXAMPLE
+.Sh EXAMPLES
The following illustrates basic usage of the library.
In this example,
the callback functions are simply wrappers around the standard
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
-.Xr archive_read_new 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_extract 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_format 3 ,
.Xr archive_read_header 3 ,
+.Xr archive_read_new 3 ,
.Xr archive_read_open 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
.Sh HISTORY
The
dest = (char *)buff;
while (s > 0) {
- if (a->read_data_remaining == 0) {
+ if (a->read_data_offset == a->read_data_output_offset &&
+ a->read_data_remaining == 0) {
read_buf = a->read_data_block;
a->read_data_is_posix_read = 1;
a->read_data_requested = s;
will be returned.
Otherwise,
.Cm ARCHIVE_OK
-will be returned.
+will be returned.
.It Fn archive_read_set_passphrase_callback
-Register callback function that will be invoked to get a passphrase
-for decrption after trying all passphrases registered by the
+Register a callback function that will be invoked to get a passphrase
+for decryption after trying all the passphrases registered by the
.Fn archive_read_add_passphrase
function failed.
.El
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
-.Xr archive_read_set_options 3
+.Xr archive_read_set_options 3 ,
+.Xr libarchive 3
.Dt ARCHIVE_READ_DATA 3
.Os
.Sh NAME
-.Nm archive_read_data
+.Nm archive_read_data ,
.Nm archive_read_data_block ,
.Nm archive_read_data_skip ,
.Nm archive_read_data_into_fd
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
.Xr archive_read_extract 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_open 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
.Bl -tag -compact -width "indent"
.It Cm ARCHIVE_READDISK_HONOR_NODUMP
Skip files and directories with the nodump file attribute (file flag) set.
-By default, the nodump file atrribute is ignored.
+By default, the nodump file attribute is ignored.
.It Cm ARCHIVE_READDISK_MAC_COPYFILE
-Mac OS X specific. Read metadata (ACLs and extended attributes) with
+Mac OS X specific.
+Read metadata (ACLs and extended attributes) with
.Xr copyfile 3 .
By default, metadata is read using
.Xr copyfile 3 .
for more information on file attributes.
.It Cm ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS
Do not traverse mount points.
-By defaut, moint points are traversed.
+By default, mount points are traversed.
.It Cm ARCHIVE_READDISK_NO_XATTR
Do not read extended file attributes (xattrs).
By default, extended file attributes are read from disk.
(For example, directory traversal libraries often provide this information.)
.Pp
Where necessary, user and group ids are converted to user and group names
-using the currently registered lookup functions above.
+using the currently-registered lookup functions above.
This affects the file ownership fields and ACL values in the
.Tn struct archive_entry
object.
object and the overall design of the library can be found in the
.Xr libarchive 3
overview.
-.Sh EXAMPLE
+.Sh EXAMPLES
The following illustrates basic usage of the library by
showing how to use it to copy an item on disk into an archive.
.Bd -literal -offset indent
functions.
.\"
.Sh SEE ALSO
+.Xr tar 1 ,
.Xr archive_read 3 ,
.Xr archive_util 3 ,
.Xr archive_write 3 ,
.Xr archive_write_disk 3 ,
-.Xr tar 1 ,
.Xr libarchive 3
.Sh HISTORY
The
#if defined(HAVE_READLINK) || defined(HAVE_READLINKAT)
if (S_ISLNK(st->st_mode)) {
- size_t linkbuffer_len = st->st_size + 1;
+ size_t linkbuffer_len = st->st_size;
char *linkbuffer;
int lnklen;
- linkbuffer = malloc(linkbuffer_len);
+ linkbuffer = malloc(linkbuffer_len + 1);
if (linkbuffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Couldn't read link data");
free(linkbuffer);
return (ARCHIVE_FAILED);
}
- linkbuffer[lnklen] = 0;
+ linkbuffer[lnklen] = '\0';
archive_entry_set_symlink(entry, linkbuffer);
free(linkbuffer);
}
struct tree *t = a->tree;
int r;
ssize_t bytes;
+ int64_t sparse_bytes;
size_t buffbytes;
int empty_sparse_region = 0;
a->archive.state = ARCHIVE_STATE_FATAL;
goto abort_read_data;
}
- bytes = t->current_sparse->offset - t->entry_total;
- t->entry_remaining_bytes -= bytes;
- t->entry_total += bytes;
+ sparse_bytes = t->current_sparse->offset - t->entry_total;
+ t->entry_remaining_bytes -= sparse_bytes;
+ t->entry_total += sparse_bytes;
}
/*
t->entry_fd = -1;
}
+ archive_entry_clear(entry);
+
for (;;) {
r = next_entry(a, t, entry);
if (t->entry_fd >= 0) {
#elif defined(O_SEARCH)
/* SunOS */
const int o_flag = O_SEARCH;
-#elif defined(O_EXEC)
+#elif defined(__FreeBSD__) && defined(O_EXEC)
/* FreeBSD */
const int o_flag = O_EXEC;
#endif
t->stack->flags = needsFirstVisit;
t->maxOpenCount = t->openCount = 1;
t->initial_dir_fd = open(".", O_RDONLY | O_CLOEXEC);
-#if defined(O_PATH) || defined(O_SEARCH) || defined(O_EXEC)
+#if defined(O_PATH) || defined(O_SEARCH) || \
+ (defined(__FreeBSD__) && defined(O_EXEC))
/*
* Most likely reason to fail opening "." is that it's not readable,
* so try again for execute. The consequences of not opening this are
t->entry_fh = INVALID_HANDLE_VALUE;
}
+ archive_entry_clear(entry);
+
while ((r = next_entry(a, t, entry)) == ARCHIVE_RETRY)
archive_entry_clear(entry);
functions.
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_open 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
functions.
.\"
.Sh SEE ALSO
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_format 3 ,
-.Xr archive_read_format 3
+.Xr archive_read_format 3 ,
+.Xr libarchive 3
.Fn archive_read_support_format_tar
enables support for a variety of standard tar formats, old-style tar,
ustar, pax interchange format, and many common variants.
-.It Fn archive_read_support_format_all
+.It Fn archive_read_support_format_all
Enables support for all available formats except the
.Dq raw
format (see below).
an empty file based purely on contents.
So empty files are treated by libarchive as a distinct
format.
-.It Fn archive_read_support_format_raw
+.It Fn archive_read_support_format_raw
The
.Dq raw
format handler allows libarchive to be used to read arbitrary data.
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
.Sh BUGS
Many traditional archiver programs treat
functions.
.\"
.Sh SEE ALSO
-.Xr libarchive 3 ,
-.Xr archive_read_new 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_format 3 ,
+.Xr archive_read_new 3 ,
.Xr archive_read_open 3 ,
.Xr archive_read_set_options 3 ,
-.Xr archive_util 3
+.Xr archive_util 3 ,
+.Xr libarchive 3
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_extract 3 ,
.Xr archive_read_open 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_format 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
.Fn archive_set_error
to register an error code and message and
return
-.Cm ARCHIVE_FATAL.
+.Cm ARCHIVE_FATAL .
.\" .Sh EXAMPLE
.\"
.Sh RETURN VALUES
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
.Xr archive_read_data 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_format 3 ,
.Xr archive_read_set_options 3 ,
.Xr archive_util 3 ,
+.Xr libarchive 3 ,
.Xr tar 5
to disable.
.It Cm read_concatenated_archives
Ignore zeroed blocks in the archive, which occurs when multiple tar archives
-have been concatenated together. Without this option, only the contents of
+have been concatenated together.
+Without this option, only the contents of
the first concatenated archive would be read.
.El
.El
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
+.Xr archive_read 3 ,
.Xr archive_write_set_options 3 ,
-.Xr archive_read 3
+.Xr libarchive 3
*/
static ssize_t
peek_at_header(struct archive_read_filter *filter, int *pbits,
- struct private_data *state)
+#ifdef HAVE_ZLIB_H
+ struct private_data *state
+#else
+ void *state
+#endif
+ )
{
const unsigned char *p;
ssize_t avail, len;
int bits = 0;
int header_flags;
+#ifndef HAVE_ZLIB_H
+ (void)state; /* UNUSED */
+#endif
/* Start by looking at the first ten bytes of the header, which
* is all fixed layout. */
bits += 3;
header_flags = p[3];
/* Bytes 4-7 are mod time in little endian. */
+#ifdef HAVE_ZLIB_H
if (state)
state->mtime = archive_le32dec(p + 4);
+#endif
/* Byte 8 is deflate flags. */
/* XXXX TODO: return deflate flags back to consume_header for use
in initializing the decompressor. */
/* Null-terminated optional filename. */
if (header_flags & 8) {
+#ifdef HAVE_ZLIB_H
ssize_t file_start = len;
+#endif
do {
++len;
if (avail < len)
return (0);
} while (p[len - 1] != 0);
+#ifdef HAVE_ZLIB_H
if (state) {
/* Reset the name in case of repeat header reads. */
free(state->name);
state->name = strdup((const char *)&p[file_start]);
}
+#endif
}
/* Null-terminated optional comment. */
return (0);
}
-static int
-gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry)
-{
- struct private_data *state;
-
- state = (struct private_data *)self->data;
-
- /* A mtime of 0 is considered invalid/missing. */
- if (state->mtime != 0)
- archive_entry_set_mtime(entry, state->mtime, 0);
-
- /* If the name is available, extract it. */
- if (state->name)
- archive_entry_set_pathname(entry, state->name);
-
- return (ARCHIVE_OK);
-}
-
#ifndef HAVE_ZLIB_H
/*
#else
+static int
+gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry)
+{
+ struct private_data *state;
+
+ state = (struct private_data *)self->data;
+
+ /* A mtime of 0 is considered invalid/missing. */
+ if (state->mtime != 0)
+ archive_entry_set_mtime(entry, state->mtime, 0);
+
+ /* If the name is available, extract it. */
+ if (state->name)
+ archive_entry_set_pathname(entry, state->name);
+
+ return (ARCHIVE_OK);
+}
+
/*
* Initialize the filter object.
*/
self->read = gzip_filter_read;
self->skip = NULL; /* not supported */
self->close = gzip_filter_close;
+#ifdef HAVE_ZLIB_H
self->read_header = gzip_read_header;
+#endif
state->in_stream = 0; /* We're not actually within a stream yet. */
__archive_read_filter_consume(self->upstream, descriptor_bytes);
- /* Make sure we have an enough buffer for uncompressed data. */
+ /* Make sure we have a large enough buffer for uncompressed data. */
if (lz4_allocate_out_block(self) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
if (state->flags.stream_checksum)
if (read_buf == NULL)
goto truncated_error;
- /* Optional process, checking a block sum. */
+ /* Optional processing, checking a block sum. */
if (checksum_size) {
unsigned int chsum = __archive_xxhash.XXH32(
read_buf + 4, (int)compressed_size, 0);
if (ret == 0 && *p == NULL)
state->stage = SELECT_STREAM;
- /* Optional process, checking a stream sum. */
+ /* Optional processing, checking a stream sum. */
if (state->flags.stream_checksum) {
if (state->stage == SELECT_STREAM) {
unsigned int checksum;
if (checksum != checksum_stream) {
archive_set_error(&self->archive->archive,
ARCHIVE_ERRNO_MISC,
- "lz4 stream cheksum error");
+ "lz4 stream checksum error");
return (ARCHIVE_FATAL);
}
} else if (ret > 0)
lz4_filter_read_legacy_stream(struct archive_read_filter *self, const void **p)
{
struct private_data *state = (struct private_data *)self->data;
- int compressed;
+ uint32_t compressed;
const char *read_buf;
ssize_t ret;
return (0);
}
- if (*p != kSize)
+ if (*p != kCRC)
return (-1);
if (read_Digests(a, &(pi->digest), (size_t)pi->numPackStreams) < 0)
struct archive_string gname;
uint16_t header_crc;
uint16_t crc;
- struct archive_string_conv *sconv;
+ /* dirname and filename could be in different codepages */
+ struct archive_string_conv *sconv_dir;
+ struct archive_string_conv *sconv_fname;
struct archive_string_conv *opt_sconv;
struct archive_string dirname;
static time_t lha_win_time(uint64_t, long *);
static unsigned char lha_calcsum(unsigned char, const void *,
int, size_t);
-static int lha_parse_linkname(struct archive_string *,
- struct archive_string *);
+static int lha_parse_linkname(struct archive_wstring *,
+ struct archive_wstring *);
static int lha_read_data_none(struct archive_read *, const void **,
size_t *, int64_t *);
static int lha_read_data_lzh(struct archive_read *, const void **,
archive_read_format_lha_read_header(struct archive_read *a,
struct archive_entry *entry)
{
- struct archive_string linkname;
- struct archive_string pathname;
+ struct archive_wstring linkname;
+ struct archive_wstring pathname;
struct lha *lha;
const unsigned char *p;
const char *signature;
int err;
-
+ struct archive_mstring conv_buffer;
+ const wchar_t *conv_buffer_p;
+
lha_crc16_init();
a->archive.archive_format = ARCHIVE_FORMAT_LHA;
archive_string_empty(&lha->dirname);
archive_string_empty(&lha->filename);
lha->dos_attr = 0;
- if (lha->opt_sconv != NULL)
- lha->sconv = lha->opt_sconv;
- else
- lha->sconv = NULL;
+ if (lha->opt_sconv != NULL) {
+ lha->sconv_dir = lha->opt_sconv;
+ lha->sconv_fname = lha->opt_sconv;
+ } else {
+ lha->sconv_dir = NULL;
+ lha->sconv_fname = NULL;
+ }
switch (p[H_LEVEL_OFFSET]) {
case 0:
return (truncated_error(a));
/*
- * Make a pathname from a dirname and a filename.
- */
- archive_string_concat(&lha->dirname, &lha->filename);
+ * Make a pathname from a dirname and a filename, after converting to Unicode.
+ * This is because codepages might differ between dirname and filename.
+ */
archive_string_init(&pathname);
archive_string_init(&linkname);
- archive_string_copy(&pathname, &lha->dirname);
+ archive_string_init(&conv_buffer.aes_mbs);
+ archive_string_init(&conv_buffer.aes_mbs_in_locale);
+ archive_string_init(&conv_buffer.aes_utf8);
+ archive_string_init(&conv_buffer.aes_wcs);
+ if (0 != archive_mstring_copy_mbs_len_l(&conv_buffer, lha->dirname.s, lha->dirname.length, lha->sconv_dir)) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Pathname cannot be converted "
+ "from %s to Unicode.",
+ archive_string_conversion_charset_name(lha->sconv_dir));
+ err = ARCHIVE_FATAL;
+ } else if (0 != archive_mstring_get_wcs(&a->archive, &conv_buffer, &conv_buffer_p))
+ err = ARCHIVE_FATAL;
+ if (err == ARCHIVE_FATAL) {
+ archive_mstring_clean(&conv_buffer);
+ archive_wstring_free(&pathname);
+ archive_wstring_free(&linkname);
+ return (err);
+ }
+ archive_wstring_copy(&pathname, &conv_buffer.aes_wcs);
+
+ archive_string_empty(&conv_buffer.aes_mbs);
+ archive_string_empty(&conv_buffer.aes_mbs_in_locale);
+ archive_string_empty(&conv_buffer.aes_utf8);
+ archive_wstring_empty(&conv_buffer.aes_wcs);
+ if (0 != archive_mstring_copy_mbs_len_l(&conv_buffer, lha->filename.s, lha->filename.length, lha->sconv_fname)) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Pathname cannot be converted "
+ "from %s to Unicode.",
+ archive_string_conversion_charset_name(lha->sconv_fname));
+ err = ARCHIVE_FATAL;
+ }
+ else if (0 != archive_mstring_get_wcs(&a->archive, &conv_buffer, &conv_buffer_p))
+ err = ARCHIVE_FATAL;
+ if (err == ARCHIVE_FATAL) {
+ archive_mstring_clean(&conv_buffer);
+ archive_wstring_free(&pathname);
+ archive_wstring_free(&linkname);
+ return (err);
+ }
+ archive_wstring_concat(&pathname, &conv_buffer.aes_wcs);
+ archive_mstring_clean(&conv_buffer);
if ((lha->mode & AE_IFMT) == AE_IFLNK) {
/*
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Unknown symlink-name");
- archive_string_free(&pathname);
- archive_string_free(&linkname);
+ archive_wstring_free(&pathname);
+ archive_wstring_free(&linkname);
return (ARCHIVE_FAILED);
}
} else {
/*
* Set basic file parameters.
*/
- if (archive_entry_copy_pathname_l(entry, pathname.s,
- pathname.length, lha->sconv) != 0) {
- if (errno == ENOMEM) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for Pathname");
- return (ARCHIVE_FATAL);
- }
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Pathname cannot be converted "
- "from %s to current locale.",
- archive_string_conversion_charset_name(lha->sconv));
- err = ARCHIVE_WARN;
- }
- archive_string_free(&pathname);
+ archive_entry_copy_pathname_w(entry, pathname.s);
+ archive_wstring_free(&pathname);
if (archive_strlen(&linkname) > 0) {
- if (archive_entry_copy_symlink_l(entry, linkname.s,
- linkname.length, lha->sconv) != 0) {
- if (errno == ENOMEM) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for Linkname");
- return (ARCHIVE_FATAL);
- }
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Linkname cannot be converted "
- "from %s to current locale.",
- archive_string_conversion_charset_name(lha->sconv));
- err = ARCHIVE_WARN;
- }
+ archive_entry_copy_symlink_w(entry, linkname.s);
} else
archive_entry_set_symlink(entry, NULL);
- archive_string_free(&linkname);
+ archive_wstring_free(&linkname);
/*
* When a header level is 0, there is a possibility that
* a pathname and a symlink has '\' character, a directory
archive_strncpy(&lha->filename,
(const char *)extdheader, datasize);
break;
+ case EXT_UTF16_FILENAME:
+ if (datasize == 0) {
+ /* maybe directory header */
+ archive_string_empty(&lha->filename);
+ break;
+ } else if (datasize & 1) {
+ /* UTF-16 characters take always 2 or 4 bytes */
+ goto invalid;
+ }
+ if (extdheader[0] == '\0')
+ goto invalid;
+ archive_string_empty(&lha->filename);
+ archive_array_append(&lha->filename,
+ (const char *)extdheader, datasize);
+ /* Setup a string conversion for a filename. */
+ lha->sconv_fname = archive_string_conversion_from_charset(
+ &a->archive, "UTF-16LE", 1);
+ if (lha->sconv_fname == NULL)
+ return (ARCHIVE_FATAL);
+ break;
case EXT_DIRECTORY:
if (datasize == 0 || extdheader[0] == '\0')
/* no directory name data. exit this case. */
/* invalid directory data */
goto invalid;
break;
+ case EXT_UTF16_DIRECTORY:
+ /* UTF-16 characters take always 2 or 4 bytes */
+ if (datasize == 0 || (datasize & 1) || extdheader[0] == '\0')
+ /* no directory name data. exit this case. */
+ goto invalid;
+
+ archive_string_empty(&lha->dirname);
+ archive_array_append(&lha->dirname,
+ (const char *)extdheader, datasize);
+ lha->sconv_dir = archive_string_conversion_from_charset(
+ &a->archive, "UTF-16LE", 1);
+ if (lha->sconv_dir == NULL)
+ return (ARCHIVE_FATAL);
+ else {
+ /*
+ * Convert directory delimiter from 0xFF
+ * to '/' for local system.
+ */
+ /* UTF-16LE character */
+ uint16_t *utf16name = (uint16_t *)lha->dirname.s;
+ for (i = 0; i < lha->dirname.length / 2; i++) {
+ if (utf16name[i] == 0xFFFF)
+ utf16name[i] = L'/';
+ }
+ /* Is last character directory separator? */
+ if (utf16name[lha->dirname.length / 2 - 1] != L'/')
+ /* invalid directory data */
+ goto invalid;
+ }
+ break;
case EXT_DOS_ATTR:
if (datasize == 2)
lha->dos_attr = (unsigned char)
charset = cp.s;
break;
}
- lha->sconv =
+ lha->sconv_dir =
+ archive_string_conversion_from_charset(
+ &(a->archive), charset, 1);
+ lha->sconv_fname =
archive_string_conversion_from_charset(
&(a->archive), charset, 1);
archive_string_free(&cp);
- if (lha->sconv == NULL)
+ if (lha->sconv_dir == NULL)
+ return (ARCHIVE_FATAL);
+ if (lha->sconv_fname == NULL)
return (ARCHIVE_FATAL);
}
break;
}
break;
case EXT_TIMEZONE: /* Not supported */
- case EXT_UTF16_FILENAME: /* Not supported */
- case EXT_UTF16_DIRECTORY: /* Not supported */
+ break;
default:
break;
}
* then a archived pathname is 'xxx/bbb|aaa/bb/cc'
*/
static int
-lha_parse_linkname(struct archive_string *linkname,
- struct archive_string *pathname)
+lha_parse_linkname(struct archive_wstring *linkname,
+ struct archive_wstring *pathname)
{
- char * linkptr;
+ wchar_t * linkptr;
size_t symlen;
- linkptr = strchr(pathname->s, '|');
+ linkptr = wcschr(pathname->s, L'|');
if (linkptr != NULL) {
- symlen = strlen(linkptr + 1);
- archive_strncpy(linkname, linkptr+1, symlen);
+ symlen = wcslen(linkptr + 1);
+ archive_wstrncpy(linkname, linkptr+1, symlen);
*linkptr = 0;
- pathname->length = strlen(pathname->s);
+ pathname->length = wcslen(pathname->s);
return (1);
}
if (ret != ARCHIVE_OK && ret != ARCHIVE_WARN) {
__archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context);
rar->start_new_table = 1;
+ rar->ppmd_valid = 0;
}
break;
#if defined DEBUG
#define DEBUG_CODE if(1)
+#define LOG(...) do { printf("rar5: " __VA_ARGS__); puts(""); } while(0)
#else
#define DEBUG_CODE if(0)
#endif
/* Optional redir fields */
uint64_t redir_type;
uint64_t redir_flags;
+
+ ssize_t solid_window_size; /* Used in file format check. */
};
enum EXTRA {
for(i = 0; i < flt->block_length - 3; i += 4) {
uint8_t* b = &rar->cstate.window_buf[
(rar->cstate.solid_offset +
- flt->block_start + i) & rar->cstate.window_mask];
+ flt->block_start + i + 3) & rar->cstate.window_mask];
- if(b[3] == 0xEB) {
+ if(*b == 0xEB) {
/* 0xEB = ARM's BL (branch + link) instruction. */
offset = read_filter_data(rar,
(rar->cstate.solid_offset + flt->block_start + i) &
a->archive.archive_format_name = "RAR5";
}
+static void init_window_mask(struct rar5* rar) {
+ if (rar->cstate.window_size)
+ rar->cstate.window_mask = rar->cstate.window_size - 1;
+ else
+ rar->cstate.window_mask = 0;
+}
+
enum HEADER_FLAGS {
HFL_EXTRA_DATA = 0x0001,
HFL_DATA = 0x0002,
static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar,
ssize_t* extra_data_size)
{
- size_t hash_type;
+ size_t hash_type = 0;
size_t value_len;
if(!read_var_sized(a, &hash_type, &value_len))
struct archive_entry* e, struct rar5* rar, ssize_t* extra_data_size)
{
char unix_time = 0;
- size_t flags;
+ size_t flags = 0;
size_t value_len;
enum HTIME_FLAGS {
g_unpack_window_size << ((compression_info >> 10) & 15);
rar->cstate.method = c_method;
rar->cstate.version = c_version + 50;
+ rar->file.solid = (compression_info & SOLID) > 0;
+
+ /* Archives which declare solid files without initializing the window
+ * buffer first are invalid. */
+
+ if(rar->file.solid > 0 && rar->cstate.window_buf == NULL) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Declared solid file, but no window buffer "
+ "initialized yet.");
+ return ARCHIVE_FATAL;
+ }
/* Check if window_size is a sane value. Also, if the file is not
* declared as a directory, disallow window_size == 0. */
return ARCHIVE_FATAL;
}
- /* Values up to 64M should fit into ssize_t on every
- * architecture. */
- rar->cstate.window_size = (ssize_t) window_size;
+ if(rar->file.solid > 0) {
+ /* Re-check if current window size is the same as previous
+ * window size (for solid files only). */
+ if(rar->file.solid_window_size > 0 &&
+ rar->file.solid_window_size != (ssize_t) window_size)
+ {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Window size for this solid file doesn't match "
+ "the window size used in previous solid file. ");
+ return ARCHIVE_FATAL;
+ }
+ }
+
+ /* If we're currently switching volumes, ignore the new definition of
+ * window_size. */
+ if(rar->cstate.switch_multivolume == 0) {
+ /* Values up to 64M should fit into ssize_t on every
+ * architecture. */
+ rar->cstate.window_size = (ssize_t) window_size;
+ }
+
+ if(rar->file.solid > 0 && rar->file.solid_window_size == 0) {
+ /* Solid files have to have the same window_size across
+ whole archive. Remember the window_size parameter
+ for first solid file found. */
+ rar->file.solid_window_size = rar->cstate.window_size;
+ }
+
+ init_window_mask(rar);
- rar->file.solid = (compression_info & SOLID) > 0;
rar->file.service = 0;
if(!read_var_sized(a, &host_os, NULL))
static void init_unpack(struct rar5* rar) {
rar->file.calculated_crc32 = 0;
- if (rar->cstate.window_size)
- rar->cstate.window_mask = rar->cstate.window_size - 1;
- else
- rar->cstate.window_mask = 0;
+ init_window_mask(rar);
free(rar->cstate.window_buf);
free(rar->cstate.filtered_buf);
* - Values lower than 256 are just bytes. Those codes
* can be stored in the output buffer directly.
*
- * - Code 256 defines a new filter, which is later used to
+ * - Code 256 defines a new filter, which is later used to
* ransform the data block accordingly to the filter type.
* The data block needs to be fully uncompressed first.
*
/* Turn off "skip mode". */
rar->skip_mode--;
- if(ret < 0) {
+ if(ret < 0 || ret == ARCHIVE_EOF) {
/* Propagate any potential error conditions
* to the caller. */
return ret;
/* Some ZIP files may have trailing 0 bytes. Let's check they
* are all 0 and ignore them instead of returning an error.
*
- * This is not techincally correct, but some ZIP files look
+ * This is not technically correct, but some ZIP files look
* like this and other tools support those files - so let's
* also support them.
*/
/* Make sure that entries with a trailing '/' are marked as directories
* even if the External File Attributes contains bogus values. If this
- * is not a directory and there is no type, assume regularfile. */
+ * is not a directory and there is no type, assume a regular file. */
if ((zip_entry->mode & AE_IFMT) != AE_IFDIR) {
int has_slash;
}
if (zip_entry->flags & LA_FROM_CENTRAL_DIRECTORY) {
- /* If this came from the central dir, it's size info
+ /* If this came from the central dir, its size info
* is definitive, so ignore the length-at-end flag. */
zip_entry->zip_flags &= ~ZIP_LENGTH_AT_END;
/* If local header is missing a value, use the one from
"lzma data error (error %d)", (int) lz_ret);
return (ARCHIVE_FATAL);
+ /* This case is optional in lzma alone format. It can happen,
+ * but most of the files don't have it. (GitHub #1257) */
+ case LZMA_STREAM_END:
+ lzma_end(&zip->zipx_lzma_stream);
+ zip->zipx_lzma_valid = 0;
+ if((int64_t) zip->zipx_lzma_stream.total_in !=
+ zip->entry_bytes_remaining)
+ {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC,
+ "lzma alone premature end of stream");
+ return (ARCHIVE_FATAL);
+ }
+
+ zip->end_of_entry = 1;
+ break;
+
case LZMA_OK:
break;
#define wmemmove(a,b,i) (wchar_t *)memmove((a), (b), (i) * sizeof(wchar_t))
#endif
+#undef max
+#define max(a, b) ((a)>(b)?(a):(b))
+
struct archive_string_conv {
struct archive_string_conv *next;
char *from_charset;
if (from_cp == CP_C_LOCALE) {
/*
- * "C" locale special process.
+ * "C" locale special processing.
*/
wchar_t *ws;
const unsigned char *mp;
* No single byte will be more than one wide character,
* so this length estimate will always be big enough.
*/
- size_t wcs_length = len;
+ // size_t wcs_length = len;
size_t mbs_length = len;
const char *mbs = p;
wchar_t *wcs;
memset(&shift_state, 0, sizeof(shift_state));
#endif
- if (NULL == archive_wstring_ensure(dest, dest->length + wcs_length + 1))
+ /*
+ * As we decided to have wcs_length == mbs_length == len
+ * we can use len here instead of wcs_length
+ */
+ if (NULL == archive_wstring_ensure(dest, dest->length + len + 1))
return (-1);
wcs = dest->s + dest->length;
/*
* multi bytes.
*/
while (*mbs && mbs_length > 0) {
+ /*
+ * The buffer we allocated is always big enough.
+ * Keep this code path in a comment if we decide to choose
+ * smaller wcs_length in the future
+ */
+/*
if (wcs_length == 0) {
dest->length = wcs - dest->s;
dest->s[dest->length] = L'\0';
return (-1);
wcs = dest->s + dest->length;
}
+*/
#if HAVE_MBRTOWC
- r = mbrtowc(wcs, mbs, wcs_length, &shift_state);
+ r = mbrtowc(wcs, mbs, mbs_length, &shift_state);
#else
- r = mbtowc(wcs, mbs, wcs_length);
+ r = mbtowc(wcs, mbs, mbs_length);
#endif
if (r == (size_t)-1 || r == (size_t)-2) {
ret_val = -1;
- if (errno == EILSEQ) {
- ++mbs;
- --mbs_length;
- continue;
- } else
- break;
+ break;
}
if (r == 0 || r > mbs_length)
break;
wcs++;
- wcs_length--;
+ // wcs_length--;
mbs += r;
mbs_length -= r;
}
if (to_cp == CP_C_LOCALE) {
/*
- * "C" locale special process.
+ * "C" locale special processing.
*/
const wchar_t *wp = ws;
char *p;
as->s[as->length] = '\0';
/* Re-allocate buffer for MBS. */
if (archive_string_ensure(as,
- as->length + len * 2 + 1) == NULL)
+ as->length + max(len * 2,
+ (size_t)MB_CUR_MAX) + 1) == NULL)
return (-1);
p = as->s + as->length;
end = as->s + as->buffer_length - MB_CUR_MAX -1;
struct archive_string_conv *))
{
if (sc == NULL || sc->nconverter >= 2)
- __archive_errx(1, "Programing error");
+ __archive_errx(1, "Programming error");
sc->converter[sc->nconverter++] = converter;
}
as->length = p - as->s;
/* Re-allocate buffer for MBS. */
if (archive_string_ensure(as,
- as->length + len * 2 + 1) == NULL)
+ as->length + max(len * 2,
+ (size_t)MB_CUR_MAX) + 1) == NULL)
return (-1);
p = as->s + as->length;
end = as->s + as->buffer_length - MB_CUR_MAX -1;
Not generally used in client code.
.It Fn archive_compression
Synonym for
-.Fn archive_filter_code(a, 0) .
+.Fn archive_filter_code a 0 .
.It Fn archive_compression_name
Synonym for
-.Fn archive_filter_name(a, 0) .
+.Fn archive_filter_name a 0 .
.It Fn archive_copy_error
Copies error information from one archive to another.
.It Fn archive_errno
filter 1 is the uudecode filter,
and filter 2 is the pseudo-filter that wraps the archive read functions.
In this case, requesting
-.Fn archive_position(a, -1)
+.Fn archive_position a -1
would be a synonym for
-.Fn archive_position(a, 2)
+.Fn archive_position a 2
which would return the number of bytes currently read from the archive, while
-.Fn archive_position(a, 1)
+.Fn archive_position a 1
would return the number of bytes after uudecoding, and
-.Fn archive_position(a, 0)
+.Fn archive_position a 0
would return the number of bytes after decompression.
.It Fn archive_filter_name
Returns a textual name identifying the indicated filter.
.It Fn archive_position
Returns the number of bytes read from or written to the indicated filter.
In particular,
-.Fn archive_position(a, 0)
+.Fn archive_position a 0
returns the number of bytes read or written by the format handler, while
-.Fn archive_position(a, -1)
+.Fn archive_position a -1
returns the number of bytes read or written to the archive.
See
.Fn archive_filter_count
.Fn archive_write_free
function to release all resources.
.\"
-.Sh EXAMPLE
+.Sh EXAMPLES
The following sketch illustrates basic usage of the library.
In this example,
the callback functions are simply wrappers around the standard
if (archive_write_set_format_filter_by_ext(a, outname) != ARCHIVE_OK) {
archive_write_add_filter_gzip(a);
archive_write_set_format_ustar(a);
- }
+ }
archive_write_open(a, mydata, myopen, mywrite, myclose);
while (*filename) {
stat(*filename, &st);
.Ed
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
f = calloc(1, sizeof(*f));
f->archive = _a;
+ f->state = ARCHIVE_WRITE_FILTER_STATE_NEW;
if (a->filter_first == NULL)
a->filter_first = f;
else
const void *buff, size_t length)
{
int r;
+ /* Never write to non-open filters */
+ if (f->state != ARCHIVE_WRITE_FILTER_STATE_OPEN)
+ return(ARCHIVE_FATAL);
if (length == 0)
return(ARCHIVE_OK);
if (f->write == NULL)
}
/*
- * Open a filter.
+ * Recursive function for opening the filter chain
+ * Last filter is opened first
*/
-int
+static int
__archive_write_open_filter(struct archive_write_filter *f)
{
- if (f->open == NULL)
+ int ret;
+
+ ret = ARCHIVE_OK;
+ if (f->next_filter != NULL)
+ ret = __archive_write_open_filter(f->next_filter);
+ if (ret != ARCHIVE_OK)
+ return (ret);
+ if (f->state != ARCHIVE_WRITE_FILTER_STATE_NEW)
+ return (ARCHIVE_FATAL);
+ if (f->open == NULL) {
+ f->state = ARCHIVE_WRITE_FILTER_STATE_OPEN;
return (ARCHIVE_OK);
- return (f->open)(f);
+ }
+ ret = (f->open)(f);
+ if (ret == ARCHIVE_OK)
+ f->state = ARCHIVE_WRITE_FILTER_STATE_OPEN;
+ else
+ f->state = ARCHIVE_WRITE_FILTER_STATE_FATAL;
+ return (ret);
}
/*
- * Close a filter.
+ * Open all filters
*/
-int
-__archive_write_close_filter(struct archive_write_filter *f)
+static int
+__archive_write_filters_open(struct archive_write *a)
{
- if (f->close != NULL)
- return (f->close)(f);
- if (f->next_filter != NULL)
- return (__archive_write_close_filter(f->next_filter));
- return (ARCHIVE_OK);
+ return (__archive_write_open_filter(a->filter_first));
+}
+
+/*
+ * Close all filtes
+ */
+static int
+__archive_write_filters_close(struct archive_write *a)
+{
+ struct archive_write_filter *f;
+ int ret, ret1;
+ ret = ARCHIVE_OK;
+ for (f = a->filter_first; f != NULL; f = f->next_filter) {
+ /* Do not close filters that are not open */
+ if (f->state == ARCHIVE_WRITE_FILTER_STATE_OPEN) {
+ if (f->close != NULL) {
+ ret1 = (f->close)(f);
+ if (ret1 < ret)
+ ret = ret1;
+ if (ret1 == ARCHIVE_OK) {
+ f->state =
+ ARCHIVE_WRITE_FILTER_STATE_CLOSED;
+ } else {
+ f->state =
+ ARCHIVE_WRITE_FILTER_STATE_FATAL;
+ }
+ } else
+ f->state = ARCHIVE_WRITE_FILTER_STATE_CLOSED;
+ }
+ }
+ return (ret);
}
int
free(state->buffer);
free(state);
/* Clear the close handler myself not to be called again. */
- f->close = NULL;
+ f->state = ARCHIVE_WRITE_FILTER_STATE_CLOSED;
a->client_data = NULL;
/* Clear passphrase. */
if (a->passphrase != NULL) {
client_filter->write = archive_write_client_write;
client_filter->close = archive_write_client_close;
- ret = __archive_write_open_filter(a->filter_first);
+ ret = __archive_write_filters_open(a);
if (ret < ARCHIVE_WARN) {
- r1 = __archive_write_close_filter(a->filter_first);
+ r1 = __archive_write_filters_close(a);
+ __archive_write_filters_free(_a);
return (r1 < ret ? r1 : ret);
}
}
/* Finish the compression and close the stream. */
- r1 = __archive_write_close_filter(a->filter_first);
+ r1 = __archive_write_filters_close(a);
if (r1 < r)
r = r1;
{
struct private_b64encode *state = (struct private_b64encode *)f->data;
size_t bs = 65536, bpb;
- int ret;
-
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
/* Buffer size should be a multiple number of the of bytes
archive_filter_b64encode_close(struct archive_write_filter *f)
{
struct private_b64encode *state = (struct private_b64encode *)f->data;
- int ret, ret2;
/* Flush remaining bytes. */
if (state->hold_len != 0)
archive_string_sprintf(&state->encoded_buff, "====\n");
/* Write the last block */
archive_write_set_bytes_in_last_block(f->archive, 1);
- ret = __archive_write_filter(f->next_filter,
+ return __archive_write_filter(f->next_filter,
state->encoded_buff.s, archive_strlen(&state->encoded_buff));
- ret2 = __archive_write_close_filter(f->next_filter);
- if (ret > ret2)
- ret = ret2;
- return (ret);
}
static int
struct private_data *data = (struct private_data *)f->data;
int ret;
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != 0)
- return (ret);
-
if (data->compressed == NULL) {
size_t bs = 65536, bpb;
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
archive_compressor_bzip2_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int ret, r1;
+ int ret;
/* Finish compression cycle. */
ret = drive_compressor(f, data, 1);
"Failed to clean up compressor");
ret = ARCHIVE_FATAL;
}
-
- r1 = __archive_write_close_filter(f->next_filter);
- return (r1 < ret ? r1 : ret);
+ return ret;
}
static int
static int
archive_compressor_compress_open(struct archive_write_filter *f)
{
- int ret;
struct private_data *state;
size_t bs = 65536, bpb;
f->code = ARCHIVE_FILTER_COMPRESS;
f->name = "compress";
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
-
state = (struct private_data *)calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(f->archive, ENOMEM,
archive_compressor_compress_close(struct archive_write_filter *f)
{
struct private_data *state = (struct private_data *)f->data;
- int ret, ret2;
+ int ret;
ret = output_code(f, state->cur_code);
if (ret != ARCHIVE_OK)
- goto cleanup;
+ return ret;
ret = output_flush(f);
if (ret != ARCHIVE_OK)
- goto cleanup;
+ return ret;
/* Write the last block */
ret = __archive_write_filter(f->next_filter,
state->compressed, state->compressed_offset);
-cleanup:
- ret2 = __archive_write_close_filter(f->next_filter);
- if (ret > ret2)
- ret = ret2;
- free(state->compressed);
- free(state);
return (ret);
}
static int
archive_compressor_compress_free(struct archive_write_filter *f)
{
- (void)f; /* UNUSED */
+ struct private_data *state = (struct private_data *)f->data;
+
+ free(state->compressed);
+ free(state);
return (ARCHIVE_OK);
}
struct private_data *data = (struct private_data *)f->data;
int ret;
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
-
if (data->compressed == NULL) {
size_t bs = 65536, bpb;
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
{
unsigned char trailer[8];
struct private_data *data = (struct private_data *)f->data;
- int ret, r1;
+ int ret;
/* Finish compression cycle */
ret = drive_compressor(f, data, 1);
"Failed to clean up compressor");
ret = ARCHIVE_FATAL;
}
- r1 = __archive_write_close_filter(f->next_filter);
- return (r1 < ret ? r1 : ret);
+ return ret;
}
/*
archive_filter_lz4_open(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int ret;
size_t required_size;
static size_t const bkmap[] = { 64 * 1024, 256 * 1024, 1 * 1024 * 1024,
4 * 1024 * 1024 };
size_t pre_block_size;
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != 0)
- return (ret);
-
if (data->block_maximum_size < 4)
data->block_size = bkmap[0];
else
archive_filter_lz4_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int ret, r1;
+ int ret;
/* Finish compression cycle. */
ret = (int)lz4_write_one_block(f, NULL, 0);
ret = __archive_write_filter(f->next_filter,
data->out_buffer, data->out - data->out_buffer);
}
-
- r1 = __archive_write_close_filter(f->next_filter);
- return (r1 < ret ? r1 : ret);
+ return ret;
}
static int
archive_write_lzop_open(struct archive_write_filter *f)
{
struct write_lzop *data = (struct write_lzop *)f->data;
- int ret;
-
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
switch (data->compression_level) {
case 1:
}
/* Write a zero uncompressed size as the end mark of the series of
* compressed block. */
- r = __archive_write_filter(f->next_filter, &endmark, sizeof(endmark));
- if (r != ARCHIVE_OK)
- return (r);
- return (__archive_write_close_filter(f->next_filter));
+ return __archive_write_filter(f->next_filter, &endmark, sizeof(endmark));
}
#else
struct archive_write_program_data *data, const char *cmd)
{
pid_t child;
- int ret;
-
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
if (data->child_buf == NULL) {
data->child_buf_len = 65536;
__archive_write_program_close(struct archive_write_filter *f,
struct archive_write_program_data *data)
{
- int ret, r1, status;
+ int ret, status;
ssize_t bytes_read;
if (data->child == 0)
- return __archive_write_close_filter(f->next_filter);
+ return ARCHIVE_OK;
ret = 0;
close(data->child_stdin);
"Error closing program: %s", data->program_name);
ret = ARCHIVE_FATAL;
}
- r1 = __archive_write_close_filter(f->next_filter);
- return (r1 < ret ? r1 : ret);
+ return ret;
}
{
struct private_uuencode *state = (struct private_uuencode *)f->data;
size_t bs = 65536, bpb;
- int ret;
-
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
/* Buffer size should be a multiple number of the of bytes
archive_filter_uuencode_close(struct archive_write_filter *f)
{
struct private_uuencode *state = (struct private_uuencode *)f->data;
- int ret, ret2;
/* Flush remaining bytes. */
if (state->hold_len != 0)
archive_string_sprintf(&state->encoded_buff, "`\nend\n");
/* Write the last block */
archive_write_set_bytes_in_last_block(f->archive, 1);
- ret = __archive_write_filter(f->next_filter,
+ return __archive_write_filter(f->next_filter,
state->encoded_buff.s, archive_strlen(&state->encoded_buff));
- ret2 = __archive_write_close_filter(f->next_filter);
- if (ret > ret2)
- ret = ret2;
- return (ret);
}
static int
struct private_data *data = f->data;
int ret;
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
-
if (data->compressed == NULL) {
size_t bs = 65536, bpb;
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
archive_compressor_xz_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int ret, r1;
+ int ret;
ret = drive_compressor(f, data, 1);
if (ret == ARCHIVE_OK) {
}
}
lzma_end(&(data->stream));
- r1 = __archive_write_close_filter(f->next_filter);
- return (r1 < ret ? r1 : ret);
+ return ret;
}
static int
archive_compressor_zstd_open(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int ret;
-
- ret = __archive_write_open_filter(f->next_filter);
- if (ret != ARCHIVE_OK)
- return (ret);
if (data->out.dst == NULL) {
size_t bs = ZSTD_CStreamOutSize(), bpb;
archive_compressor_zstd_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int r1, r2;
/* Finish zstd frame */
- r1 = drive_compressor(f, data, 1, NULL, 0);
-
- r2 = __archive_write_close_filter(f->next_filter);
-
- return r1 < r2 ? r1 : r2;
+ return drive_compressor(f, data, 1, NULL, 0);
}
/*
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write_finish_entry 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.Pq FreeBSD, Mac OS X
for more information on file attributes.
.It Cm ARCHIVE_EXTRACT_MAC_METADATA
-Mac OS X specific. Restore metadata using
+Mac OS X specific.
+Restore metadata using
.Xr copyfile 3 .
By default,
.Xr copyfile 3
functions.
.\"
.Sh SEE ALSO
+.Xr tar 1 ,
.Xr archive_read 3 ,
.Xr archive_write 3 ,
-.Xr tar 1 ,
.Xr libarchive 3
.Sh HISTORY
The
| O_PATH
#elif defined(O_SEARCH)
| O_SEARCH
-#elif defined(O_EXEC)
+#elif defined(__FreeBSD__) && defined(O_EXEC)
| O_EXEC
#else
| O_RDONLY
errno = ENOTSUP;
return (-1);
} else
- return (open(fd, path, flags));
+ return (open(path, flags));
#else
return (openat(fd, path, flags));
#endif
}
if (S_ISLNK(a->mode)) {
+#ifdef HAVE_LCHMOD
/*
- * If this is a symlink, use fchmod() or lchmod(). If the
+ * If this is a symlink, use lchmod(). If the
* platform doesn't support lchmod(), just skip it. A
* platform that doesn't provide a way to set
* permissions on symlinks probably ignores
* permissions on symlinks, so a failure here has no
* impact.
*/
-#ifdef HAVE_FCHMOD
- if (a->fd > 0)
- r2 = fchmod(a->fd, mode);
- else
-#endif
-#ifdef HAVE_LCHMOD
- r2 = lchmod(a->name, mode);
-#else
- /* We don't have lchmod() here and a fd is not given */
- r2 = 0;
-#endif
- if (r2 != 0) {
+ if (lchmod(a->name, mode) != 0) {
switch (errno) {
case ENOTSUP:
case ENOSYS:
r = ARCHIVE_WARN;
}
}
+#endif
} else if (!S_ISDIR(a->mode)) {
/*
* If it's not a symlink and not a dir, then use
.Nm archive_write_add_filter_program ,
.Nm archive_write_add_filter_uuencode ,
.Nm archive_write_add_filter_xz ,
-.Nm archive_write_add_filter_zstd ,
+.Nm archive_write_add_filter_zstd
.Nd functions enabling output filters
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write 3 ,
.Xr archive_write_format 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write_data 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.Nm archive_write_set_format_v7tar ,
.Nm archive_write_set_format_warc ,
.Nm archive_write_set_format_xar ,
-.Nm archive_write_set_format_zip ,
+.Nm archive_write_set_format_zip
.Nd functions for creating archives
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr libarchive-formats 5 ,
.Xr mtree 5 ,
to release the resources.
This can be used to speed recovery when the archive creation
must be aborted.
-Note that the created archive is likely to be malformed in this case;
+Note that the created archive is likely to be malformed in this case;
.It Fn archive_write_close
Complete the archive and invoke the close callback.
.It Fn archive_write_finish
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
.Fn archive_set_error
to register an error code and message and
return
-.Cm ARCHIVE_FATAL.
+.Cm ARCHIVE_FATAL .
.Pp
Note that if the client-provided write callback function
returns a non-zero value, that error will be propagated back to the caller
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write 3 ,
.Xr archive_write_blocksize 3 ,
.Xr archive_write_filter 3 ,
.Xr archive_write_format 3 ,
.Xr archive_write_new 3 ,
.Xr archive_write_set_options 3 ,
+.Xr libarchive 3 ,
.Xr cpio 5 ,
.Xr mtree 5 ,
.Xr tar 5
#include "archive_string.h"
#include "archive_private.h"
+#define ARCHIVE_WRITE_FILTER_STATE_NEW 1U
+#define ARCHIVE_WRITE_FILTER_STATE_OPEN 2U
+#define ARCHIVE_WRITE_FILTER_STATE_CLOSED 4U
+#define ARCHIVE_WRITE_FILTER_STATE_FATAL 0x8000U
+
struct archive_write;
struct archive_write_filter {
int code;
int bytes_per_block;
int bytes_in_last_block;
+ int state;
};
#if ARCHIVE_VERSION < 4000000
int __archive_write_output(struct archive_write *, const void *, size_t);
int __archive_write_nulls(struct archive_write *, size_t);
int __archive_write_filter(struct archive_write_filter *, const void *, size_t);
-int __archive_write_open_filter(struct archive_write_filter *);
-int __archive_write_close_filter(struct archive_write_filter *);
struct archive_write {
struct archive archive;
if (size > iso9660->wbuff_remaining ||
iso9660->wbuff_remaining == 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Internal Programing error: iso9660:wb_consume()"
+ "Internal Programming error: iso9660:wb_consume()"
" size=%jd, wbuff_remaining=%jd",
(intmax_t)size, (intmax_t)iso9660->wbuff_remaining);
return (ARCHIVE_FATAL);
if (iso9660->wbuff_type != WB_TO_TEMP) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Internal Programing error: iso9660:wb_set_offset()");
+ "Internal Programming error: iso9660:wb_set_offset()");
return (ARCHIVE_FATAL);
}
{
(void)buff; /* UNUSED */
(void)s; /* UNUSED */
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Programing error");
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Programming error");
return (ARCHIVE_FATAL);
}
#endif
/* Keyword options */
int keys;
-#define F_CKSUM 0x00000001 /* check sum */
+#define F_CKSUM 0x00000001 /* checksum */
#define F_DEV 0x00000002 /* device type */
#define F_DONE 0x00000004 /* directory done */
#define F_FLAGS 0x00000008 /* file flags */
}
/*
- * Indent a line as mtree utility to be readable for people.
+ * Indent a line as the mtree utility does so it is readable for people.
*/
static void
mtree_indent(struct mtree_writer *mtree)
/*
* Write /set keyword.
- * Set most used value of uid,gid,mode and fflags, which are
- * collected by attr_counter_set_collect() function.
+ * Set the most used value of uid, gid, mode and fflags, which are
+ * collected by the attr_counter_set_collect() function.
*/
static void
write_global(struct mtree_writer *mtree)
}
/*
- * Tabulate uid,gid,mode and fflags of a entry in order to be used for /set.
+ * Tabulate uid, gid, mode and fflags of a entry in order to be used for /set.
*/
static int
attr_counter_set_collect(struct mtree_writer *mtree, struct mtree_entry *me)
/* If the current file is a regular file, we have to
* compute the sum of its content.
- * Initialize a bunch of sum check context. */
+ * Initialize a bunch of checksum context. */
if (mtree_entry->reg_info)
sum_init(mtree);
if (mtree == NULL)
return (ARCHIVE_OK);
- /* Make sure we dot not leave any entries. */
+ /* Make sure we do not leave any entries. */
mtree_entry_register_free(mtree);
archive_string_free(&mtree->cur_dirstr);
archive_string_free(&mtree->ebuf);
if (file->parentdir.length == 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Internal programing error "
+ "Internal programming error "
"in generating canonical name for %s",
file->pathname.s);
return (ARCHIVE_FAILED);
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"pax: invalid charset name");
return (ret);
+ } else if (strcmp(key, "xattrheader") == 0) {
+ if (val == NULL || val[0] == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "pax: xattrheader requires a value");
+ } else if (strcmp(val, "ALL") == 0 ||
+ strcmp(val, "all") == 0) {
+ pax->flags |= WRITE_LIBARCHIVE_XATTR | WRITE_SCHILY_XATTR;
+ ret = ARCHIVE_OK;
+ } else if (strcmp(val, "SCHILY") == 0 ||
+ strcmp(val, "schily") == 0) {
+ pax->flags |= WRITE_SCHILY_XATTR;
+ pax->flags &= ~WRITE_LIBARCHIVE_XATTR;
+ ret = ARCHIVE_OK;
+ } else if (strcmp(val, "LIBARCHIVE") == 0 ||
+ strcmp(val, "libarchive") == 0) {
+ pax->flags |= WRITE_LIBARCHIVE_XATTR;
+ pax->flags &= ~WRITE_SCHILY_XATTR;
+ ret = ARCHIVE_OK;
+ } else
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "pax: invalid xattr header name");
+ return (ret);
}
/* Note: The "warn" return is just to inform the options
{
mode_t type;
const char *path;
+ size_t len;
type = archive_entry_filetype(entry);
path = archive_entry_pathname(entry);
if (path == NULL)
return (0);
- if (type == AE_IFDIR &&
- (path[0] == '\0' || path[strlen(path) - 1] != '/')) {
- return strlen(path) + 1;
- } else {
- return strlen(path);
- }
+ len = strlen(path);
+ if (type == AE_IFDIR && (path[0] == '\0' || path[len - 1] != '/'))
+ ++len; /* Space for the trailing / */
+ return len;
}
static int
memcpy(p, path, pathlen);
/* Folders are recognized by a trailing slash. */
- if ((type == AE_IFDIR) & (path[pathlen - 1] != '/')) {
+ if ((type == AE_IFDIR) && (path[pathlen - 1] != '/'))
p[pathlen] = '/';
- p[pathlen + 1] = '\0';
- }
}
.\"
.\" $FreeBSD$
.\"
-.Dd February 2, 2012
+.Dd December 3, 2019
.Dt ARCHIVE_WRITE_OPTIONS 3
.Os
.Sh NAME
.Fn archive_write_set_filter_option ,
.Fn archive_write_set_format_option
.Xc
-Specifies an option that will be passed to currently-registered
+Specifies an option that will be passed to the currently-registered
filters (including decompression filters) or format readers.
.Pp
If
.Cm ARCHIVE_FATAL
will be returned
immediately.
-Otherwise, greater of the two values will be returned.
+Otherwise, the greater of the two values will be returned.
.\"
.It Fn archive_write_set_options
.Ar options
.Bl -tag -compact -width indent
.It Cm abstract-file Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
-as holding the abstract for this volume. Default: none.
+as holding the abstract for this volume.
+Default: none.
.It Cm application-id Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
-as holding the application identifier for this volume. Default: none.
+as holding the application identifier for this volume.
+Default: none.
.It Cm biblio-file Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
-as holding the bibliography for this volume. Default: none.
+as holding the bibliography for this volume.
+Default: none.
.It Cm copyright-file Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
-as holding the copyright for this volume. Default: none.
+as holding the copyright for this volume.
+Default: none.
.It Cm publisher Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
-as holding the publisher information for this volume. Default: none.
+as holding the publisher information for this volume.
+Default: none.
.It Cm volume-id Ns = Ns Ar string
The specified string will be used as the Volume Identifier in the ISO9660 metadata.
-It is limited to 32 bytes. Default: none.
+It is limited to 32 bytes.
+Default: none.
.El
.It Format iso9660 - boot support
These options are used to make an ISO9660 image that can be directly
the default is
.Cm fd ,
otherwise the default is
-.Cm no-emulation.
+.Cm no-emulation .
.El
.It Format iso9660 - filename and size extensions
Various extensions to the base ISO9660 format.
Default: disabled.
.It Cm allow-period
If enabled, allows filenames to contain trailing period characters, in violation of the ISO9660 specification.
-If disabled,trailing periods will be converted to underscore characters.
+If disabled, trailing periods will be converted to underscore characters.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.It Cm allow-pvd-lowercase
This option can be provided multiple times to suppress compression
on many files.
.El
+.It Format pax
+.Bl -tag -compact -width indent
+.It Cm hdrcharset
+This sets the character set used for filenames, uname and gname.
+The value is one of
+.Dq BINARY
+or
+.Dq UTF-8 .
+With
+.Dq BINARY
+there is no character conversion, with
+.Dq UTF-8
+names are converted to UTF-8.
+.It Cm xattrheader
+When storing extended attributes, this option configures which
+headers should be written. The value is one of
+.Dq all ,
+.Dq LIBARCHIVE ,
+or
+.Dq SCHILY .
+By default, both
+.Dq LIBARCHIVE.xattr
+and
+.Dq SCHILY.xattr
+headers are written.
+.El
+.It Format 7zip
+.Bl -tag -compact -width indent
+.It Cm compression
+The value is one of
+.Dq store ,
+.Dq deflate ,
+.Dq bzip2 ,
+.Dq lzma1 ,
+.Dq lzma2
+or
+.Dq ppmd
+to indicate how the following entries should be compressed.
+Note that this setting is ignored for directories, symbolic links,
+and other special entries.
+.It Cm compression-level
+The value is interpreted as a decimal integer specifying the
+compression level.
+Values between 0 and 9 are supported.
+The interpretation of the compression level depends on the chosen
+compression method.
+.El
.It Format zip
.Bl -tag -compact -width indent
.It Cm compression
to indicate how the following entries should be compressed.
Note that this setting is ignored for directories, symbolic links,
and other special entries.
+.It Cm compression-level
+The value is interpreted as a decimal integer specifying the
+compression level.
+Values between 0 and 9 are supported.
+A compression level of 0 switches the compression method to
+.Dq store ,
+other values will enable
+.Dq deflate
+compression with the given level.
.It Cm experimental
This boolean option enables or disables experimental Zip features
that may not be compatible with other Zip implementations.
.\"
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_read_set_options 3 ,
-.Xr archive_write 3
+.Xr archive_write 3 ,
+.Xr libarchive 3
.Sh HISTORY
The
.Nm libarchive
.Sh DESCRIPTION
.Bl -tag -width indent
.It Fn archive_write_set_passphrase
-Set a passphrase for writing an encryption archive.
+Set a passphrase for writing an encrypted archive.
If
.Ar passphrase
is
will be returned.
Otherwise,
.Cm ARCHIVE_OK
-will be returned.
+will be returned.
.It Fn archive_write_set_passphrase_callback
-Register callback function that will be invoked to get a passphrase
-for encrption if the passphrase was not set by the
+Register a callback function that will be invoked to get a passphrase
+for encryption if the passphrase was not set by the
.Fn archive_write_set_passphrase
function.
.El
.\" .Sh ERRORS
.Sh SEE ALSO
.Xr tar 1 ,
-.Xr libarchive 3 ,
.Xr archive_write 3 ,
-.Xr archive_write_set_options 3
+.Xr archive_write_set_options 3 ,
+.Xr libarchive 3
#define HAVE_TZSET 1
#define HAVE_UINTMAX_T 1
#define HAVE_UNISTD_H 1
+#define HAVE_UNLINKAT 1
#define HAVE_UNSETENV 1
#define HAVE_UNSIGNED_LONG_LONG 1
#define HAVE_UNSIGNED_LONG_LONG_INT 1
This page describes user-visible changes in libarchive3, and lists
public functions and other symbols changed, deprecated or removed
in libarchive3, along with their replacements if any.
-.Pp
.\"
.Ss Multiple Filters
.\"
.Li 10240
.El
.Sh SEE ALSO
-.Xr libarchive 3 ,
.Xr archive_read 3 ,
.Xr archive_read_filter 3 ,
.Xr archive_read_format 3 ,
.Xr archive_read_set_options 3 ,
+.Xr archive_util 3 ,
.Xr archive_write 3 ,
.Xr archive_write_filter 3 ,
.Xr archive_write_format 3 ,
.Xr archive_write_set_options 3 ,
-.Xr archive_util 3
+.Xr libarchive 3
.Xr archive_entry 3 ,
.Xr archive_read 3 ,
.Xr archive_write 3 ,
-.Xr archive_write_disk 3
-.Xr libarchive 3 ,
+.Xr archive_write_disk 3 ,
+.Xr libarchive 3
.Sh HISTORY
The
.Nm libarchive
.Sy char
file types.
The value must be one of the following forms:
-.Pp
.Bl -tag -width 4n
.It Ar format , Ns Ar major , Ns Ar minor Ns Bo , Ns Ar subunit Bc
A device with
.Sy solaris ,
.Sy sunos ,
.Sy svr3 ,
-.Sy svr4 ,
-and
+.Sy svr4 ,
+and
.Sy ultrix .
.Pp
See
.It Cm uname
The file owner as a symbolic name.
.El
-.Pp
.Sh SEE ALSO
.Xr cksum 1 ,
.Xr find 1 ,
.Xr mtree 8
-.Sh BUGS
.Sh HISTORY
The
.Nm
Vendor-specific attributes used by Joerg Schilling's
.Nm star
implementation.
-.It Cm SCHILY.acl.access , Cm SCHILY.acl.default, Cm SCHILY.acl.ace
+.It Cm SCHILY.acl.access , Cm SCHILY.acl.default , Cm SCHILY.acl.ace
Stores the access, default and NFSv4 ACLs as textual strings in a format
that is an extension of the format specified by POSIX.1e draft 17.
In particular, each user or group access specification can include
.It Cm SCHILY.realsize
The full size of the file on disk.
XXX explain? XXX
-.It Cm SCHILY.dev, Cm SCHILY.ino , Cm SCHILY.nlinks
+.It Cm SCHILY.dev , Cm SCHILY.ino , Cm SCHILY.nlinks
The device number, inode number, and link count for the entry.
In particular, note that a pax interchange format archive using Joerg
Schilling's
.Dq ctime
attribute, which refers to the time when the file
metadata was last changed.)
-.It Cm LIBARCHIVE.xattr. Ns Ar namespace Ns . Ns Ar key
+.It Cm LIBARCHIVE.xattr . Ns Ar namespace . Ns Ar key
Libarchive stores POSIX.1e-style extended attributes using
keys of this form.
The
.It Cm M
GNU tar multivolume marker, indicating the file is a continuation of a file from the previous volume.
.It Cm N
-GNU tar long filename support. Deprecated.
+GNU tar long filename support.
+Deprecated.
.It Cm S
GNU tar sparse regular file.
.It Cm V
test_open_file.c
test_open_filename.c
test_pax_filename_encoding.c
+ test_pax_xattr_header.c
test_read_data_large.c
test_read_disk.c
test_read_disk_directory_traversals.c
test_read_format_7zip_encryption_header.c
test_read_format_7zip_encryption_partially.c
test_read_format_7zip_malformed.c
+ test_read_format_7zip_packinfo_digests.c
test_read_format_ar.c
test_read_format_cab.c
test_read_format_cab_filename.c
test_read_format_lha.c
test_read_format_lha_bugfix_0.c
test_read_format_lha_filename.c
+ test_read_format_lha_filename_utf16.c
test_read_format_mtree.c
test_read_format_mtree_crash747.c
test_read_format_pax_bz2.c
DEFINE_TEST(test_pax_filename_encoding_KOI8R_BINARY)
DEFINE_TEST(test_pax_filename_encoding_KOI8R_CP1251)
DEFINE_TEST(test_pax_filename_encoding)
+DEFINE_TEST(test_pax_xattr_header)
DEFINE_TEST(test_read_data_large)
DEFINE_TEST(test_read_disk)
DEFINE_TEST(test_read_disk_directory_traversals)
DEFINE_TEST(test_read_format_7zip_encryption_header)
DEFINE_TEST(test_read_format_7zip_encryption_partially)
DEFINE_TEST(test_read_format_7zip_malformed)
+DEFINE_TEST(test_read_format_7zip_packinfo_digests)
DEFINE_TEST(test_read_format_ar)
DEFINE_TEST(test_read_format_cab)
DEFINE_TEST(test_read_format_cab_filename)
DEFINE_TEST(test_read_format_lha_bugfix_0)
DEFINE_TEST(test_read_format_lha)
DEFINE_TEST(test_read_format_lha_filename)
+DEFINE_TEST(test_read_format_lha_filename_UTF16)
DEFINE_TEST(test_read_format_mtree)
DEFINE_TEST(test_read_format_mtree_filenames_only)
DEFINE_TEST(test_read_format_mtree_nochange)
DEFINE_TEST(test_read_format_rar5_distance_overflow)
DEFINE_TEST(test_read_format_rar5_nonempty_dir_stream)
DEFINE_TEST(test_read_format_rar5_fileattr)
+DEFINE_TEST(test_read_format_rar5_different_window_size)
+DEFINE_TEST(test_read_format_rar5_arm_filter_on_window_boundary)
+DEFINE_TEST(test_read_format_rar5_different_solid_window_size)
+DEFINE_TEST(test_read_format_rar5_different_winsize_on_merge)
DEFINE_TEST(test_read_format_rar_set_format)
DEFINE_TEST(test_read_format_rar_basic)
DEFINE_TEST(test_read_format_rar_subblock)
DEFINE_TEST(test_read_format_rar_multivolume_seek_multiple_files)
DEFINE_TEST(test_read_format_rar_multivolume_uncompressed_files)
DEFINE_TEST(test_read_format_rar_ppmd_use_after_free)
+DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)
DEFINE_TEST(test_read_format_rar_encryption_data)
DEFINE_TEST(test_read_format_rar_encryption_header)
DEFINE_TEST(test_read_format_rar_encryption_partially)
r = archive_write_add_filter_by_name(a, filter_name);
if (r == ARCHIVE_WARN) {
if (!can_filter_prog()) {
- skipping("%s filter not suported on this platform",
+ skipping("%s filter not supported on this platform",
filter_name);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
free(buff);
"lzma compression not supported on this platform") == 0 ||
strcmp(archive_error_string(a),
"xz compression not supported on this platform") == 0)) {
- skipping("%s filter not suported on this platform", filter_name);
+ skipping("%s filter not supported on this platform", filter_name);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
free(buff);
return;
strcmp(archive_error_string(a),
"xz compression not supported on this platform") == 0)) {
const char *filter_name = archive_filter_name(a, 0);
- skipping("%s filter not suported on this platform", filter_name);
+ skipping("%s filter not supported on this platform", filter_name);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
free(buff);
return;
archive_write_open(a, &private, my_open, my_write, my_close));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
memset(&private, 0, sizeof(private));
private.magic = MAGIC;
archive_write_open(a, &private, my_open, my_write, my_close));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
memset(&private, 0, sizeof(private));
private.magic = MAGIC;
archive_write_open(a, &private, my_open, my_write, my_close));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
memset(&private, 0, sizeof(private));
private.magic = MAGIC;
archive_write_open(a, &private, my_open, my_write, my_close));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
assertEqualInt(1, private.open_called);
assertEqualInt(0, private.write_called);
- assertEqualInt(1, private.close_called);
+ assertEqualInt(0, private.close_called);
}
struct archive_entry *ae;
struct archive *a;
int fd;
+ const char *skip_open_fd_err_test;
#if defined(__BORLANDC__)
fd = open("test.tar", O_RDWR | O_CREAT | O_BINARY);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
close(fd);
-
- /*
- * Verify some of the error handling.
- */
- assert((a = archive_read_new()) != NULL);
- assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
- assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
- /* FD 100 shouldn't be open. */
- assertEqualIntA(a, ARCHIVE_FATAL,
- archive_read_open_fd(a, 100, 512));
- assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
- assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ skip_open_fd_err_test = getenv("SKIP_OPEN_FD_ERR_TEST");
+ if(skip_open_fd_err_test == NULL) {
+ /*
+ * Verify some of the error handling.
+ */
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ /* FD 100 shouldn't be open. */
+ assertEqualIntA(a, ARCHIVE_FATAL,
+ archive_read_open_fd(a, 100, 512));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ }
}
--- /dev/null
+/*-
+ * Copyright (c) 2019 Martin Matuska
+ * 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$");
+
+static struct archive_entry*
+create_archive_entry(void) {
+ struct archive_entry *ae;
+
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_set_atime(ae, 2, 20);
+ archive_entry_set_ctime(ae, 4, 40);
+ archive_entry_set_mtime(ae, 5, 50);
+ archive_entry_copy_pathname(ae, "file");
+ archive_entry_set_mode(ae, AE_IFREG | 0755);
+ archive_entry_set_nlink(ae, 2);
+ archive_entry_set_size(ae, 8);
+ archive_entry_xattr_add_entry(ae, "user.data1", "ABCDEFG", 7);
+ archive_entry_xattr_add_entry(ae, "user.data2", "XYZ", 3);
+
+ return (ae);
+}
+
+DEFINE_TEST(test_pax_xattr_header)
+{
+ static const char *reffiles[] = {
+ "test_pax_xattr_header_all.tar",
+ "test_pax_xattr_header_libarchive.tar",
+ "test_pax_xattr_header_schily.tar",
+ NULL
+ };
+ struct archive *a;
+ struct archive_entry *ae;
+
+ extract_reference_files(reffiles);
+
+ /* First archive, no options */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, 0, archive_write_set_format_pax(a));
+ assertEqualIntA(a, 0, archive_write_add_filter_none(a));
+ assertEqualInt(0,
+ archive_write_open_filename(a, "test1.tar"));
+ ae = create_archive_entry();
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
+
+ assertEqualFile("test1.tar","test_pax_xattr_header_all.tar");
+
+ /* Second archive, xattrheader=SCHILY */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, 0, archive_write_set_format_pax(a));
+ assertEqualIntA(a, 0, archive_write_add_filter_none(a));
+ assertEqualIntA(a, 0, archive_write_set_options(a,
+ "xattrheader=SCHILY"));
+ assertEqualInt(0,
+ archive_write_open_filename(a, "test2.tar"));
+
+ ae = create_archive_entry();
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
+
+ assertEqualFile("test2.tar","test_pax_xattr_header_schily.tar");
+
+ /* Third archive, xattrheader=LIBARCHIVE */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, 0, archive_write_set_format_pax(a));
+ assertEqualIntA(a, 0, archive_write_add_filter_none(a));
+ assertEqualIntA(a, 0, archive_write_set_options(a,
+ "xattrheader=LIBARCHIVE"));
+ assertEqualInt(0,
+ archive_write_open_filename(a, "test3.tar"));
+
+ ae = create_archive_entry();
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
+
+ assertEqualFile("test3.tar","test_pax_xattr_header_libarchive.tar");
+
+ /* Fourth archive, xattrheader=ALL */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, 0, archive_write_set_format_pax(a));
+ assertEqualIntA(a, 0, archive_write_add_filter_none(a));
+ assertEqualIntA(a, 0, archive_write_set_options(a, "xattrheader=ALL"));
+ assertEqualInt(0,
+ archive_write_open_filename(a, "test4.tar"));
+
+ ae = create_archive_entry();
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
+
+ assertEqualFile("test4.tar","test_pax_xattr_header_all.tar");
+}
--- /dev/null
+begin 644 test_pax_xattr_header_all.tar
+M4&%X2&5A9&5R+V9I;&4`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#<U-2``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,S$T
+M(#`P,#`P,#`P,#`U(#`Q,C`P-@`@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U<W1A<@`P,```````
+M````````````````````````````````````````````````````````````
+M```````````````````P,#`P,#`@`#`P,#`P,"``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````R,"!C=&EM93TT+C`P,#`P,#`T"C(P(&%T:6UE
+M/3(N,#`P,#`P,#(*,C`@;71I;64]-2XP,#`P,#`P-0HS-B!,24)!4D-(259%
+M+GAA='1R+G5S97(N9&%T83(]5T9L80HS,2!30TA)3%DN>&%T='(N=7-E<BYD
+M871A,CU865H*-#(@3$E"05)#2$E612YX871T<BYU<V5R+F1A=&$Q/5%52D12
+M159'4G<*,S4@4T-(24Q9+GAA='1R+G5S97(N9&%T83$]04)#1$5&1PH`````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````&9I;&4`````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#`W-34@`#`P,#`P,"``,#`P,#`P(``P,#`P,#`P,#`Q,"`P,#`P,#`P,#`P
+M-2`P,3`P,C8`(#``````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````=7-T87(`,#``````````````````````
+M````````````````````````````````````````````````````````````
+M````,#`P,#`P(``P,#`P,#`@````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````,3(S-#4V-S@`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+,````````````````
+`
+end
--- /dev/null
+begin 644 test_pax_xattr_header_libarchive.tar
+M4&%X2&5A9&5R+V9I;&4`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#<U-2``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,C$R
+M(#`P,#`P,#`P,#`U(#`Q,C`P,P`@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U<W1A<@`P,```````
+M````````````````````````````````````````````````````````````
+M```````````````````P,#`P,#`@`#`P,#`P,"``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````R,"!C=&EM93TT+C`P,#`P,#`T"C(P(&%T:6UE
+M/3(N,#`P,#`P,#(*,C`@;71I;64]-2XP,#`P,#`P-0HS-B!,24)!4D-(259%
+M+GAA='1R+G5S97(N9&%T83(]5T9L80HT,B!,24)!4D-(259%+GAA='1R+G5S
+M97(N9&%T83$]455*1%)%5D=2=PH`````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````&9I;&4`````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#`W-34@`#`P,#`P,"``,#`P,#`P(``P,#`P,#`P,#`Q,"`P,#`P,#`P,#`P
+M-2`P,3`P,C8`(#``````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````=7-T87(`,#``````````````````````
+M````````````````````````````````````````````````````````````
+M````,#`P,#`P(``P,#`P,#`@````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````,3(S-#4V-S@`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+,````````````````
+`
+end
--- /dev/null
+begin 644 test_pax_xattr_header_schily.tar
+M4&%X2&5A9&5R+V9I;&4`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#<U-2``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,3<V
+M(#`P,#`P,#`P,#`U(#`Q,C`Q-``@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U<W1A<@`P,```````
+M````````````````````````````````````````````````````````````
+M```````````````````P,#`P,#`@`#`P,#`P,"``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````R,"!C=&EM93TT+C`P,#`P,#`T"C(P(&%T:6UE
+M/3(N,#`P,#`P,#(*,C`@;71I;64]-2XP,#`P,#`P-0HS,2!30TA)3%DN>&%T
+M='(N=7-E<BYD871A,CU865H*,S4@4T-(24Q9+GAA='1R+G5S97(N9&%T83$]
+M04)#1$5&1PH`````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````&9I;&4`````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#`W-34@`#`P,#`P,"``,#`P,#`P(``P,#`P,#`P,#`Q,"`P,#`P,#`P,#`P
+M-2`P,3`P,C8`(#``````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````=7-T87(`,#``````````````````````
+M````````````````````````````````````````````````````````````
+M````,#`P,#`P(``P,#`P,#`@````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````,3(S-#4V-S@`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+,````````````````
+`
+end
archive_entry_clear(ae);
r = archive_read_next_header2(a, ae);
if (r == ARCHIVE_FAILED) {
-#if defined(O_PATH) || defined(O_SEARCH) || defined(O_EXEC)
+#if defined(O_PATH) || defined(O_SEARCH) || \
+ (defined(__FreeBSD__) && defined(O_EXEC))
assertEqualIntA(a, ARCHIVE_OK, r);
#endif
/* Close the disk object. */
--- /dev/null
+begin 644 test_read_format_7zip_packinfo_digests.7z
+M-WJ\KR<<``*^Y_3?$`````````!E`````````&/C(9T!``-A86$*``$``V)B
+M8@H``00&``()"`@*`5\J+KLX07WL``<+`@`!(2$!%@$A(0$6#`0$"@&57?AW
+MX1\F3``(```%`A$9`&$`+@!T`'@`=````&(`+@!T`'@`=````!02`0"`FYCT
+.W+;5`8";F/3<MM4!````
+`
+end
--- /dev/null
+/*-
+ * Copyright (c) 2019 Martin Matuska
+ * 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");
+
+/* Read archive with digests in PackInfo */
+DEFINE_TEST(test_read_format_7zip_packinfo_digests)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ char buff[4];
+ const char *refname = "test_read_format_7zip_packinfo_digests.7z";
+
+ extract_reference_file(refname);
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ /* Verify regular file1. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualString("a.txt", archive_entry_pathname(ae));
+ assertEqualInt(1576808819, archive_entry_mtime(ae));
+ assertEqualInt(4, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+ assertEqualInt(4, archive_read_data(a, buff, sizeof(buff)));
+ assertEqualMem(buff, "aaa\n", 4);
+
+ /* Verify regular file2. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualString("b.txt", archive_entry_pathname(ae));
+ assertEqualInt(1576808819, archive_entry_mtime(ae));
+ assertEqualInt(4, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+ assertEqualInt(4, archive_read_data(a, buff, sizeof(buff)));
+ assertEqualMem(buff, "bbb\n", 4);
+
+ assertEqualInt(2, archive_file_count(a));
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Verify archive format. */
+ assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
+ assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
--- /dev/null
+/*-
+ * Copyright (c) 2019 Martin Matuska
+ * 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");
+
+#include <locale.h>
+
+static void
+test_read_format_lha_filename_UTF16_UTF8(const char *refname)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+
+ /*
+ * Read LHA filename in en_US.UTF-8.
+ */
+ if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
+ skipping("en_US.UTF-8 locale not available on this system.");
+ return;
+ }
+ /*
+ * Create a read object only for a test that platform support
+ * a character-set conversion because we can read a character-set
+ * of filenames from the header of an lha archive file and so we
+ * want to test that it works well.
+ */
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=CP932")) {
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ skipping("This system cannot convert character-set"
+ " from CP932 to UTF-8.");
+ return;
+ }
+ if (ARCHIVE_OK != archive_read_set_options(a, "hdrcharset=UTF-16")) {
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ skipping("This system cannot convert character-set"
+ " from UTF-16 to UTF-8.");
+ return;
+ }
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ /* Note that usual Japanese filenames are tested in other cases */
+#if defined(__APPLE__)
+ /* NFD normalization */
+ /* U:O:A:u:o:a: */
+ #define UMLAUT_DIRNAME "\x55\xcc\x88\x4f\xcc\x88\x41\xcc\x88\x75\xcc\x88\x6f"\
+ "\xcc\x88\x61\xcc\x88/"
+ /* a:o:u:A:O:U:.txt */
+ #define UMLAUT_FNAME "\x61\xcc\x88\x6f\xcc\x88\x75\xcc\x88\x41\xcc\x88"\
+ "\x4f\xcc\x88\x55\xcc\x88.txt"
+#else
+ /* NFC normalization */
+ /* U:O:A:u:o:a: */
+ #define UMLAUT_DIRNAME "\xc3\x9c\xc3\x96\xc3\x84\xc3\xbc\xc3\xb6\xc3\xa4/"
+ /* a:o:u:A:O:U:.txt */
+ #define UMLAUT_FNAME "\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c.txt"
+#endif
+
+/* "Test" in Japanese Katakana */
+#define KATAKANA_FNAME "\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88.txt"
+#define KATAKANA_DIRNAME "\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88/"
+
+ /* Verify regular file. U:O:A:u:o:a:/a:o:u:A:O:U:.txt */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(UMLAUT_DIRNAME UMLAUT_FNAME, archive_entry_pathname(ae));
+ assertEqualInt(12, archive_entry_size(ae));
+
+ /* Verify directory. U:O:A:u:o:a:/ */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(UMLAUT_DIRNAME, archive_entry_pathname(ae));
+ assertEqualInt(0, archive_entry_size(ae));
+
+ /* Verify regular file. U:O:A:u:o:a:/("Test" in Japanese).txt */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(UMLAUT_DIRNAME KATAKANA_FNAME,
+ archive_entry_pathname(ae));
+ assertEqualInt(25, archive_entry_size(ae));
+
+ /* Verify regular file. ("Test" in Japanese)/a:o:u:A:O:U:.txt */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(KATAKANA_DIRNAME UMLAUT_FNAME,
+ archive_entry_pathname(ae));
+ assertEqualInt(12, archive_entry_size(ae));
+
+ /* Verify directory. ("Test" in Japanese)/ */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(KATAKANA_DIRNAME, archive_entry_pathname(ae));
+ assertEqualInt(0, archive_entry_size(ae));
+
+ /* Verify regular file. a:o:u:A:O:U:.txt */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(UMLAUT_FNAME, archive_entry_pathname(ae));
+ assertEqualInt(12, archive_entry_size(ae));
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Verify archive format. */
+ assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
+ assertEqualIntA(a, ARCHIVE_FORMAT_LHA, archive_format(a));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_lha_filename_UTF16)
+{
+ /* A sample file was created with Unlha32.dll. */
+ const char *refname = "test_read_format_lha_filename_utf16.lzh";
+ extract_reference_file(refname);
+
+ test_read_format_lha_filename_UTF16_UTF8(refname);
+}
+
--- /dev/null
+begin 644 test_read_format_lha_filename_utf16.lzh\r
+M@0`M;&@P+0P````,````L/5872`"IW%-!P!&I`,```T``5]?7U]?7RYT>'0*\r
+M``)?7U]?7U__%P!$Y`#V`/P`Q`#6`-P`+@!T`'@`=``1`$7<`-8`Q`#\`/8`\r
+MY`#__QL`078S<F.15=4!]0V8@I%5U0'U#9B"D575`08```\:!P``PZ3#ML.\\r
+MPX3#EL.<90`M;&AD+0``````````PX"D72`"``!-!P!&I`,```,``0H``E]?\r
+M7U]?7_\%`$`0`!$`1=P`U@#$`/P`]@#D`/__&P!!FDHB>9B"U0$H^DQ_F(+5\r
+M`2CZ3'^8@M4!!@``GW<'``!J`"UL:#`M&0```!D```!V)L1=(`*CNTT'`$:D\r
+M`P``#0`!@V6#6(-G+G1X=`H``E]?7U]?7_\1`$7<`-8`Q`#\`/8`Y`#__QL`\r
+M00IF#4J@E-4!L"5C?'65U0&P)6-\=975`08``$%^!P``5&5S="!I;B!*87!A\r
+M;F5S92!+871A:V%N87L`+6QH,"T,````#````+#U6%T@`J=Q30<`1J0#```-\r
+M``%?7U]?7U\N='AT"@`"@V6#6(-G_Q<`1.0`]@#\`,0`U@#<`"X`=`!X`'0`\r
+M"P!%QC"Y,,@P__\;`$'D5O!-H)35`?4-F(*15=4!Y%;P3:"4U0$&``"A+0<`\r
+M`,.DP[;#O,.$PY;#G%0`+6QH9"T``````````-3`PET@`@``30<`1J0#```#\r
+M``$*``*#98-8@V?_!0!`$``;`$%%!\Y.H)35`3/_]%&@E-4!,__T4:"4U0$&\r
+M``!>;@<``&8`+6QH,"T,````#````+#U6%T@`J=Q30<`1J0#```-``%?7U]?\r
+M7U\N='AT%P!$Y`#V`/P`Q`#6`-P`+@!T`'@`=``;`$'D5O!-H)35`?4-F(*1\r
+@5=4!Y%;P3:"4U0$&``"M>`<``,.DP[;#O,.$PY;#G`#D\r
+`\r
+end\r
assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
+ /* Test EOF */
+ assertA(1 == archive_read_next_header(a, &ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)
+{
+ uint8_t buf[16];
+ const char* reffile = "test_read_format_rar_ppmd_use_after_free2.rar";
+
+ struct archive_entry *ae;
+ struct archive *a;
+
+ extract_reference_file(reffile);
+ assert((a = archive_read_new()) != NULL);
+ assertA(0 == archive_read_support_filter_all(a));
+ assertA(0 == archive_read_support_format_all(a));
+ assertA(0 == archive_read_open_filename(a, reffile, 10240));
+
+ assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
+ assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
+ assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
+ assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
+
+ /* Test EOF */
+ assertA(1 == archive_read_next_header(a, &ae));
+
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
PROLOGUE("test_read_format_rar5_readtables_overflow.rar");
- assertA(0 == archive_read_next_header(a, &ae));
/* This archive is invalid. However, processing it shouldn't cause any
* buffer overflow errors during reading rar5 tables. */
- assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
- /* This test only cares about not returning success here. */
- assertA(ARCHIVE_OK != archive_read_next_header(a, &ae));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
EPILOGUE();
}
PROLOGUE("test_read_format_rar5_leftshift1.rar");
- assertA(0 == archive_read_next_header(a, &ae));
/* This archive is invalid. However, processing it shouldn't cause any
* errors related to undefined operations when using -fsanitize. */
- assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
- /* This test only cares about not returning success here. */
- assertA(ARCHIVE_OK != archive_read_next_header(a, &ae));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
EPILOGUE();
}
PROLOGUE("test_read_format_rar5_leftshift2.rar");
- assertA(0 == archive_read_next_header(a, &ae));
-
/* This archive is invalid. However, processing it shouldn't cause any
* errors related to undefined operations when using -fsanitize. */
- assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
- /* This test only cares about not returning success here. */
- assertA(ARCHIVE_OK != archive_read_next_header(a, &ae));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
EPILOGUE();
}
PROLOGUE("test_read_format_rar5_truncated_huff.rar");
- assertA(0 == archive_read_next_header(a, &ae));
-
/* This archive is invalid. However, processing it shouldn't cause any
* errors related to undefined operations when using -fsanitize. */
- assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
- /* This test only cares about not returning success here. */
- assertA(ARCHIVE_OK != archive_read_next_header(a, &ae));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
EPILOGUE();
}
PROLOGUE("test_read_format_rar5_distance_overflow.rar");
- assertA(0 == archive_read_next_header(a, &ae));
-
/* This archive is invalid. However, processing it shouldn't cause any
* errors related to variable overflows when using -fsanitize. */
- assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
- /* This test only cares about not returning success here. */
- assertA(ARCHIVE_OK != archive_read_next_header(a, &ae));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
EPILOGUE();
}
PROLOGUE("test_read_format_rar5_nonempty_dir_stream.rar");
- assertA(0 == archive_read_next_header(a, &ae));
-
/* This archive is invalid. However, processing it shouldn't cause any
* errors related to buffer overflows when using -fsanitize. */
- assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
- /* This test only cares about not returning success here. */
- assertA(ARCHIVE_OK != archive_read_next_header(a, &ae));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
EPILOGUE();
}
EPILOGUE();
}
+
+DEFINE_TEST(test_read_format_rar5_different_window_size)
+{
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_different_window_size.rar");
+
+ /* Return codes of those calls are ignored, because this sample file
+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+ * errors during processing. */
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_arm_filter_on_window_boundary)
+{
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_arm_filter_on_window_boundary.rar");
+
+ /* Return codes of those calls are ignored, because this sample file
+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+ * errors during processing. */
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_different_solid_window_size)
+{
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_different_solid_window_size.rar");
+
+ /* Return codes of those calls are ignored, because this sample file
+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+ * errors during processing. */
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_different_winsize_on_merge)
+{
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_different_winsize_on_merge.rar");
+
+ /* Return codes of those calls are ignored, because this sample file
+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+ * errors during processing. */
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
--- /dev/null
+begin 600 test_read_format_rar5_arm_filter_on_window_boundary.rar
+M4F%R(1H'`0"-[P+2``(''(`'`/[_(`#_!``"(0$``/X(TB`!'O___P@``/W_
+M_Q``_]U84%"0_P1LAFVQ9,S,M[$`20"#__\`_P#_`/G___!DSR0V2+$`20`Z
+M@R[_______\I:!<**-@P70D`KB1!<YOZFQ/___^<`^5L*0```/________\_
+M`0#__RE@%PHHV#!="0"N)$%S"```_?]84/7___]0D/\$;(9ML63,S/\R'Q\?
+M'Q\?'Q\?'Q\?'Q\?'[$`20"#__\`_P#_`/G___!DSR0V2+$`20`Z@R[_____
+0_Q\?'Q\?'Q\?'Q]5"E`*4```
+`
+end
--- /dev/null
+begin 644 test_read_format_rar5_different_solid_window_size.rar
+M4F%R(1H'`0"-[P+2``'#M#P\7P$'`0"-[P+2``7#````1H68F`#___\`````
+M```0^OKZ^OJ%F)B8F)A)`)@"F-(%87)4`,.T/#Q?`0<!`(WO`M(`4F%R(1H'
+M`0"-[P+2``+'#PD`<@$A!QH:(](M``$:(](M``(:!P$`C>\"T@`"QP\`"7(A
+MFC$!$AHCTBT``B@A4F%2(1H'&.D````!`(WO`M(`!<-%````1A?'#P`)<B$:
+M!P$:T@7"F!=A_________P$$____,/__F!=A)F%R*%)8(W=T4F%R(1H'`0"-
+M[P+2``+'#PD`<@$A!QH:(](M``$:(](M``(:!P$`C>\"T@`"QP\`"7(AFC$!
+M$AHCTBT``B@A4F%2(1H'&.D````!`(WO`M(`!<-%````1A?'#P`)<B$:!P$:
+MT@7"F!=A_________P$$____,/__F!=A)B8(<@IE`.\*"7(`````````````
+M=O____________________\`!<-%````1A?'#_\P__\$(DT89%`(`0(`@$U3
+M0T8`````Y!]W__\;-A8T``````"!`$#U`@`!`&@````!]9^?```5`"T-````
+M`6QT(%P*"75I9%P*"75I9%P*"75I9%P*"75I9%P*"75I9%P*"7456BUL:#4M
+M#0````%L<0!SI/\````!]9^?```5`"T-`````6P56BUL:#4M#0````%L<0!S
+MI/\````!]9^?```5`"T-``#_``#J`"L-"E=!`````````````````````!$`
+M`!04%!04%!06`O__%*"@H*"@H*"@_PIW\M$"+@L*+@I&"@HV"BX*"BXH"F0*
+M+@H*+@HNYWJ""BX*"C?^___L+H`NCPHNMX*"@H*"@H*"@H*"@H*"@H*"@H*"
+M@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"
+M"@HV"BX*"BXH"F0*+@H*+@HNYWJ""BX*"C?^___L+H`N"BZW"F?_&_9<9```
+M@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"`/\G`)$`
+M@`#L`!OV7&0```%L%5HM;&@U+0T````!;'$`<Z3_`````71Y<&4];`HN"BX*
+M+@HN"BX*+FIJ:FIJ:@HN,#@T279R(&1E=FEC93US=B]S964];`HN"BX*+G0@
+M9'!Y93UL"BX*+@HN"BX*+@HN:FIJ:E)#)R\V,#@U+W-E="!\>7!E/6P*+@HN
+M"BYT('1Y<&4];`HN,"X*+@HN="!T>7!E/2X*+@HN"BYJ:FHP+W-E93UL"BX*
+M+@HN="!T>7!E+W-E="!T>7!E/6P*+@HN"BYT+G0@='G^6_]P9</#P\/#P\/#
+MP\/#P\/#P\/#P\/#P\/"P\/#P\/#+W-E="!D979I8V4]8G-D<V5T(&1E=FEC
+M93UB<V1O<RPM9"PN9"PN"BX*<R=D+2PL+F0L+@HN"B=S+"UD+"X*+@HN"BX*
+M+@HN"BL*70I="ET*70I="ET*70I="ET*70I="ET*70I="ET*70I="ET*70I=
+M"B%="ET*70I="ET*70I="ET*70I="ET*70I="@I="ET*70I="ET*70I="ET*
+M70I="ET*70I="ET*70I="ET*70I="ET*70H*70I="ET*70I="ET*70I="ET*
+M70I="ET*70I="ET*70I="ET*70I="ET*70I="ET*70I="ET*70I="ET*70I=
+M"ET*70I="ET*75T*70I="ET*70I="ET*9"PN"BX*+@HN"BX*"BX*+BYS9&7_
+M]P```````,/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\,``"D(-```!0`!``$`
+M@A8!!0`````````````````!```(\/#P\/!A\/#P\/#P\.+P\/#P\/#P,O#P
+M\%!+`P1.`%IB#B@!`/P```#M@!4```###P\/#V?QZ@\/#P\/#P\/#P\/#P\/
+M#P\/#P\/#P\/#P\/#P\/#U37[OL```!02R&PHU:*0,/#)\+#S</#0\/#PP\`
+M#P\!]9^?```5`"T-`````6P56BUL:#4M#0````%L<0!SI/\````!]9^?```5
+M`"T-`````6P56BUL:#4M#0````%L<0!SI/\````!]9^?```5`"T-`````6P5
+M6BUL:#4M#0````%L<0!SI/\````!]9^?```5`"T-`````6P56BUL:#4M#0``
+M``%L<0!SI/\````!]9^?```%`"T-`````8Z.CHXICHZ.K0'H````````````
+M`````/]L%5HM;&@U+0T````!;'$`<Z3_`````?6?GP``%0`M#0````%L%5HM
+M;&@U+0T````!;'$`<Z3_`````?6?GP``%0`M#0````%L%5HM;&@U+0T`````
+M;'$`<Z3_`````?6?GP``%0`M#0````%L%5HM;&@U+=(``0!R(8WO`M(`M`%?
+MC>\"T@`"TGX!M,-'4CQ2:7`)20`&`````````(WO`M(``0!R(8WO`M(``0!R
+M(8WO`M(``0!R(8WO`M(`M`%?C>\"T@`"TGX!M,-'4CQ:!@!I`'`)20``````
+M`(WO`M(``0!R(8WO`M(``0!R(8WO`M(``0!R(8WO`M(`M`%?C>^NT@`"TGX!
+MM%)A<B$:!P$`C>\"T@`"PP<<@`<`_O__T?___^@@JP#_Q00``B$<`0(`#@``
+M`0``_@C2(`$>____"```_?__$`#_W5A04)#_!&R&;;%DS,RWL0!)`(/__P#_
+M`/\`^?__\&3/)#)(L0!)`#J#+O_______REH%PHHV#!="0"N)$%SF_J;$___
+M_YP#%9,I````_________Q/_____________________________________
+M_RC_____`P````````#_____*/]!04%!0=U891/_9?]0/2[_______\I:!<*
+M*-@P70D`KB1!<YOZFQ/___^<_^5L*0```/________\3________________
+M______________________\H____/0T.#0I5"E!!W5AE$_]E_U`]/0T.#0I5
+M"E#;V^+;V]O;V____________W________________________________W_
+ME/\56BUL:#4M#0````%L<0!SI/\````!]9^?```5`"T-`````6P56BUL:#4M
+M#0````%L<0!SI/\````!]9^?```5`"T-`````6P56BUL:#4M#0````%L<0!S
+MI/\````!]9^?```5`"T-`````6P56BUL:#4M#0````%L<0!SI/\````!]9^?
+M```5`"T-`````6P56BUL:#4M#0````%L<0!SI/\````!]9^?```5`"T-````
+M`6P56BUL:#4M#0````%L<0!SI/\````!]9^?```5`"T-`````6P56BUL:#4M
+M#0````%L<0!SI/\````!]9^?8C,*-`HN"EQ<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<
+M7`3_________`F@`!+_)_P\LL`#__V%R(1H'``1G=$Q24``0````(`$`````
+M```,J7\`+@TU'`#]_P`!````````!EQ<8C<*-`HN"EQ<7%Q<7%Q<7%Q<7%Q<
+M7%Q<7%Q<7`3__RTQ#0I#;U!+`P31!-'1!-$$*%+KZB$6____[```````````
+M-WJ\KR<<\9WSM=;L```````````V``````#___^"@H(!!0("`@("`@("`@("
+M`@(/#P\/#P\/#P\/#U0ZS<@`_\/_/\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#
+MP\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/'P\/#PT```(F?GY_RGP&?
+MWY^?]4```(F?GY_RGP&?WY^?]4```(DO<V5T(&9L86=S/0HN"BX*+@HN"BX*
+M+@HN"BXN"BX*+@HN"BX*+@HN"BX*"BX*+@HN"BX*)@HN"BX*+@HN"BX*+@HN
+M"BX*+@HN"BX*+@HN"BX*+@HN"BX*+@HN"BX*+@`*+@HN"BY^+@HN"BX*+@HN
+M"BX*+@HN"@HN"BX*+@HN"BX*+@HN"BX*+@HA&@<`!&=T3%)0`!`````@4$L#
+M!#$`</^I?P`N#34<`/W_``$7%@I<7"Y<7%RT`5^-[P+2```$O\FTPT=2/%II
+9<`E)``8`````````C>\"T@``````````````
+`
+end
--- /dev/null
+begin 600 test_read_format_rar5_different_window_size.rar
+M4F%R(1H'`0"-[P+2``'#M#P\7P$'`0"-[P+2``7#`/KZ^OKZA5N8F)B8F)@`
+MF`*8T@7"F!=A_________P$$_____________________R%285(A&@?_____
+M_________________V@`[E##M#P\7P$'`0"-[P+2``7"87)26`!W=%)A<B$:
+M!P$`C>\"T@`"QP\)`'(A&@<!&B/2+0`"**%285(A&@=A<B$:!P$`C>\"T@`"
+MQP\`"7(AFC`!&B/2+0`"*"%285(A&@<8`0"-[P+2``7#10!A4B$:!Q@!`#)S
+M-/_______U)A<B$:!P$`C>\"T@`"!QS1T='1T='1T='6T='1T='1T='1T='1
+MT='1T='1T='1T='1T=&UQX`.`"'X"/\E``*H'#`"`/+__TO__O_G*_____\`
+M`"\O``#_02+M____`-X`_["&AFVQJ@,#45TW,?;V]@$``/____\3]O;V]O;_
+M_S\``/]!(.VG+R\``/]!(.T)__^PWOS_```O+S$``/8@[;L`````````````
+M-3XR9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<
+M7#)<7#9<,F1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9&1I9V5S7%Q<7'=E
+M9"XR9&EG97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF
+M+BX**%)A<B$:!P$`C>\"T@`"!QS1T='1T='1T='6T='1T='1T='1T='1T='1
+MT='1T='1T='1T=&UQX`.`"'X"/\E``*H'#`"`/+__TO__O_G*_____\``"\O
+M``#_02+M____`-X`_["&AFVQJ@,#45TW,?;V]@$````````3]O;V]O;__S\`
+M`/]!(.VG+R\``/]!(.T)__^PWOS_```O+P```/8@[;L`````````````-38R
+M9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7#)<
+M7#9<,F1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9&1I9V5S7%Q<7'=E9"XR
+M9&EG97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF+E)A
+M<B$:!P$`C>\"T@`"PP<<K/UN``#___\+`0`"(<O_`0(`+W-E="!T:6UE`/[_
+M_^P`````````````````````````````````````````````````````````
+M````````````````````````````````````````!0``````````````````
+M````````````````````````````````````````````````````````````
+M`````#\56BUL:#4M#0````%L<0!SI/\````!]9^?G_*?`9_?GY_U0.`56BUL
+M:```````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````&UM)C$@4@H#`\[_CQ5:+6QH-BTZ,PD@.W-L<0'(_P(````!
+M#B<G````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````]_\`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````P,#`P,#`P,#`P,#`P,#
+M`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````X-S(M,#$E,U0S.GH``O__/\/#P\/#P\/#P\/#(@##
+MP\/#PP'#P\/#P\/#P___________________________________________
+M____________________________]/_______\/#P\/#P\/#P\/#P\/#+</#
+MP\/#P^KJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZF1I9V5S=#TN"BX*+@H*)BXN
+M"B@*+BX**`HN"BX*+C`**`H*+@HN+E!<-3,R4>KJZNKJZNKJZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNK#P\/#P\/#P\/#R\-MP\/#
+MP\/#P\/#P\/#P\/#P\/#`</#P\/#P\/#____________________________
+M_________________________________________S8R9&EG97)T6STN"BX*
+M+@H*)F5V:6,V_________\/#P\/#P\/#P\/#P\/#+</#P\/#P\/#P\/#PS8N
+M"@HN"@HN+PHR,#<P-S`O<TYT("!@<W0]P\/#P\/#P\/#PP`0:#HR,PT*;%=O
+M861?;"X*+@IG89P`,#`P,#`P,#`P,#`P,#`P,#`!`#`W,#<P,C`P,#`P,#`P
+M,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,$,P,#`P,#`P,#`P,#`P
+M,#`P,#`P-3`P,#`X,#`P,#`P,#`P13`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P
+M,#`P,#`P`0`"*"%285(A&@<8`0"-[P+2``7#`!H'``1G``````````#O`M(`
+M`L</``D`+@DR'`#]`0`7__\)`"X),AP`_0$`%___$5)A<B'_$5)A<B$:AP$`
+MC>\"T@`#QP\`"2$:TB,M``(H(5)A4B$:!Q@!`(WO`M(`!0``````````````
+M`````````0``````_____P#_965E965E965E965E965E965E8'-T/2X*+@HN
+M"C(P-S`W,&EA='EA<B$*+@H*)BXF+@HH"BX*+@HN4%XO83(U:39D9V5S=#TN
+M"BX*+@H*)BXN"@H*)BXN"B@*+@HN"BY07#4S,C8R9"]S3G0@(%MS=#T]+@HN
+M"BX*"B8N+@HH"BX*+@HN4%PU,S(V(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
+M(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
+M(2$A(2X*"B8N+BY<-EPR9&EG97)T-38R9&EA=#TN"BX*="XN+@HH"BX*+@HN
+M4%QH83(U-F0N+PHR,"4P-S`O<TYT("!D<W0]+@HN"BX*"B9T/2X*+@HN"@H*
+M)BX*+BXH+PHN"BY07&AA,C4V9&EG97-T/2X*+@HN"@HF+BX**`H_+@HN"BY0
+M7%Q<7%Q<7%Q<7%Q<,C8R9&EG97)T-38R9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<
+M7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7#)<7#9<,F1I9V5R=#4V,F1I870]+@HN
+M"G0@9&5V270@9&1I9V5S=#TN"BX*+@H*)BXN"B@*+BX**`HN"BX]+@HN"BX*
+M"B8N+@HH"BX*+@HN4%Q<7%Q<7%Q<7%Q<7#(V,F1I9V5R=#4V,F1<7%Q<7%Q<
+M7%Q<7%Q<>EQ<*EQ<7%PO7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%PR7%PV7#!D:6=E
+M<G0U-C%D:6%T/2X*+@IT(&1E=DET(&0Z[NXZ,````"L-"E=!4D,M1&%T93H)
+M,3@W,BTP-RTS5#,Z-SHU6@T*#0I#BVYT^)=7=#%Z5T%20R\Q+C`-"D-O;G1E
+M;G0M3&5N9W1H.C`V#0I7*5=!4B\O.ZRL-&X*05)#+ZRL@9$-"DQA<W0M36]D
+M:69I960Z"3$X-S(M,#$E,U0S.GH``O__/\/#P\/#P\/#P\/#(@##P\/#PP'#
+MP\/#P\/#P______________________________________#P\/#P\/#P\,`
+M$&@Z,C,-"FQ7;V%D7VPN"BX*9V&<`#`P,#`P,#`P,#`P,#`P,#`P`0`P-S`W
+M,#(P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#!#,#`P
+M,#`P,#`P,#`P,#`P,#`P,#4P,#`P.#`P,#`P,#`P,$4P,#`P,#`P,#`P,#`P
+M,#`P,#`P,#`P,#`P,#`P,`$``B@A4F%2(1H'&`$`C>\"T@`%PP`:!P`$9P``
+M````````[P+2``+'#P`)`"X),AP`_0$`%___"0`N"3(<`/T!`!?__Q%287(A
+M_Q%287(A&H<!`(WO`M(``\</``DA&M(C+0`"*"%285(A&@<8`0"-[P+2``4`
+M``````````````````````$``````/____\``"\O``#_02#M____L-X`_P"&
+MAK%M]O;V`ZK^]O_/_P#$OM\1]O__L`#M4?\O45%/>\Q`"@HW,@```/V-[P+2
+M``+'`"X),1P`_0$`%___$5)A<@$`C>\"T@`%PP`:!P`$9P``````````[P+2
+M``+'#P`)`"X),AP`_0$`%___$5)A<B$:!P$`C>\"T@`#QP\`"2$:TB,M``DA
+M&M(C+0`"*"%285(A&@<8`0"-[P+2``7#`!H'`/R8__]E965E965E965E965E
+M965E965@<W0]+@HN"BX*,C`W,#<P:6%T>6%R(0HN"@HF+B8N"B@*+@HN"BY0
+M7B]A,C5I-F1G97-T/2X*+@HN"@HF+BX*"@HF+BX**`HN"BX*+E!<-3,R-C)D
+M+W-.="`@6W-T/3TN"BX*+@H*)BXN"B@*+@HN"BY07#4S,C8A(2$A(2$A(2$A
+M(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
+M(2$A(2$A(2$A(2$A(2$A(2$A+@H*)BXN+EPV7#)D:6=E<G0U-C)D:6%T/2X*
+M+@IT+BXN"B@*+@HN"BY07&AA,C4V9"XO"C(P)3`W,"]S3G0@(&1S=#TN"BX*
+M+@H*)G0]+@HN"BX*"@HF+@HN+B@O"BX*+E!<:&$R-39D:6=E<W0]+@HN"BX*
+M"B8N+@HH"C\N"BX*+E!<7%Q<7%Q<7%Q<7%PR-C)D:6=E<G0U-C)D7%Q<7%Q<
+M7%Q<7%Q<7'I<7"I<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<,EQ<-EPR9&EG
+M97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF+BX**`HN
+M+@HH"BX*+CTN"BX*+@H*)BXN"B@*+@HN"BY07%Q<7%Q<7%Q<7%Q<,C8R9&EG
+M97)T-38R9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<
+M7%Q<7#)<7#9<,&1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9#KN[CHP````
+M*PT*5T%20RU$871E.@DQ.#<R+3`W+3-4,SHW.C5:#0H-"D.+;G3XEU=T,7I7
+M05)#+S$N,`T*0V]N=&5N="U,96YG=&@Z,#8-"E<I5T%2+R\[K*PT;@I!4D,O
+MK*R!D0T*3&%S="U-;V1I9FEE9#H),3@W,BTP,24S5#,Z>@`"__\_P\/#P\/#
+MP\/#P\,B`,/#P\/#`</#P\/#P\/#________________________________
+M_______________________________________T________P\/#P\/#P\/#
+MP\/#P\,MP\/#P\/#ZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ9&EG97-T/2X*
+M+@HN"@HF+BX**`HN+@HH"BX*+@HN,`HH"@HN"BXN4%PU,S)1ZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZL/#P\/#P\/#
+MP\/+PVW#P\/#P\/#P\/#P\/#P\/#P\,!P\/#P\/#P\/_________________
+M____________________________________________________-C)D:6=E
+M<G1;/2X*+@HN"@HF979I8S;_________P\/#P\/#P\/#P\/#P\,MP\/#P\/#
+MP\/#P\/#-BX*"BX*"BXO"C(P-S`W,"]S3G0@(&!S=#W#P\/#P\/#P\/#`!!H
+M.C(S#0IL5V]A9%]L+@HN"F=AG``P,#`P,#`P,#`P,#`P,#`P,`$`,#<P-S`R
+M,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P0S`P,#`P
+M,#`P,#`P,#`P,#`P,#`U,#`P,#@P,#`P,#`P,#!%,#`P,#`P,#`P,#`P,#`P
+M,#`P,#`P,#`P,#`P,#`!``(H(5)A4B$:!Q@!`(WO`M(`!<,`&@<`!&<`````
+M`````.\"T@`"QP\`"0`N"3(<`/T!`!?__PD`+@DR'`#]`0`7__\14F%R(?\1
+M4F%R(1J'`0"-[P+2``/'#P`)(1K2(RT``B@A4F%2(1H'&`$`C>\"T@`%````
+M```````````````````!``````#_____```O+P``_T$@[?___[#>`/\`AH:Q
+M;?;V]@.J_O;_S_\`Q+[?$?;?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?___?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W_^[XP##
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````#_________
+M__________________________________________\`````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````"``````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````+8`````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````!287(A&@<!
+M`(WO`M(``L,''(`'`0#__PL!``(ARP$"`````/\`_P$`<<?_____________
+M______________________\!`````````/________\!````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````0``````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````_/\`````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````-_?W]_?W]_?W]_?W]_?W]_?#]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]\A("`@("`@(-_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]]V````W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?WT%.4TE?6-_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]O?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]]?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?WP``````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````/__________________
+M____________________________________________________````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``0`````````````````````````````````````````````````````````
+M`````````````````````````````````````````````P``````````````
+M``````````!A86$`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````,#`S,#@Q-@`P,S<T-3,T`#`P,3$V,3``,#`P
+M,#`P,#`P,#<`,3(U,S$Q-#4S-S$`(#$R,#<Q`"`Q````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````````'5S=&!R
+M`#`Q9'9Y=6MO=@````````````````````````````````!E;F<`````````
+M``````````#_`0```````````````#`P,``P,#`P,#`P,#`P,```````````
+M````````````````````````````````````````````````````````````
+M````````````````]P``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````#,*`````````````0```````!``
+M```````````````````$T031T4T```"`__\U*Q8T`````````-_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````F-(%PIAT;W!D:7+___\!!/__________
+M__________\A4F%2(1H'__________________\A4F%2(1H'____________
+M__________]H`.Y0P[0\/%\!!P$`C>\"T@`%PF%R4E@`=W1287(A&@<!`(WO
+M`M(``L</"0!R(1H'`1HCTCH``BBA75U=75U=75U=75U=75U=75U=75U=75T`
+M````````````````````````````````````````````````````````````
+M````````````````!````````````@``````````````````````````````
+M````````````````*```````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````'X````````````````````````````````````````$
+M(DT81'`=#P(`@'''`.[_________________________________________
+M_________________WP$________________________________________
+M_____________________________________________________[T``+JK
+MVP&ZNKJZ_____________S#_________________________````%@``````
+M``!^?GY^?GY^?GY^?GY^?GY^?GY^?GY^_________PI^?GY^?GY^?GY^?@`!
+M+?____8M+2TM"@H*"C(*"@H*"@H*"CT*"@H*"@H*"@H*"@H*"@!7(B___PS#
+M/0`P`&$!`&%A86">EFZ>45J>E"(8*1QP&#AP1O__`````!X`````````````
+MNKJZNKJZN@'U``"R____`````!X```"`````````````````````````````
+M`"Q!`````````"T`%0``:#H`6@$M<VPW-@#($0````````#BH0!C:3``,@!E
+M,0``________________````````````"@H*"@```%U=75U=75U=75U=75U=
+M70```````````````````````````````````%)A<B$:!P$`C>\"T@`"PP<<
+MP@2```#_;24``F<<`0(`#@```0!02P@#`"8F)@!`___/0T+_____\?__K2-T
+M='3_______[______R9"____,3,U__\3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3
+M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$R8J8BQB`/______0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V
+M-C8V&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H
+M*"@H*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``
+M````````````````````````````V]O;V]L`VP````#;V]L`VR@H*"@H*#8V
+M-C8V-C8V-C8VEC8V-C8V-C8VV]O;``````````````````````````````#;
+MV]O;VP#;`````-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;
+MV]O;V]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V
+M-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V
+M-C8VV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"0D(`
+M````````````````````````````````````````````````````````````
+M`````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V
+M-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"
+M*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````````
+M`````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"0D)"
+M0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+MV]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V
+M-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V
+M-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`
+M````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````
+M````````````````````V]O;V]L`VP````#;V]L`VP``````````````````
+M````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U2
+M85(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V
+M-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````````
+MV]O;V]L`VP````#;V]L`VP!W=%)A<B$:!P$`````````````````````````
+M`````(WO`M(``L</"0!R(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(`
+M`L</``ER(9HP`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%PT4```!&%<</``ER
+M(1H'`1HCTBT:!P$:#2$[````````=EL````````````0^OKZ^OJ%F)B8F)B8
+M`)@"F-(%PI@78?________\!!/____________________\A4F%2(1H'____
+M______________\A4F%2(1H'______________________]H`.Y0P[0\/%\!
+M!P$`C>\"T@`%PF%R4E@`=W1287(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH`
+M`BBA75U=75U=75U=75U=75U=75U=75U=75T`````````````````````````
+M````````````````````````````````````````````````````!```````
+M`````````````````````````````"@`````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````!^````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````0B31A$<!T/`@"`<<<`[O______________
+M____________________________________________?`3_____________
+M____________________________________________________________
+M____________________O0``NJO;`;JZNKK_____________,/__________
+M______________\````6`````````'Y^?GY^?GY^?GY^?GY^?GY^?GY^?G[_
+M________"GY^?GY^?GY^?GY^``$M____]BTM+2T*"@H*,@H*"@H*"@H*/0H*
+M"@H*"@H*"@H*"@H*`%<B+___#,,]`#``80$`86%A8)Z6;IY16IZ4(A@I''`8
+M.'!&__\`````'@````````````"ZNKJZNKJZ`?4``++___\`````'@```(``
+M````````````````````````````+$$`````````+0`5``!H.@!:`2US;#<V
+M`,@1`````````.*A`&-I,``R`&4Q``#_______________\````````````*
+M"@H*````75U=75U=75U=75U=75U=````````````````````````````````
+M````4F%R(1H'`0"-[P+2``+#!QS"!(```/]M)0`"9QP!`@`.```!`%!+"`,`
+M)B8F`$#__\]#0O_____Q__^M(W1T=/_______O______)D+___\Q,S7__Q,3
+M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3)BIB+&(`
+M_________\[.SL[.SL[.SL[.SL[.SJTC='1T_________S0S-C`Y.#(P-#/(
+MX%)#+40Z8`HR'YT/.6C@4D,M1#I@"C(?G0\Y:+1@@S4X`(``4F$N,R\**G-`
+M``````<``"\F*G,``L,''(`$@```_VTE^0)G'`$"``X```$`4$L(`P`F*F(L
+M8@#_W0`A``!/`/T`,3(P-#$R.#$P.3'(X%)#+40Z8`HR'YT/.&BT8(,U.```
+M`%)A+B\*,RIS`````````!D_)B]S+PHJ<R\*("8F)@!GP(XJ`````*^M(P\!
+M'R8F)B8G)B8F)B8F)B8F)B8F`$#__\]#0O\````````O)B9S+PHJ<R\*("8F
+M)A\F)B8F)B8F)B8F)B8F)"8F)@!`___/0T+_______^M(W1T=/__________
+M____________________________________________________________
+M____________________________________________________)B`F)A\F
+M)B8F)B8F)B8F)B8G)B8`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````]@``E#@X.#A=.#@XY>7EY0H```#EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>5W=V%R(2\O+R`N"@H*75U=75U9R,C(R,C(R,C(R,C(R"<.`'\`
+M``I=70!=!UU=7=D`Y>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY4$X.#@X]C@X+3@X.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#AR.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X./DX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X<C@X.'?^_________QE,
+M(0(V-C8V-C8V-C8V-C8V,AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-@@V-C8V
+MEC8V-C8V-C8VV]O;V]O;V]O_V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V-C8V
+M-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+M-C8V-C8VV]O;V]O;V]O;V]M=75U=75U=75U=75U=75U=75U=7=O;V]O;V]O;
+M-C8V-C8V-AE,(0(V-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MVS8V-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-C8V
+M-C8V-C8V-C8VEC8V-C8V-C8VV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;0D)"0@``````````````````````````
+M````````````````````````````````````````````````0D)"0D)"0D)"
+M<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U285(A&@=A<D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;
+MV]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V
+M-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V
+M-C8V-C8V-MO;VP``````````````````````````````V]O;V]L`VP````#;
+MV]L`VP``````````````````````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)=75U285(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H
+M*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````
+M````````````````````````V]O;V]L`VP````#;V]L`VR@H*"@H*#8V-C8V
+M-C8V-C8VEC8V-C8V-C8VV]O;``````````````````````````````#;V]O;
+MVP#;`````-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;
+MV]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H
+M*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8V
+MV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;`M(`
+M`L</"0!R(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(``L</``ER(9HP
+M`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%P_J%6YB8F)B8F`"8`IC2!<*8%V'_
+M________`03_____________________(5)A4B$:!___________________
+M____:`#N4,.T/#Q?`0<!`(WO`M(`!<)A<E)8`'=T4F%R(1H'`0"-[P+2``+'
+M#PD`<B$:!P$:(](M``(HH5)A4B$:!V%R(1H'`0"-[P+2``+'#P`)<B&:,`$:
+M(](M`!(H(5)A4B$:!Q@!`(WO`M(`!<-%7P$'`0"-[P+2``72``+'#P`)<B&:
+M,`$:(](M``(H(5)A4B$:!Q@!`(WO`M(`!</ZA5N8F)B8F)@`F`*8T@7"F!=A
+M_________P$$_____________________R%285(A&@?_________________
+M_____V@`[E##M#P\7P$'`0"-[P+2``7"87)26`!W=%)A<B$:!P$`C>\"T@`"
+MQP\)`'(A&@<!&B/2+0`"**%285(A&@=A<B$:!P$`C>\"T@`"QP\`"7(AFC`!
+M&B/2+0`"*"%285(A&@<8`0"-[P+2``7#15\!!P$`C>\"T@`%PF%R4E@`=W12
+M87(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH``BBA4F%2(1H'87(A&@<!`(WO
+M`M(``L</``ER(9HP`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%PP```$85!<)A
+M<E)8`'=T4F%R(1H'`0"-[P+2``+'#PD`<B$:!P$:(](M``(HH5)A4B$:!V%R
+M(1H'`0"-[P+2``+'#P`)<B&:,`$:(](M``(H(5)A4B$:!Q@!`(WO`M(`!</Z
+MA5N8F)B8F)@`F`*8T@7"F!=A_______?_P$$_____________________R%2
+M85(A&@?______________________V@`[E##M#P\7P$'`0"-[P+2``7"87)2
+M6`!W=%)A<B$:!P$``````````````````````````````(WO`M(``L</"0!R
+M(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(``L</``ER(9HP`1HCTBT`
+M`B@A4F%2(1H'&`$`C>\"T@`%PT4```!&%<</``ER(1H'`1HCTBT:!P$:#2$[
+M````````=EL````````````0^OKZ^OJ%F)B8F)B8`)@"F-(%PI@78?______
+M__\!!/____________________\A4F%2(1H'__________________\A4F%2
+M(1H'______________________]H`.Y0P[0\/%\!!P$`C>\"T@`%PF%R4E@`
+M=W1287(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH``BBA75U=75U=75U=75U=
+M75U=75U=75U=75T`````````````````````````````````````````````
+M````````````````````````````````!````````````@``````````````
+M````````````````````````````````*```````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````'X`````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````!")-&$1P'0\"`(!QQP#N____________
+M______________________________________________]\!/__________
+M____________________________________________________________
+M______________________^]``"ZJ]L!NKJZNO____________\P________
+M_________________P```!8`````````?GY^?GY^?GY^?GY^?GY^?GY^?GY^
+M?O________\*?GY^?GY^?GY^?GX``2W____V+2TM+0H*"@HR"@H*"@H*"@H]
+M"@H*"@H*"@H*"@H*"@H`5R(O__\,PST`,`!A`0!A86%@GI9NGE%:GI0B&"D<
+M<!@X<$;__P`````>`````````````+JZNKJZNKH!]0``LO___P`````>````
+M@``````````````````````````````L00`````````M`!4``&@Z`%H!+7-L
+M-S8`R!$`````````XJ$`8VDP`#(`93$``/_______________P``````````
+M``H*"@H```!=75U=75U=75U=75U=75T`````````````````````````````
+M``````!287(A&@<!`(WO`M(``L,'',($@```_VTE``)G'`$"``X```$`4$L(
+M`P`F)B8`0/__ST-"______'__ZTC='1T_______^______\F0O___S$S-?__
+M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,F*F(L
+M8@#_________SL[.SL[.SL[.SL[.SL[.K2-T='3_________-#,V,#DX,C`T
+M,\C@4D,M1#I@"C(?G0\Y:.!20RU$.F`*,A^=#SEHM&"#-3@`@`!282XS+PHJ
+M<T``````!P``+R8J<P`"PP<<@`2```#_;27Y`F<<`0(`#@```0!02P@#`"8J
+M8BQB`/_=`"$``$\`_0`Q,C`T,3(X,3`Y,<C@4D,M1#I@"C(?G0\X:+1@@S4X
+M````4F$N+PHS*G,`````````&3\F+W,O"BIS+PH@)B8F`&?`CBH`````KZTC
+M#P$?)B8F)B<F)B8F)B8F)B8F)B8`0/__ST-"_P```````"\F)G,O"BIS+PH@
+M)B8F'R8F)B8F)B8F)B8F)B8D)B8F`$#__\]#0O_______ZTC='1T________
+M____________________________________________________________
+M______________________________________________________\F("8F
+M'R8F)B8F)B8F)B8F)B<F)@``````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````#V``"4.#@X.%TX.#CEY>7E"@```.7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY7=W87(A+R\O("X*"@I=75U=75G(R,C(R,C(R,C(R,C()PX`
+M?P``"EU=`%T'75U=V0#EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7E03@X.#CV.#@M.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.'(X.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X^3@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#AR.#@X=_[_________
+M&4PA`C8V-C8V-C8V-C8V-C8R&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V"#8V
+M-C:6-C8V-C8V-C;;V]O;V]O;V__;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-C8V
+M-C8V-C8V-@@V-C8VEC8V-C8V-C8VV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]LV-C8V-C;;V]O;V]O;V]O;VUU=75U=75U=75U=75U=75U=75U=V]O;V]O;
+MV]LV-C8V-C8V&4PA`C8V-C8V-C8V-MO;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V
+M-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]M"0D)"````````````````````````
+M``````````````````````````````````````````````````!"0D)"0D)"
+M0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;
+MV]O;V]O;V]O;V]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V
+M-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8V
+MEC8V-C8V-C8VV]O;``````````````````````````````#;V]O;VP#;````
+M`-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V
+M-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H
+M*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````
+M``````````````````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V
+M-C8V-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;
+MV]O;`-L`````V]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;
+MV]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V
+M*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V
+M-C;;V]L``````````````````````````````-O;V]O;`-L`````V]O;`-O_
+M____________________________________________________________
+M_____________________R8@)B8?)B8F)B8F)B8F)B8F)R8F````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````/8``)0X.#@X73@X..7EY>4*````
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E=W=A<B$O+R\@+@H*"EU=
+M75U=6<C(R,C(R,C(R,C(R,@G#@!_```*75T`70==75W9`.7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>5!.#@X
+M./8X."TX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X<C@X.#@X.#@X.#@X.#@X.#@X.#@X.#CY.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X.'(X.#AW_O________\93"$"-C8V-C8V-C8V-C8V-C(93"$"-C8V
+M-C8V-C8V-C8V-C8V-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;_]O;V]O;
+MV]O;V]O;V]O;V]O;-C8V-C8V-C8V-C8V-C8V"#8V-C:6-C8V-C8V-C;;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-MO;V]O;V]O;V]O;75U=75U=
+M75U=75U=75U=75U=75W;V]O;V]O;VS8V-C8V-C893"$"-C8V-C8V-C8VV]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V
+M-C8V&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"
+M0D(`````````````````````````````````````````````````````````
+M`````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V
+M-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`
+MC>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````
+M`````````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"
+M0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'
+M87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V
+M-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V
+M-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;
+M`-L`````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````
+M````````````````````````V]O;V]L`VP````#;V]L`VP``````````````
+M````````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=
+M75U285(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V
+M-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H
+M*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````
+M````V]O;V]L`VP````#;V]L`V]O;V]O;V]O;V]O;V]O;V]O;V]O;-C8V-C8V
+M-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-C8V
+M-C:6-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]M"0D)"````````````````````````````````````
+M``````````````````````````````````````!"0D)"0D)"0D)S0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;
+MV]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H
+M*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8V
+MV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;````
+M``````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C893"$"-C8V
+M-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!
+M`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````````````
+M``````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V-C8V-C:6
+M-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`````
+MV]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V
+M-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H
+M*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````
+M`````````````````````````-O;V]O;`-L`````V]O;`-L"-C8V-C8V-C8V
+M-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V
+M-C8V-C8VV]O;``````````````````````````````#;V]O;VP#;`````-O;
+MVP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C89
+M3"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H
+M*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````
+M``````````````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V
+M-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;
+M`-L`````V]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;
+MVS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H
+M*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;
+MV]L``````````````````````````````-O;V]O;`-L`````V]O;`-O_____
+M____________________________________________________________
+M_________________R8@)B8?)B8F)B8F)B8F)B8F)R8F````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````/8``)0X.#@X73@X..7EY>4*````Y>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E=W=A<B$O+R\@+@H*"EU=75U=
+M6<C(R,C(R,C(R,C(R,@G#@!_```*75T`70==75W9`.7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>5!.#@X./8X
+M."TX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X
+M<C@X.#@X.#@X.#@X.#@X.#@X.#@X.#CY.#@X.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X.'(X.#AW_O________\93"$"-C8V-C8V-C8V-C8V-C(93"$"-C8V-C8V
+M-C8V-C8V-C8V-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;_]O;V]O;V]O;
+MV]O;V]O;V]O;-C8V-C8V-C8V-C8V-C8V"#8V-C:6-C8V-C8V-C;;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-MO;V]O;V]O;V]O;75U=75U=75U=
+M75U=75U=75U=75W;V]O;V]O;VS8V-C8V-C893"$"-C8V-C8V-C8VV]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"0D(`
+M````````````````````````````````````````````````````````````
+M`````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V
+M-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"
+M*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````````
+M`````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"0D)"
+M0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+MV]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V
+M-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V
+M-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`
+M````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````
+M````````````````````V]O;V]L`VP````#;V]L`VP``````````````````
+M````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U2
+M85(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V
+M-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````````
+MV]O;V]L`VP````#;V]L`V]O;V]O;V]O;V]O;V]O;V]O;V]O;-C8V-C8V-AE,
+M(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-C:6
+M-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]M"0D)"````````````````````````````````````````
+M``````````````````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV
+M-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H
+M*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;
+M``````````````````````````````#;V]O;VP#;`````-O;VP#;````````
+M``````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C893"$"-C8V-C8V
+M-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO
+M`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````````````````
+M``````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V-C8V-C:6-C8V
+M-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`````V]O;
+M`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,
+M(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H
+M*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````
+@`````````````````````-O;V]O;`-L`````V]O;`-L`
+`
+end
--- /dev/null
+begin 644 test_read_format_rar5_different_winsize_on_merge.rar.uu
+M4F%R(1H'`0"-[P+2``+''QP,!`H``"0`N)$#`0(H$"<"``X`/3Q/`0"V````
+MQ@$````V`/^%02`H^B7&,NX``"F&AK%M-50O<WY2!P$`C>\"T@`"_[6U,1"U
+MM;6UM[BU45)A<K6UM;6UM+6U```\______?______________P`&80"-[P+2
+MT@`#TA________\`M,-:!`8``(0A_^\"TE)A<J$?Y@<!`(WO`BCZ)<8R[@``
+M*8:&L6TU5"]S?E('`0"-[P+2``+_M0`````````DM3$0M;6UM;>XM5%287*U
+MM;6UM;2UM0``//_____W______________\`!F$`C>\"TM(``](?________
+M`+3#6@0&D0,!`B@0)P(`#@`]/$\!`+8```#&`0```#8`_X5!("CZ)<8R[@``
+M*8:&L6TU5"]S?E(`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````<!`(WO````
+M`````````````````````````````````````````````````````$``````
+M`````````````````````````````````#$S-S4V-#<`_P0$!`0G!`0$!`0$
+"!`0`
+`
+end
--- /dev/null
+begin 664 test_read_format_rar_ppmd_use_after_free2.rar
+M4F%R(1H'``1G=$Q24`!W````>U!+`P0Q`'#_J7\`+@TU'`#]`0`7__]"0D)"
+M+W5N)B8F)F=I9`UD#1T+``!"`````````&%R(1H'``3_________`F@`H2``
+M``"`P\/#2\/#P\/#P\/#P\-3PP"`P\/#PYZ>AYZ>GI[#4\,`@,/#`L,@(""=
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(/______
+M__\@("`@("`@("`@("`@("`@("`@("`@("`$9W1,4E``=P```'M02P,$,0!P
+M_ZE_`"X--1P`_0$`%___0D)"0B]U;B8F)B9G:60-9`T="P``0@````````!A
+0<B$:!P`$_________P)H````
+`
+end
const char *reffile1 = "test_read_format_raw.data";
const char *reffile2 = "test_read_format_raw.data.Z";
const char *reffile3 = "test_read_format_raw.bufr";
+#ifdef HAVE_ZLIB_H
const char *reffile4 = "test_read_format_raw.data.gz";
+#endif
/* First, try pulling data out of an uninterpretable file. */
extract_reference_file(reffile1);
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#ifdef HAVE_ZLIB_H
/* Fourth, try with gzip which has metadata. */
extract_reference_file(reffile4);
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
}
} else {
assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
} else {
assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae));
} else {
assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
} else {
assertEqualIntA(a, ARCHIVE_FAILED, archive_read_extract(a, ae, 0));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
assertEqualInt(ARCHIVE_FAILED,
archive_read_data(a, buff, sizeof(buff)));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
assertEqualInt(ARCHIVE_FAILED,
archive_read_data(a, buff, sizeof(buff)));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
assert(DeviceIoControl(handle, FSCTL_SET_SPARSE, NULL, 0,
NULL, 0, &dmy, NULL) != 0);
- size_t offsetSoFar = 0;
+ uint64_t offsetSoFar = 0;
while (s->type != END) {
if (s->type == HOLE) {
{
char buff[1024];
int fd;
- size_t total_size = 0;
+ uint64_t total_size = 0;
const struct sparse *cur = s;
memset(buff, ' ', sizeof(buff));
{ 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
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));
char *buff, *data;
size_t buffsize, datasize;
char path[16];
- size_t used1, used2;
+ size_t used1, used2, used3;
int i, r;
buffsize = 2000000;
assertEqualIntA(a, ARCHIVE_OK,
archive_write_set_filter_option(a, NULL, "compression-level", "9"));
assertEqualIntA(a, ARCHIVE_OK,
- archive_write_set_filter_option(a, NULL, "compression-level", "6"));
+ archive_write_set_filter_option(a, NULL, "compression-level", "7"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
sprintf(path, "file%03d", i);
assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
- failure("compression-level=6 wrote %d bytes, default wrote %d bytes",
- (int)used2, (int)used1);
- assert(used2 < used1);
-
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
r = archive_read_support_filter_zstd(a);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
/*
+ * One more time at level 1
+ */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_ustar(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_bytes_per_block(a, 10));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_zstd(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "compression-level", "1"));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used3));
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_set_filetype(ae, AE_IFREG);
+ archive_entry_set_size(ae, datasize);
+ for (i = 0; i < 100; i++) {
+ sprintf(path, "file%03d", i);
+ archive_entry_copy_pathname(ae, path);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ assertA(datasize == (size_t)archive_write_data(a, data, datasize));
+ }
+ archive_entry_free(ae);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ r = archive_read_support_filter_zstd(a);
+ if (r == ARCHIVE_WARN) {
+ skipping("zstd reading not fully supported on this platform");
+ } else {
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_memory(a, buff, used3));
+ for (i = 0; i < 100; i++) {
+ sprintf(path, "file%03d", i);
+ failure("Trying to read %s", path);
+ if (!assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_next_header(a, &ae)))
+ break;
+ assertEqualString(path, archive_entry_pathname(ae));
+ assertEqualInt((int)datasize, archive_entry_size(ae));
+ }
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ }
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+ /*
+ * Check output sizes for various compression levels, expectation
+ * is that archive size for level=7 < default < level=1
+ */
+ failure("compression-level=7 wrote %d bytes, default wrote %d bytes",
+ (int)used2, (int)used1);
+ assert(used2 < used1);
+ failure("compression-level=1 wrote %d bytes, default wrote %d bytes",
+ (int)used3, (int)used1);
+ assert(used1 < used3);
+
+ /*
* Test various premature shutdown scenarios to make sure we
* don't crash or leak memory.
*/
restricted pax format and bzip2 compression.
.It Fl Fl acls
(c, r, u, x modes only)
-Archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of
+Archive or extract POSIX.1e or NFSv4 ACLs.
+This is the reverse of
.Fl Fl no-acls
and the default behavior in c, r, and u modes (except on Mac OS X) or if
.Nm
-is run in x mode as root. On Mac OS X this option translates extended ACLs
-to NFSv4 ACLs. To store extended ACLs the
+is run in x mode as root.
+On Mac OS X this option translates extended ACLs to NFSv4 ACLs.
+To store extended ACLs the
.Fl Fl mac-metadata
option is preferred.
.It Fl B , Fl Fl read-full-blocks
By default, the modification time is set to the time stored in the archive.
.It Fl Fl mac-metadata
(c, r, u and x mode only)
-Mac OS X specific. Archive or extract extended ACLs and extended file
+Mac OS X specific.
+Archive or extract extended ACLs and extended file
attributes using
.Xr copyfile 3
-in AppleDouble format. This is the reverse of
+in AppleDouble format.
+This is the reverse of
.Fl Fl no-mac-metadata .
and the default behavior in c, r, and u modes or if
.Nm
.Xr find 1 .
.It Fl Fl no-acls
(c, r, u, x modes only)
-Do not archive or extract POSIX.1e or NFSv4 ACLs. This is the reverse of
+Do not archive or extract POSIX.1e or NFSv4 ACLs.
+This is the reverse of
.Fl Fl acls
and the default behavior if
.Nm
is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes).
.It Fl Fl no-fflags
(c, r, u, x modes only)
-Do not archive or extract file attributes or file flags. This is the reverse of
+Do not archive or extract file attributes or file flags.
+This is the reverse of
.Fl Fl fflags
and the default behavior if
.Nm
is run as non-root in x mode.
.It Fl Fl no-mac-metadata
(x mode only)
-Mac OS X specific. Do not archive or extract ACLs and extended file attributes
+Mac OS X specific.
+Do not archive or extract ACLs and extended file attributes
using
.Xr copyfile 3
-in AppleDouble format. This is the reverse of
+in AppleDouble format.
+This is the reverse of
.Fl Fl mac-metadata .
and the default behavior if
.Nm
is run as non-root.
.It Fl Fl no-xattrs
(c, r, u, x modes only)
-Do not archive or extract extended file attributes. This is the reverse of
+Do not archive or extract extended file attributes.
+This is the reverse of
.Fl Fl xattrs
and the default behavior if
.Nm
.It Cm gzip:compression-level
A decimal integer from 1 to 9 specifying the gzip compression level.
.It Cm gzip:timestamp
-Store timestamp. This is enabled by default, use
+Store timestamp.
+This is enabled by default, use
.Cm !timestamp
or
.Cm gzip:!timestamp
.It Cm lz4:compression-level
A decimal integer from 1 to 9 specifying the lzop compression level.
.It Cm lz4:stream-checksum
-Enable stream checksum. This is by default, use
+Enable stream checksum.
+This is by default, use
.Cm lz4:!stream-checksum
to disable.
.It Cm lz4:block-checksum
aes128 (WinZip AES-128 encryption) and aes256 (WinZip AES-256 encryption).
.It Cm read_concatenated_archives
Ignore zeroed blocks in the archive, which occurs when multiple tar archives
-have been concatenated together. Without this option, only the contents of
-the first concatenated archive would be read. This option is comparable to
-the
+have been concatenated together.
+Without this option, only the contents of
+the first concatenated archive would be read.
+This option is comparable to the
.Fl i , Fl Fl ignore-zeros
option of GNU tar.
.El
Preserve file permissions.
Attempt to restore the full permissions, including file modes, file attributes
or file flags, extended file attributes and ACLs, if available, for each item
-extracted from the archive. This is the reverse of
+extracted from the archive.
+This is the reverse of
.Fl Fl no-same-permissions
and the default if
.Nm
-is being run as root. It can be partially overridden by also specifying
+is being run as root.
+It can be partially overridden by also specifying
.Fl Fl no-acls ,
.Fl Fl no-fflags ,
.Fl Fl no-mac-metadata
for more information about the handling of exclusions.
.It Fl Fl xattrs
(c, r, u, x modes only)
-Archive or extract extended file attributes. This is the reverse of
+Archive or extract extended file attributes.
+This is the reverse of
.Fl Fl no-xattrs
and the default behavior in c, r, and u modes or if
.Nm
To move file hierarchies, invoke
.Nm
as
-.Dl Nm Fl cf Pa - Fl C Pa srcdir\ . | Nm Fl xpf Pa - Fl C Pa destdir
+.Dl Nm Fl cf Pa - Fl C Pa srcdir \&. | Nm Fl xpf Pa - Fl C Pa destdir
or more traditionally
-.Dl cd srcdir \&; Nm Fl cf Pa -\ . | ( cd destdir \&; Nm Fl xpf Pa - )
+.Dl cd srcdir \&; Nm Fl cf Pa - \&. | ( cd destdir \&; Nm Fl xpf Pa - )
.Pp
In create mode, the list of files and directories to be archived
can also include directory change instructions of the form
.Xr mtree 5
format can be used to create an output archive with arbitrary ownership,
permissions, or names that differ from existing data on disk:
-.Pp
.Bd -literal -offset indent
$ cat input.mtree
#mtree
"d2/file4\n",
"test5.out");
- /* Test 6: -t without -n and non-existant directory selected */
+ /* Test 6: -t without -n and non-existent directory selected */
assertEqualInt(0,
systemf("%s -tf partial-archive.tar d2 >test6.out 2>test6.err",
testprog));
assertTextFileContents("d2/file4\n",
"test6.out");
- /* Test 7: -t with -n and non-existant directory selected */
+ /* Test 7: -t with -n and non-existent directory selected */
status = systemf("%s -tnf partial-archive.tar d2 "
">test7.out 2>test7.err", testprog);
assert(status);
DEFINE_TEST(test_option_xattrs)
{
#if !ARCHIVE_XATTR_SUPPORT
- skipping("Extended atributes are not supported on this platform");
+ skipping("Extended attributes are not supported on this platform");
#else /* ARCHIVE_XATTR_SUPPORT */
const char *testattr = "user.libarchive.test";
ret = (*f)(src, tgt, tmpflags);
/*
* Prior to Windows 10 the SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
- * is not undestood
+ * is not understood
*/
if (!ret)
ret = (*f)(src, tgt, flags);
return (0);
if (contents == NULL)
return (1);
- linklen = readlink(pathname, buff, sizeof(buff));
+ linklen = readlink(pathname, buff, sizeof(buff) - 1);
if (linklen < 0) {
failure_start(file, line, "Can't read symlink %s", pathname);
failure_finish(NULL);