Import libarchive-2.2.8
This commit is contained in:
parent
811834c8cf
commit
0b70660c7a
24 changed files with 9838 additions and 303 deletions
|
@ -9,8 +9,7 @@ EXTRA_DIST= version \
|
|||
examples \
|
||||
libarchive/test/list.h \
|
||||
tar/test \
|
||||
tar/getdate.c \
|
||||
cpio
|
||||
tar/getdate.c
|
||||
|
||||
# Clean out some unneeded files and directories
|
||||
# that get picked up as part of the directories in EXTRA_DIST above.
|
||||
|
@ -30,9 +29,9 @@ distclean-local:
|
|||
|
||||
# Always build libarchive, regardless
|
||||
lib_LTLIBRARIES= libarchive.la
|
||||
bin_PROGRAMS= $(bsdtar_programs)
|
||||
bin_PROGRAMS= $(bsdtar_programs) $(bsdcpio_programs)
|
||||
check_PROGRAMS= libarchive_test
|
||||
dist_man_MANS=$(libarchive_dist_man_MANS) $(bsdtar_dist_man_MANS)
|
||||
dist_man_MANS=$(libarchive_dist_man_MANS) $(bsdtar_dist_man_MANS) $(bsdcpio_dist_man_MANS)
|
||||
TESTS= libarchive_test
|
||||
|
||||
#
|
||||
|
@ -73,6 +72,7 @@ libarchive_la_SOURCES= \
|
|||
libarchive/archive_read_support_format_cpio.c \
|
||||
libarchive/archive_read_support_format_empty.c \
|
||||
libarchive/archive_read_support_format_iso9660.c \
|
||||
libarchive/archive_read_support_format_mtree.c \
|
||||
libarchive/archive_read_support_format_tar.c \
|
||||
libarchive/archive_read_support_format_zip.c \
|
||||
libarchive/archive_string.c \
|
||||
|
@ -152,6 +152,7 @@ libarchive_test_SOURCES= \
|
|||
libarchive/test/test_read_format_gtar_sparse.c \
|
||||
libarchive/test/test_read_format_iso_gz.c \
|
||||
libarchive/test/test_read_format_isorr_bz2.c \
|
||||
libarchive/test/test_read_format_mtree.c \
|
||||
libarchive/test/test_read_format_pax_bz2.c \
|
||||
libarchive/test/test_read_format_tar.c \
|
||||
libarchive/test/test_read_format_tbz.c \
|
||||
|
@ -212,8 +213,8 @@ bsdtar_static=
|
|||
endif
|
||||
|
||||
bsdtar_LDADD= libarchive.la
|
||||
bsdtar_CPPFLAGS=-I$(top_builddir)/libarchive
|
||||
bsdtar_LDFLAGS= $(bsdtar_static) -I$(destdir)/libarchive
|
||||
bsdtar_CPPFLAGS=-I$(top_builddir)/libarchive -I$(top_srcdir)/libarchive
|
||||
bsdtar_LDFLAGS= $(bsdtar_static)
|
||||
|
||||
if BUILD_BSDTAR
|
||||
bsdtar_dist_man_MANS= tar/bsdtar.1
|
||||
|
@ -223,3 +224,33 @@ bsdtar_dist_man_MANS=
|
|||
bsdtar_programs=
|
||||
endif
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
# bsdcpio source, docs, etc.
|
||||
#
|
||||
#
|
||||
|
||||
bsdcpio_SOURCES= \
|
||||
cpio/cpio.c \
|
||||
cpio/cpio.h \
|
||||
cpio/cpio_platform.h \
|
||||
cpio/util.c
|
||||
|
||||
bsdcpio_DEPENDENCIES = libarchive.la \
|
||||
libarchive/archive_entry.h \
|
||||
libarchive/archive.h
|
||||
|
||||
bsdcpio_static= -static
|
||||
bsdcpio_LDADD= libarchive.la
|
||||
bsdcpio_CPPFLAGS=-I$(top_builddir)/libarchive -I$(top_srcdir)/libarchive
|
||||
bsdcpio_LDFLAGS= $(bsdcpio_static)
|
||||
|
||||
if BUILD_BSDCPIO
|
||||
bsdcpio_dist_man_MANS= cpio/bsdcpio.1
|
||||
bsdcpio_programs=bsdcpio
|
||||
else
|
||||
bsdcpio_dist_man_MANS=
|
||||
bsdcpio_programs=
|
||||
endif
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ PRE_UNINSTALL = :
|
|||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
bin_PROGRAMS = $(am__EXEEXT_1)
|
||||
bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
|
||||
check_PROGRAMS = libarchive_test$(EXEEXT)
|
||||
TESTS = libarchive_test$(EXEEXT)
|
||||
subdir = .
|
||||
|
@ -92,6 +92,7 @@ am_libarchive_la_OBJECTS = \
|
|||
libarchive/libarchive_la-archive_read_support_format_cpio.lo \
|
||||
libarchive/libarchive_la-archive_read_support_format_empty.lo \
|
||||
libarchive/libarchive_la-archive_read_support_format_iso9660.lo \
|
||||
libarchive/libarchive_la-archive_read_support_format_mtree.lo \
|
||||
libarchive/libarchive_la-archive_read_support_format_tar.lo \
|
||||
libarchive/libarchive_la-archive_read_support_format_zip.lo \
|
||||
libarchive/libarchive_la-archive_string.lo \
|
||||
|
@ -123,8 +124,15 @@ libarchive_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
|||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(libarchive_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
@BUILD_BSDTAR_TRUE@am__EXEEXT_1 = bsdtar$(EXEEXT)
|
||||
@BUILD_BSDCPIO_TRUE@am__EXEEXT_2 = bsdcpio$(EXEEXT)
|
||||
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
am_bsdcpio_OBJECTS = cpio/bsdcpio-cpio.$(OBJEXT) \
|
||||
cpio/bsdcpio-util.$(OBJEXT)
|
||||
bsdcpio_OBJECTS = $(am_bsdcpio_OBJECTS)
|
||||
bsdcpio_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bsdcpio_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
am_bsdtar_OBJECTS = tar/bsdtar-bsdtar.$(OBJEXT) \
|
||||
tar/bsdtar-getdate.$(OBJEXT) tar/bsdtar-matching.$(OBJEXT) \
|
||||
tar/bsdtar-read.$(OBJEXT) tar/bsdtar-tree.$(OBJEXT) \
|
||||
|
@ -156,6 +164,7 @@ am__objects_1 = \
|
|||
libarchive/libarchive_test-archive_read_support_format_cpio.$(OBJEXT) \
|
||||
libarchive/libarchive_test-archive_read_support_format_empty.$(OBJEXT) \
|
||||
libarchive/libarchive_test-archive_read_support_format_iso9660.$(OBJEXT) \
|
||||
libarchive/libarchive_test-archive_read_support_format_mtree.$(OBJEXT) \
|
||||
libarchive/libarchive_test-archive_read_support_format_tar.$(OBJEXT) \
|
||||
libarchive/libarchive_test-archive_read_support_format_zip.$(OBJEXT) \
|
||||
libarchive/libarchive_test-archive_string.$(OBJEXT) \
|
||||
|
@ -206,6 +215,7 @@ am_libarchive_test_OBJECTS = $(am__objects_1) \
|
|||
libarchive/test/libarchive_test-test_read_format_gtar_sparse.$(OBJEXT) \
|
||||
libarchive/test/libarchive_test-test_read_format_iso_gz.$(OBJEXT) \
|
||||
libarchive/test/libarchive_test-test_read_format_isorr_bz2.$(OBJEXT) \
|
||||
libarchive/test/libarchive_test-test_read_format_mtree.$(OBJEXT) \
|
||||
libarchive/test/libarchive_test-test_read_format_pax_bz2.$(OBJEXT) \
|
||||
libarchive/test/libarchive_test-test_read_format_tar.$(OBJEXT) \
|
||||
libarchive/test/libarchive_test-test_read_format_tbz.$(OBJEXT) \
|
||||
|
@ -246,10 +256,10 @@ YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
|
|||
LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
|
||||
YLWRAP = $(top_srcdir)/config.aux/ylwrap
|
||||
SOURCES = $(libarchive_la_SOURCES) $(bsdtar_SOURCES) \
|
||||
$(libarchive_test_SOURCES)
|
||||
DIST_SOURCES = $(libarchive_la_SOURCES) $(bsdtar_SOURCES) \
|
||||
$(libarchive_test_SOURCES)
|
||||
SOURCES = $(libarchive_la_SOURCES) $(bsdcpio_SOURCES) \
|
||||
$(bsdtar_SOURCES) $(libarchive_test_SOURCES)
|
||||
DIST_SOURCES = $(libarchive_la_SOURCES) $(bsdcpio_SOURCES) \
|
||||
$(bsdtar_SOURCES) $(libarchive_test_SOURCES)
|
||||
man1dir = $(mandir)/man1
|
||||
man3dir = $(mandir)/man3
|
||||
man5dir = $(mandir)/man5
|
||||
|
@ -394,13 +404,12 @@ EXTRA_DIST = version \
|
|||
examples \
|
||||
libarchive/test/list.h \
|
||||
tar/test \
|
||||
tar/getdate.c \
|
||||
cpio
|
||||
tar/getdate.c
|
||||
|
||||
|
||||
# Always build libarchive, regardless
|
||||
lib_LTLIBRARIES = libarchive.la
|
||||
dist_man_MANS = $(libarchive_dist_man_MANS) $(bsdtar_dist_man_MANS)
|
||||
dist_man_MANS = $(libarchive_dist_man_MANS) $(bsdtar_dist_man_MANS) $(bsdcpio_dist_man_MANS)
|
||||
|
||||
#
|
||||
# Libarchive headers, source, etc.
|
||||
|
@ -438,6 +447,7 @@ libarchive_la_SOURCES = \
|
|||
libarchive/archive_read_support_format_cpio.c \
|
||||
libarchive/archive_read_support_format_empty.c \
|
||||
libarchive/archive_read_support_format_iso9660.c \
|
||||
libarchive/archive_read_support_format_mtree.c \
|
||||
libarchive/archive_read_support_format_tar.c \
|
||||
libarchive/archive_read_support_format_zip.c \
|
||||
libarchive/archive_string.c \
|
||||
|
@ -518,6 +528,7 @@ libarchive_test_SOURCES = \
|
|||
libarchive/test/test_read_format_gtar_sparse.c \
|
||||
libarchive/test/test_read_format_iso_gz.c \
|
||||
libarchive/test/test_read_format_isorr_bz2.c \
|
||||
libarchive/test/test_read_format_mtree.c \
|
||||
libarchive/test/test_read_format_pax_bz2.c \
|
||||
libarchive/test/test_read_format_tar.c \
|
||||
libarchive/test/test_read_format_tbz.c \
|
||||
|
@ -567,12 +578,36 @@ bsdtar_DEPENDENCIES = libarchive.la \
|
|||
@STATIC_BSDTAR_FALSE@bsdtar_static =
|
||||
@STATIC_BSDTAR_TRUE@bsdtar_static = -static
|
||||
bsdtar_LDADD = libarchive.la
|
||||
bsdtar_CPPFLAGS = -I$(top_builddir)/libarchive
|
||||
bsdtar_LDFLAGS = $(bsdtar_static) -I$(destdir)/libarchive
|
||||
bsdtar_CPPFLAGS = -I$(top_builddir)/libarchive -I$(top_srcdir)/libarchive
|
||||
bsdtar_LDFLAGS = $(bsdtar_static)
|
||||
@BUILD_BSDTAR_FALSE@bsdtar_dist_man_MANS =
|
||||
@BUILD_BSDTAR_TRUE@bsdtar_dist_man_MANS = tar/bsdtar.1
|
||||
@BUILD_BSDTAR_FALSE@bsdtar_programs =
|
||||
@BUILD_BSDTAR_TRUE@bsdtar_programs = bsdtar
|
||||
|
||||
#
|
||||
#
|
||||
# bsdcpio source, docs, etc.
|
||||
#
|
||||
#
|
||||
bsdcpio_SOURCES = \
|
||||
cpio/cpio.c \
|
||||
cpio/cpio.h \
|
||||
cpio/cpio_platform.h \
|
||||
cpio/util.c
|
||||
|
||||
bsdcpio_DEPENDENCIES = libarchive.la \
|
||||
libarchive/archive_entry.h \
|
||||
libarchive/archive.h
|
||||
|
||||
bsdcpio_static = -static
|
||||
bsdcpio_LDADD = libarchive.la
|
||||
bsdcpio_CPPFLAGS = -I$(top_builddir)/libarchive -I$(top_srcdir)/libarchive
|
||||
bsdcpio_LDFLAGS = $(bsdcpio_static)
|
||||
@BUILD_BSDCPIO_FALSE@bsdcpio_dist_man_MANS =
|
||||
@BUILD_BSDCPIO_TRUE@bsdcpio_dist_man_MANS = cpio/bsdcpio.1
|
||||
@BUILD_BSDCPIO_FALSE@bsdcpio_programs =
|
||||
@BUILD_BSDCPIO_TRUE@bsdcpio_programs = bsdcpio
|
||||
all: $(BUILT_SOURCES) config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||
|
||||
|
@ -727,6 +762,9 @@ libarchive/libarchive_la-archive_read_support_format_empty.lo: \
|
|||
libarchive/libarchive_la-archive_read_support_format_iso9660.lo: \
|
||||
libarchive/$(am__dirstamp) \
|
||||
libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
libarchive/libarchive_la-archive_read_support_format_mtree.lo: \
|
||||
libarchive/$(am__dirstamp) \
|
||||
libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
libarchive/libarchive_la-archive_read_support_format_tar.lo: \
|
||||
libarchive/$(am__dirstamp) \
|
||||
libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
|
@ -839,6 +877,19 @@ clean-checkPROGRAMS:
|
|||
echo " rm -f $$p $$f"; \
|
||||
rm -f $$p $$f ; \
|
||||
done
|
||||
cpio/$(am__dirstamp):
|
||||
@$(MKDIR_P) cpio
|
||||
@: > cpio/$(am__dirstamp)
|
||||
cpio/$(DEPDIR)/$(am__dirstamp):
|
||||
@$(MKDIR_P) cpio/$(DEPDIR)
|
||||
@: > cpio/$(DEPDIR)/$(am__dirstamp)
|
||||
cpio/bsdcpio-cpio.$(OBJEXT): cpio/$(am__dirstamp) \
|
||||
cpio/$(DEPDIR)/$(am__dirstamp)
|
||||
cpio/bsdcpio-util.$(OBJEXT): cpio/$(am__dirstamp) \
|
||||
cpio/$(DEPDIR)/$(am__dirstamp)
|
||||
bsdcpio$(EXEEXT): $(bsdcpio_OBJECTS) $(bsdcpio_DEPENDENCIES)
|
||||
@rm -f bsdcpio$(EXEEXT)
|
||||
$(bsdcpio_LINK) $(bsdcpio_OBJECTS) $(bsdcpio_LDADD) $(LIBS)
|
||||
tar/$(am__dirstamp):
|
||||
@$(MKDIR_P) tar
|
||||
@: > tar/$(am__dirstamp)
|
||||
|
@ -928,6 +979,9 @@ libarchive/libarchive_test-archive_read_support_format_empty.$(OBJEXT): \
|
|||
libarchive/libarchive_test-archive_read_support_format_iso9660.$(OBJEXT): \
|
||||
libarchive/$(am__dirstamp) \
|
||||
libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
libarchive/libarchive_test-archive_read_support_format_mtree.$(OBJEXT): \
|
||||
libarchive/$(am__dirstamp) \
|
||||
libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
libarchive/libarchive_test-archive_read_support_format_tar.$(OBJEXT): \
|
||||
libarchive/$(am__dirstamp) \
|
||||
libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
|
@ -1081,6 +1135,9 @@ libarchive/test/libarchive_test-test_read_format_iso_gz.$(OBJEXT): \
|
|||
libarchive/test/libarchive_test-test_read_format_isorr_bz2.$(OBJEXT): \
|
||||
libarchive/test/$(am__dirstamp) \
|
||||
libarchive/test/$(DEPDIR)/$(am__dirstamp)
|
||||
libarchive/test/libarchive_test-test_read_format_mtree.$(OBJEXT): \
|
||||
libarchive/test/$(am__dirstamp) \
|
||||
libarchive/test/$(DEPDIR)/$(am__dirstamp)
|
||||
libarchive/test/libarchive_test-test_read_format_pax_bz2.$(OBJEXT): \
|
||||
libarchive/test/$(am__dirstamp) \
|
||||
libarchive/test/$(DEPDIR)/$(am__dirstamp)
|
||||
|
@ -1153,6 +1210,8 @@ libarchive_test$(EXEEXT): $(libarchive_test_OBJECTS) $(libarchive_test_DEPENDENC
|
|||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f cpio/bsdcpio-cpio.$(OBJEXT)
|
||||
-rm -f cpio/bsdcpio-util.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_la-archive_check_magic.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_la-archive_check_magic.lo
|
||||
-rm -f libarchive/libarchive_la-archive_entry.$(OBJEXT)
|
||||
|
@ -1197,6 +1256,8 @@ mostlyclean-compile:
|
|||
-rm -f libarchive/libarchive_la-archive_read_support_format_empty.lo
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_iso9660.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_iso9660.lo
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_mtree.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_mtree.lo
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_tar.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_tar.lo
|
||||
-rm -f libarchive/libarchive_la-archive_read_support_format_zip.$(OBJEXT)
|
||||
|
@ -1271,6 +1332,7 @@ mostlyclean-compile:
|
|||
-rm -f libarchive/libarchive_test-archive_read_support_format_cpio.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_test-archive_read_support_format_empty.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_test-archive_read_support_format_iso9660.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_test-archive_read_support_format_mtree.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_test-archive_read_support_format_tar.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_test-archive_read_support_format_zip.$(OBJEXT)
|
||||
-rm -f libarchive/libarchive_test-archive_string.$(OBJEXT)
|
||||
|
@ -1320,6 +1382,7 @@ mostlyclean-compile:
|
|||
-rm -f libarchive/test/libarchive_test-test_read_format_gtar_sparse.$(OBJEXT)
|
||||
-rm -f libarchive/test/libarchive_test-test_read_format_iso_gz.$(OBJEXT)
|
||||
-rm -f libarchive/test/libarchive_test-test_read_format_isorr_bz2.$(OBJEXT)
|
||||
-rm -f libarchive/test/libarchive_test-test_read_format_mtree.$(OBJEXT)
|
||||
-rm -f libarchive/test/libarchive_test-test_read_format_pax_bz2.$(OBJEXT)
|
||||
-rm -f libarchive/test/libarchive_test-test_read_format_tar.$(OBJEXT)
|
||||
-rm -f libarchive/test/libarchive_test-test_read_format_tbz.$(OBJEXT)
|
||||
|
@ -1353,6 +1416,8 @@ mostlyclean-compile:
|
|||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@cpio/$(DEPDIR)/bsdcpio-cpio.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@cpio/$(DEPDIR)/bsdcpio-util.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_check_magic.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_entry.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_entry_copy_stat.Plo@am__quote@
|
||||
|
@ -1375,6 +1440,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_cpio.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_empty.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_iso9660.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_mtree.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_tar.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_zip.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_la-archive_string.Plo@am__quote@
|
||||
|
@ -1423,6 +1489,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_cpio.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_empty.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_iso9660.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_tar.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_zip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/$(DEPDIR)/libarchive_test-archive_string.Po@am__quote@
|
||||
|
@ -1472,6 +1539,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_gtar_sparse.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_iso_gz.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_isorr_bz2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_pax_bz2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_tar.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_tbz.Po@am__quote@
|
||||
|
@ -1680,6 +1748,13 @@ libarchive/libarchive_la-archive_read_support_format_iso9660.lo: libarchive/arch
|
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/libarchive_la-archive_read_support_format_iso9660.lo `test -f 'libarchive/archive_read_support_format_iso9660.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_iso9660.c
|
||||
|
||||
libarchive/libarchive_la-archive_read_support_format_mtree.lo: libarchive/archive_read_support_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/libarchive_la-archive_read_support_format_mtree.lo -MD -MP -MF libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_mtree.Tpo -c -o libarchive/libarchive_la-archive_read_support_format_mtree.lo `test -f 'libarchive/archive_read_support_format_mtree.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_mtree.Tpo libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_mtree.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libarchive/archive_read_support_format_mtree.c' object='libarchive/libarchive_la-archive_read_support_format_mtree.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/libarchive_la-archive_read_support_format_mtree.lo `test -f 'libarchive/archive_read_support_format_mtree.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_mtree.c
|
||||
|
||||
libarchive/libarchive_la-archive_read_support_format_tar.lo: libarchive/archive_read_support_format_tar.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/libarchive_la-archive_read_support_format_tar.lo -MD -MP -MF libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_tar.Tpo -c -o libarchive/libarchive_la-archive_read_support_format_tar.lo `test -f 'libarchive/archive_read_support_format_tar.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_tar.c
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_tar.Tpo libarchive/$(DEPDIR)/libarchive_la-archive_read_support_format_tar.Plo
|
||||
|
@ -1862,6 +1937,34 @@ libarchive/libarchive_la-filter_fork.lo: libarchive/filter_fork.c
|
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/libarchive_la-filter_fork.lo `test -f 'libarchive/filter_fork.c' || echo '$(srcdir)/'`libarchive/filter_fork.c
|
||||
|
||||
cpio/bsdcpio-cpio.o: cpio/cpio.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cpio/bsdcpio-cpio.o -MD -MP -MF cpio/$(DEPDIR)/bsdcpio-cpio.Tpo -c -o cpio/bsdcpio-cpio.o `test -f 'cpio/cpio.c' || echo '$(srcdir)/'`cpio/cpio.c
|
||||
@am__fastdepCC_TRUE@ mv -f cpio/$(DEPDIR)/bsdcpio-cpio.Tpo cpio/$(DEPDIR)/bsdcpio-cpio.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpio/cpio.c' object='cpio/bsdcpio-cpio.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cpio/bsdcpio-cpio.o `test -f 'cpio/cpio.c' || echo '$(srcdir)/'`cpio/cpio.c
|
||||
|
||||
cpio/bsdcpio-cpio.obj: cpio/cpio.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cpio/bsdcpio-cpio.obj -MD -MP -MF cpio/$(DEPDIR)/bsdcpio-cpio.Tpo -c -o cpio/bsdcpio-cpio.obj `if test -f 'cpio/cpio.c'; then $(CYGPATH_W) 'cpio/cpio.c'; else $(CYGPATH_W) '$(srcdir)/cpio/cpio.c'; fi`
|
||||
@am__fastdepCC_TRUE@ mv -f cpio/$(DEPDIR)/bsdcpio-cpio.Tpo cpio/$(DEPDIR)/bsdcpio-cpio.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpio/cpio.c' object='cpio/bsdcpio-cpio.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cpio/bsdcpio-cpio.obj `if test -f 'cpio/cpio.c'; then $(CYGPATH_W) 'cpio/cpio.c'; else $(CYGPATH_W) '$(srcdir)/cpio/cpio.c'; fi`
|
||||
|
||||
cpio/bsdcpio-util.o: cpio/util.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cpio/bsdcpio-util.o -MD -MP -MF cpio/$(DEPDIR)/bsdcpio-util.Tpo -c -o cpio/bsdcpio-util.o `test -f 'cpio/util.c' || echo '$(srcdir)/'`cpio/util.c
|
||||
@am__fastdepCC_TRUE@ mv -f cpio/$(DEPDIR)/bsdcpio-util.Tpo cpio/$(DEPDIR)/bsdcpio-util.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpio/util.c' object='cpio/bsdcpio-util.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cpio/bsdcpio-util.o `test -f 'cpio/util.c' || echo '$(srcdir)/'`cpio/util.c
|
||||
|
||||
cpio/bsdcpio-util.obj: cpio/util.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cpio/bsdcpio-util.obj -MD -MP -MF cpio/$(DEPDIR)/bsdcpio-util.Tpo -c -o cpio/bsdcpio-util.obj `if test -f 'cpio/util.c'; then $(CYGPATH_W) 'cpio/util.c'; else $(CYGPATH_W) '$(srcdir)/cpio/util.c'; fi`
|
||||
@am__fastdepCC_TRUE@ mv -f cpio/$(DEPDIR)/bsdcpio-util.Tpo cpio/$(DEPDIR)/bsdcpio-util.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpio/util.c' object='cpio/bsdcpio-util.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdcpio_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cpio/bsdcpio-util.obj `if test -f 'cpio/util.c'; then $(CYGPATH_W) 'cpio/util.c'; else $(CYGPATH_W) '$(srcdir)/cpio/util.c'; fi`
|
||||
|
||||
tar/bsdtar-bsdtar.o: tar/bsdtar.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/bsdtar-bsdtar.o -MD -MP -MF tar/$(DEPDIR)/bsdtar-bsdtar.Tpo -c -o tar/bsdtar-bsdtar.o `test -f 'tar/bsdtar.c' || echo '$(srcdir)/'`tar/bsdtar.c
|
||||
@am__fastdepCC_TRUE@ mv -f tar/$(DEPDIR)/bsdtar-bsdtar.Tpo tar/$(DEPDIR)/bsdtar-bsdtar.Po
|
||||
|
@ -2268,6 +2371,20 @@ libarchive/libarchive_test-archive_read_support_format_iso9660.obj: libarchive/a
|
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/libarchive_test-archive_read_support_format_iso9660.obj `if test -f 'libarchive/archive_read_support_format_iso9660.c'; then $(CYGPATH_W) 'libarchive/archive_read_support_format_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/archive_read_support_format_iso9660.c'; fi`
|
||||
|
||||
libarchive/libarchive_test-archive_read_support_format_mtree.o: libarchive/archive_read_support_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/libarchive_test-archive_read_support_format_mtree.o -MD -MP -MF libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Tpo -c -o libarchive/libarchive_test-archive_read_support_format_mtree.o `test -f 'libarchive/archive_read_support_format_mtree.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Tpo libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libarchive/archive_read_support_format_mtree.c' object='libarchive/libarchive_test-archive_read_support_format_mtree.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/libarchive_test-archive_read_support_format_mtree.o `test -f 'libarchive/archive_read_support_format_mtree.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_mtree.c
|
||||
|
||||
libarchive/libarchive_test-archive_read_support_format_mtree.obj: libarchive/archive_read_support_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/libarchive_test-archive_read_support_format_mtree.obj -MD -MP -MF libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Tpo -c -o libarchive/libarchive_test-archive_read_support_format_mtree.obj `if test -f 'libarchive/archive_read_support_format_mtree.c'; then $(CYGPATH_W) 'libarchive/archive_read_support_format_mtree.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/archive_read_support_format_mtree.c'; fi`
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Tpo libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_mtree.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libarchive/archive_read_support_format_mtree.c' object='libarchive/libarchive_test-archive_read_support_format_mtree.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/libarchive_test-archive_read_support_format_mtree.obj `if test -f 'libarchive/archive_read_support_format_mtree.c'; then $(CYGPATH_W) 'libarchive/archive_read_support_format_mtree.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/archive_read_support_format_mtree.c'; fi`
|
||||
|
||||
libarchive/libarchive_test-archive_read_support_format_tar.o: libarchive/archive_read_support_format_tar.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/libarchive_test-archive_read_support_format_tar.o -MD -MP -MF libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_tar.Tpo -c -o libarchive/libarchive_test-archive_read_support_format_tar.o `test -f 'libarchive/archive_read_support_format_tar.c' || echo '$(srcdir)/'`libarchive/archive_read_support_format_tar.c
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_tar.Tpo libarchive/$(DEPDIR)/libarchive_test-archive_read_support_format_tar.Po
|
||||
|
@ -2954,6 +3071,20 @@ libarchive/test/libarchive_test-test_read_format_isorr_bz2.obj: libarchive/test/
|
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/libarchive_test-test_read_format_isorr_bz2.obj `if test -f 'libarchive/test/test_read_format_isorr_bz2.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_isorr_bz2.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_isorr_bz2.c'; fi`
|
||||
|
||||
libarchive/test/libarchive_test-test_read_format_mtree.o: libarchive/test/test_read_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/libarchive_test-test_read_format_mtree.o -MD -MP -MF libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Tpo -c -o libarchive/test/libarchive_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@ mv -f libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Tpo libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libarchive/test/test_read_format_mtree.c' object='libarchive/test/libarchive_test-test_read_format_mtree.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/libarchive_test-test_read_format_mtree.o `test -f 'libarchive/test/test_read_format_mtree.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_mtree.c
|
||||
|
||||
libarchive/test/libarchive_test-test_read_format_mtree.obj: libarchive/test/test_read_format_mtree.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/libarchive_test-test_read_format_mtree.obj -MD -MP -MF libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Tpo -c -o libarchive/test/libarchive_test-test_read_format_mtree.obj `if test -f 'libarchive/test/test_read_format_mtree.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_mtree.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_mtree.c'; fi`
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Tpo libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_mtree.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libarchive/test/test_read_format_mtree.c' object='libarchive/test/libarchive_test-test_read_format_mtree.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/libarchive_test-test_read_format_mtree.obj `if test -f 'libarchive/test/test_read_format_mtree.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_mtree.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_mtree.c'; fi`
|
||||
|
||||
libarchive/test/libarchive_test-test_read_format_pax_bz2.o: libarchive/test/test_read_format_pax_bz2.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/libarchive_test-test_read_format_pax_bz2.o -MD -MP -MF libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_pax_bz2.Tpo -c -o libarchive/test/libarchive_test-test_read_format_pax_bz2.o `test -f 'libarchive/test/test_read_format_pax_bz2.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_pax_bz2.c
|
||||
@am__fastdepCC_TRUE@ mv -f libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_pax_bz2.Tpo libarchive/test/$(DEPDIR)/libarchive_test-test_read_format_pax_bz2.Po
|
||||
|
@ -3727,6 +3858,8 @@ clean-generic:
|
|||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f cpio/$(DEPDIR)/$(am__dirstamp)
|
||||
-rm -f cpio/$(am__dirstamp)
|
||||
-rm -f libarchive/$(DEPDIR)/$(am__dirstamp)
|
||||
-rm -f libarchive/$(am__dirstamp)
|
||||
-rm -f libarchive/test/$(DEPDIR)/$(am__dirstamp)
|
||||
|
@ -3746,7 +3879,7 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
|
|||
|
||||
distclean: distclean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf libarchive/$(DEPDIR) libarchive/test/$(DEPDIR) tar/$(DEPDIR)
|
||||
-rm -rf cpio/$(DEPDIR) libarchive/$(DEPDIR) libarchive/test/$(DEPDIR) tar/$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-hdr distclean-libtool distclean-local distclean-tags
|
||||
|
@ -3783,7 +3916,7 @@ installcheck-am:
|
|||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -rf libarchive/$(DEPDIR) libarchive/test/$(DEPDIR) tar/$(DEPDIR)
|
||||
-rm -rf cpio/$(DEPDIR) libarchive/$(DEPDIR) libarchive/test/$(DEPDIR) tar/$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
|
|
|
@ -1,4 +1,19 @@
|
|||
|
||||
Sep 11, 2007: libarchive 2.2.8 released
|
||||
|
||||
Sep 11, 2007: libarchive 2.2.8 released
|
||||
Sep 09, 2007: bsdcpio 0.2 supports most (not yet all) of the old POSIX spec.
|
||||
|
||||
Sep 01, 2007: libarchive 2.2.7 released
|
||||
Aug 31, 2007: Support for reading mtree files, including an mtree.5 manpage
|
||||
(A little experimental still.)
|
||||
Aug 18, 2007: Read gtar 1.17 --posix --sparse entries.
|
||||
Aug 13, 2007: Refined suid/sgid restore handling; it is no longer
|
||||
an error if suid/sgid bits are dropped when you request
|
||||
perm restore but don't request owner restore.
|
||||
Aug 06, 2007: Use --enable-bsdcpio if you want to try bsdcpio
|
||||
(Still very incomplete!)
|
||||
|
||||
Aug 05, 2007: libarchive 2.2.6 released
|
||||
|
||||
Aug 05, 2007: New configure option --disable-bsdtar, thanks to Joerg
|
||||
|
@ -8,6 +23,9 @@ Aug 05, 2007: Several bug fixes from FreeBSD CVS repo.
|
|||
Jul 13, 2007: libarchive 2.2.5 released
|
||||
|
||||
Jul 12, 2007: libarchive 2.2.4 released
|
||||
Jul 12, 2007: Thanks to Colin Percival's help in diagnosing and
|
||||
fixing several critical security bugs. Details available at
|
||||
http://security.freebsd.org/advisories/FreeBSD-SA-07:05.libarchive.asc
|
||||
|
||||
May 26, 2007: libarchive 2.2.3 released
|
||||
May 26, 2007: Fix memory leaks in ZIP reader and shar writer, add some
|
||||
|
|
7273
archivers/libarchive/files/aclocal.m4
vendored
Normal file
7273
archivers/libarchive/files/aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load diff
|
@ -304,6 +304,9 @@
|
|||
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||
#undef HAVE_SYS_POLL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
|
|
117
archivers/libarchive/files/configure
vendored
117
archivers/libarchive/files/configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.61 for libarchive 2.2.6.
|
||||
# Generated by GNU Autoconf 2.61 for libarchive 2.2.8.
|
||||
#
|
||||
# Report bugs to <kientzle@freebsd.org>.
|
||||
#
|
||||
|
@ -728,8 +728,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='libarchive'
|
||||
PACKAGE_TARNAME='libarchive'
|
||||
PACKAGE_VERSION='2.2.6'
|
||||
PACKAGE_STRING='libarchive 2.2.6'
|
||||
PACKAGE_VERSION='2.2.8'
|
||||
PACKAGE_STRING='libarchive 2.2.8'
|
||||
PACKAGE_BUGREPORT='kientzle@freebsd.org'
|
||||
|
||||
ac_unique_file="libarchive"
|
||||
|
@ -882,6 +882,8 @@ ac_ct_F77
|
|||
LIBTOOL
|
||||
BUILD_BSDTAR_TRUE
|
||||
BUILD_BSDTAR_FALSE
|
||||
BUILD_BSDCPIO_TRUE
|
||||
BUILD_BSDCPIO_FALSE
|
||||
STATIC_BSDTAR_TRUE
|
||||
STATIC_BSDTAR_FALSE
|
||||
ARCHIVE_H_INCLUDE_INTTYPES_H
|
||||
|
@ -1407,7 +1409,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# 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 2.2.6 to adapt to many kinds of systems.
|
||||
\`configure' configures libarchive 2.2.8 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1477,7 +1479,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of libarchive 2.2.6:";;
|
||||
short | recursive ) echo "Configuration of libarchive 2.2.8:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1495,6 +1497,8 @@ Optional Features:
|
|||
--enable-bsdtar=static force static build of bsdtar
|
||||
--enable-bsdtar=shared force dynamic build of bsdtar
|
||||
--disable-bsdtar disable build of bsdtar
|
||||
--enable-bsdcpio enable build of bsdcpio
|
||||
--disable-bsdcpio disable build of bsdcpio (default)
|
||||
--disable-largefile omit support for large files
|
||||
|
||||
Optional Packages:
|
||||
|
@ -1589,7 +1593,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
libarchive configure 2.2.6
|
||||
libarchive configure 2.2.8
|
||||
generated by GNU Autoconf 2.61
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
||||
|
@ -1603,7 +1607,7 @@ cat >config.log <<_ACEOF
|
|||
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 2.2.6, which was
|
||||
It was created by libarchive $as_me 2.2.8, which was
|
||||
generated by GNU Autoconf 2.61. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2297,7 +2301,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='libarchive'
|
||||
VERSION='2.2.6'
|
||||
VERSION='2.2.8'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -4520,7 +4524,7 @@ ia64-*-hpux*)
|
|||
;;
|
||||
*-*-irix6*)
|
||||
# Find out which ABI we are using.
|
||||
echo '#line 4523 "configure"' > conftest.$ac_ext
|
||||
echo '#line 4527 "configure"' > conftest.$ac_ext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
(eval $ac_compile) 2>&5
|
||||
ac_status=$?
|
||||
|
@ -7251,11 +7255,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:7254: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:7258: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:7258: \$? = $ac_status" >&5
|
||||
echo "$as_me:7262: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
@ -7519,11 +7523,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:7522: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:7526: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:7526: \$? = $ac_status" >&5
|
||||
echo "$as_me:7530: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
@ -7623,11 +7627,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:7626: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:7630: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:7630: \$? = $ac_status" >&5
|
||||
echo "$as_me:7634: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
@ -9931,7 +9935,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 9934 "configure"
|
||||
#line 9938 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
@ -10031,7 +10035,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 10034 "configure"
|
||||
#line 10038 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
@ -12367,11 +12371,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:12370: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:12374: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:12374: \$? = $ac_status" >&5
|
||||
echo "$as_me:12378: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
@ -12471,11 +12475,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:12474: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:12478: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:12478: \$? = $ac_status" >&5
|
||||
echo "$as_me:12482: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
@ -14041,11 +14045,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:14044: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:14048: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:14048: \$? = $ac_status" >&5
|
||||
echo "$as_me:14052: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
@ -14145,11 +14149,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:14148: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:14152: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:14152: \$? = $ac_status" >&5
|
||||
echo "$as_me:14156: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
@ -16343,11 +16347,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:16346: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:16350: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:16350: \$? = $ac_status" >&5
|
||||
echo "$as_me:16354: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
@ -16611,11 +16615,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:16614: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:16618: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:16618: \$? = $ac_status" >&5
|
||||
echo "$as_me:16622: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
@ -16715,11 +16719,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:16718: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:16722: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:16722: \$? = $ac_status" >&5
|
||||
echo "$as_me:16726: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
@ -19516,6 +19520,31 @@ no)
|
|||
{ { echo "$as_me:$LINENO: error: Unsupported value for --enable-bsdtar
|
||||
See \`config.log' for more details." >&5
|
||||
echo "$as_me: error: Unsupported value for --enable-bsdtar
|
||||
See \`config.log' for more details." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
;;
|
||||
esac
|
||||
|
||||
# Default is not to build bsdcpio
|
||||
# Check whether --enable-bsdcpio was given.
|
||||
if test "${enable_bsdcpio+set}" = set; then
|
||||
enableval=$enable_bsdcpio;
|
||||
else
|
||||
enable_bsdcpio=no
|
||||
fi
|
||||
|
||||
|
||||
case "$enable_bsdcpio" in
|
||||
yes)
|
||||
build_bsdcpio=yes
|
||||
;;
|
||||
no)
|
||||
build_bsdcpio=no
|
||||
;;
|
||||
*)
|
||||
{ { echo "$as_me:$LINENO: error: Unsupported value for --enable-bsdcpio
|
||||
See \`config.log' for more details." >&5
|
||||
echo "$as_me: error: Unsupported value for --enable-bsdcpio
|
||||
See \`config.log' for more details." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
;;
|
||||
|
@ -19529,6 +19558,14 @@ else
|
|||
BUILD_BSDTAR_FALSE=
|
||||
fi
|
||||
|
||||
if test "$build_bsdcpio" = yes ; then
|
||||
BUILD_BSDCPIO_TRUE=
|
||||
BUILD_BSDCPIO_FALSE='#'
|
||||
else
|
||||
BUILD_BSDCPIO_TRUE='#'
|
||||
BUILD_BSDCPIO_FALSE=
|
||||
fi
|
||||
|
||||
if test "$static_bsdtar" = yes ; then
|
||||
STATIC_BSDTAR_TRUE=
|
||||
STATIC_BSDTAR_FALSE='#'
|
||||
|
@ -20910,7 +20947,8 @@ done
|
|||
|
||||
|
||||
|
||||
for ac_header in sys/param.h sys/select.h sys/time.h
|
||||
|
||||
for ac_header in sys/param.h sys/poll.h sys/select.h sys/time.h
|
||||
do
|
||||
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
|
||||
|
@ -27320,6 +27358,13 @@ echo "$as_me: error: conditional \"BUILD_BSDTAR\" was never defined.
|
|||
Usually this means the macro was only invoked conditionally." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
if test -z "${BUILD_BSDCPIO_TRUE}" && test -z "${BUILD_BSDCPIO_FALSE}"; then
|
||||
{ { echo "$as_me:$LINENO: error: conditional \"BUILD_BSDCPIO\" was never defined.
|
||||
Usually this means the macro was only invoked conditionally." >&5
|
||||
echo "$as_me: error: conditional \"BUILD_BSDCPIO\" was never defined.
|
||||
Usually this means the macro was only invoked conditionally." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
if test -z "${STATIC_BSDTAR_TRUE}" && test -z "${STATIC_BSDTAR_FALSE}"; then
|
||||
{ { echo "$as_me:$LINENO: error: conditional \"STATIC_BSDTAR\" was never defined.
|
||||
Usually this means the macro was only invoked conditionally." >&5
|
||||
|
@ -27627,7 +27672,7 @@ exec 6>&1
|
|||
# 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 2.2.6, which was
|
||||
This file was extended by libarchive $as_me 2.2.8, which was
|
||||
generated by GNU Autoconf 2.61. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -27680,7 +27725,7 @@ Report bugs to <bug-autoconf@gnu.org>."
|
|||
_ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
libarchive config.status 2.2.6
|
||||
libarchive config.status 2.2.8
|
||||
configured by $0, generated by GNU Autoconf 2.61,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
@ -28014,6 +28059,8 @@ ac_ct_F77!$ac_ct_F77$ac_delim
|
|||
LIBTOOL!$LIBTOOL$ac_delim
|
||||
BUILD_BSDTAR_TRUE!$BUILD_BSDTAR_TRUE$ac_delim
|
||||
BUILD_BSDTAR_FALSE!$BUILD_BSDTAR_FALSE$ac_delim
|
||||
BUILD_BSDCPIO_TRUE!$BUILD_BSDCPIO_TRUE$ac_delim
|
||||
BUILD_BSDCPIO_FALSE!$BUILD_BSDCPIO_FALSE$ac_delim
|
||||
STATIC_BSDTAR_TRUE!$STATIC_BSDTAR_TRUE$ac_delim
|
||||
STATIC_BSDTAR_FALSE!$STATIC_BSDTAR_FALSE$ac_delim
|
||||
ARCHIVE_H_INCLUDE_INTTYPES_H!$ARCHIVE_H_INCLUDE_INTTYPES_H$ac_delim
|
||||
|
@ -28021,7 +28068,7 @@ LIBOBJS!$LIBOBJS$ac_delim
|
|||
LTLIBOBJS!$LTLIBOBJS$ac_delim
|
||||
_ACEOF
|
||||
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 21; then
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 23; then
|
||||
break
|
||||
elif $ac_last_try; then
|
||||
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
|
||||
|
|
|
@ -93,7 +93,26 @@ no)
|
|||
;;
|
||||
esac
|
||||
|
||||
# Default is not to build bsdcpio
|
||||
AC_ARG_ENABLE([bsdcpio],
|
||||
[AS_HELP_STRING([--enable-bsdcpio], [enable build of bsdcpio])
|
||||
AS_HELP_STRING([--disable-bsdcpio], [disable build of bsdcpio (default)])],
|
||||
[], [enable_bsdcpio=no])
|
||||
|
||||
case "$enable_bsdcpio" in
|
||||
yes)
|
||||
build_bsdcpio=yes
|
||||
;;
|
||||
no)
|
||||
build_bsdcpio=no
|
||||
;;
|
||||
*)
|
||||
AC_MSG_FAILURE([Unsupported value for --enable-bsdcpio])
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL([BUILD_BSDTAR], [ test "$build_bsdtar" = yes ])
|
||||
AM_CONDITIONAL([BUILD_BSDCPIO], [ test "$build_bsdcpio" = yes ])
|
||||
AM_CONDITIONAL([STATIC_BSDTAR], [ test "$static_bsdtar" = yes ])
|
||||
|
||||
# Checks for header files.
|
||||
|
@ -114,7 +133,7 @@ AC_CHECK_HEADER(inttypes.h,
|
|||
[AC_SUBST(ARCHIVE_H_INCLUDE_INTTYPES_H,[''])])
|
||||
AC_CHECK_HEADERS([locale.h paths.h poll.h pwd.h stdarg.h])
|
||||
AC_CHECK_HEADERS([stdint.h stdlib.h string.h sys/acl.h sys/ioctl.h])
|
||||
AC_CHECK_HEADERS([sys/param.h sys/select.h sys/time.h])
|
||||
AC_CHECK_HEADERS([sys/param.h sys/poll.h sys/select.h sys/time.h])
|
||||
AC_CHECK_HEADERS([time.h unistd.h utime.h wchar.h zlib.h])
|
||||
|
||||
# Checks for libraries.
|
||||
|
|
|
@ -25,40 +25,101 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <sys/types.h>
|
||||
#include "cpio_platform.h"
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <archive.h>
|
||||
#include <archive_entry.h>
|
||||
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
#ifdef HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
#endif
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#ifdef HAVE_GETOPT_LONG
|
||||
#include <getopt.h>
|
||||
#else
|
||||
struct option {
|
||||
const char *name;
|
||||
int has_arg;
|
||||
int *flag;
|
||||
int val;
|
||||
};
|
||||
#define no_argument 0
|
||||
#define required_argument 1
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#ifdef HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "cpio.h"
|
||||
|
||||
static int copy_data(struct cpio *, struct archive *, struct archive *);
|
||||
static void out(struct cpio *);
|
||||
static int cpio_getopt(struct cpio *cpio, const char *optstring,
|
||||
const struct option **poption);
|
||||
static const char *cpio_rename(const char *name);
|
||||
static int file_to_archive(struct cpio *, const char *, const char *);
|
||||
static void long_help(struct cpio *cpio);
|
||||
static void mode_in(struct cpio *);
|
||||
static void mode_list(struct cpio *);
|
||||
static void mode_out(struct cpio *);
|
||||
static void mode_pass(struct cpio *, const char *);
|
||||
static int out_file(struct cpio *, const char *pathname);
|
||||
static void in(struct cpio *);
|
||||
static void list(struct cpio *);
|
||||
static void copy(struct cpio *);
|
||||
static void usage(struct cpio *);
|
||||
static void version(void);
|
||||
|
||||
static const char *cpio_opts = "aBcdf:hijlmoprtuvyz";
|
||||
|
||||
/*
|
||||
* On systems that lack getopt_long, long options can be specified
|
||||
* using -W longopt and -W longopt=value, e.g. "-W version" is the
|
||||
* same as "--version" and "-W format=ustar" is the same as "--format
|
||||
* ustar". This does not rely the GNU getopt() "W;" extension, so
|
||||
* should work correctly on any system with a POSIX-compliant
|
||||
* getopt().
|
||||
*/
|
||||
|
||||
/* Fake short equivalents for long options that otherwise lack them. */
|
||||
enum {
|
||||
OPTION_FORMAT = 1,
|
||||
OPTION_VERSION
|
||||
};
|
||||
|
||||
/*
|
||||
* If you add anything, be very careful to keep this list properly
|
||||
* sorted, as the -W logic relies on it.
|
||||
*/
|
||||
static const struct option cpio_longopts[] = {
|
||||
{ "format", required_argument, NULL, OPTION_FORMAT },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "verbose", no_argument, NULL, 'v' },
|
||||
{ "version", no_argument, NULL, OPTION_VERSION },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct cpio _cpio; /* Allocated on stack. */
|
||||
struct cpio *cpio;
|
||||
const struct option *option;
|
||||
char opt;
|
||||
|
||||
cpio = &_cpio;
|
||||
memset(cpio, 0, sizeof(*cpio));
|
||||
|
||||
|
||||
/* Need cpio->progname before calling cpio_warnc. */
|
||||
if (*argv == NULL)
|
||||
cpio->progname = "cpio";
|
||||
|
@ -70,18 +131,20 @@ main(int argc, char *argv[])
|
|||
cpio->progname = *argv;
|
||||
}
|
||||
|
||||
cpio->argv = argv;
|
||||
cpio->argc = argc;
|
||||
cpio->mode = '\0';
|
||||
cpio->verbose = 0;
|
||||
cpio->compress = '\0';
|
||||
cpio->extract_flags = ARCHIVE_EXTRACT_TIME;
|
||||
cpio->extract_flags |= ARCHIVE_EXTRACT_NO_AUTODIR;
|
||||
cpio->extract_flags = ARCHIVE_EXTRACT_NO_AUTODIR;
|
||||
cpio->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER;
|
||||
cpio->bytes_per_block = 512;
|
||||
cpio->filename = NULL;
|
||||
|
||||
while ((opt = getopt(argc, argv, "aBcdfilmoprtuv")) != -1) {
|
||||
while ((opt = cpio_getopt(cpio, cpio_opts, &option)) != -1) {
|
||||
switch (opt) {
|
||||
case 'a': /* POSIX 1997 */
|
||||
cpio->option_atime_restore = 1;
|
||||
break;
|
||||
case 'B': /* POSIX 1997 */
|
||||
cpio->bytes_per_block = 5120;
|
||||
|
@ -93,6 +156,13 @@ main(int argc, char *argv[])
|
|||
cpio->extract_flags &= ~ARCHIVE_EXTRACT_NO_AUTODIR;
|
||||
break;
|
||||
case 'f': /* POSIX 1997 */
|
||||
/* TODO */
|
||||
break;
|
||||
case OPTION_FORMAT: /* GNU cpio */
|
||||
cpio->format = optarg;
|
||||
break;
|
||||
case 'h':
|
||||
long_help(cpio);
|
||||
break;
|
||||
case 'i': /* POSIX 1997 */
|
||||
cpio->mode = opt;
|
||||
|
@ -101,6 +171,7 @@ main(int argc, char *argv[])
|
|||
cpio->option_link = 1;
|
||||
break;
|
||||
case 'm': /* POSIX 1997 */
|
||||
cpio->extract_flags |= ARCHIVE_EXTRACT_TIME;
|
||||
break;
|
||||
case 'o': /* POSIX 1997 */
|
||||
cpio->mode = opt;
|
||||
|
@ -109,43 +180,152 @@ main(int argc, char *argv[])
|
|||
cpio->mode = opt;
|
||||
break;
|
||||
case 'r': /* POSIX 1997 */
|
||||
/* Interactively rename files. */
|
||||
cpio->option_rename = 1;
|
||||
break;
|
||||
case 't': /* POSIX 1997 */
|
||||
cpio->option_list = 1;
|
||||
break;
|
||||
case 'u': /* POSIX 1997 */
|
||||
cpio->extract_flags
|
||||
&= ~ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER;
|
||||
break;
|
||||
case 'v': /* POSIX 1997 */
|
||||
cpio->verbose++;
|
||||
break;
|
||||
case OPTION_VERSION: /* GNU convention */
|
||||
version();
|
||||
break;
|
||||
#if 0
|
||||
/*
|
||||
* cpio_getopt() handles -W specially, so it's not
|
||||
* available here.
|
||||
*/
|
||||
case 'W': /* Obscure, but useful GNU convention. */
|
||||
break;
|
||||
#endif
|
||||
case 'y': /* tar convention */
|
||||
cpio->compress = opt;
|
||||
break;
|
||||
case 'z': /* tar convention */
|
||||
cpio->compress = opt;
|
||||
break;
|
||||
default:
|
||||
usage(cpio);
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: Sanity-check args, error out on nonsensical combinations. */
|
||||
|
||||
|
||||
cpio->argc -= optind;
|
||||
cpio->argv += optind;
|
||||
|
||||
switch (cpio->mode) {
|
||||
case 'o':
|
||||
out(cpio);
|
||||
mode_out(cpio);
|
||||
break;
|
||||
case 'i':
|
||||
if (cpio->option_list)
|
||||
list(cpio);
|
||||
mode_list(cpio);
|
||||
else
|
||||
in(cpio);
|
||||
mode_in(cpio);
|
||||
break;
|
||||
case 'p':
|
||||
copy(cpio);
|
||||
if (*cpio->argv == NULL || **cpio->argv == '\0')
|
||||
cpio_errc(cpio, 1, 0,
|
||||
"-p mode requires a target directory");
|
||||
mode_pass(cpio, *cpio->argv);
|
||||
break;
|
||||
default:
|
||||
cpio_errc(cpio, 1, 0,
|
||||
"Must specify at least one of -i, -o, or -p");
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
out(struct cpio *cpio)
|
||||
void
|
||||
usage(struct cpio *cpio)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
p = cpio->progname;
|
||||
|
||||
fprintf(stderr, "Brief Usage:\n");
|
||||
fprintf(stderr, " List: %s -it < archive\n", p);
|
||||
fprintf(stderr, " Extract: %s -i < archive\n", p);
|
||||
fprintf(stderr, " Create: %s -o < filenames > archive\n", p);
|
||||
#ifdef HAVE_GETOPT_LONG
|
||||
fprintf(stderr, " Help: %s --help\n", p);
|
||||
#else
|
||||
fprintf(stderr, " Help: %s -h\n", p);
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static const char *long_help_msg =
|
||||
"First option must be a mode specifier:\n"
|
||||
" -i Input -o Output -p Pass\n"
|
||||
"Common Options:\n"
|
||||
" -v Verbose\n"
|
||||
"Create: %p -o [options] < [list of files] > [archive]\n"
|
||||
" -z, -y Compress archive with gzip/bzip2\n"
|
||||
" --format {ustar|pax|cpio|shar} Select archive format\n"
|
||||
"List: %p -it < [archive]\n"
|
||||
"Extract: %p -i [options] < [archive]\n";
|
||||
|
||||
|
||||
/*
|
||||
* Note that the word 'bsdcpio' will always appear in the first line
|
||||
* of output.
|
||||
*
|
||||
* In particular, /bin/sh scripts that need to test for the presence
|
||||
* of bsdcpio can use the following template:
|
||||
*
|
||||
* if (cpio --help 2>&1 | grep bsdcpio >/dev/null 2>&1 ) then \
|
||||
* echo bsdcpio; else echo not bsdcpio; fi
|
||||
*/
|
||||
static void
|
||||
long_help(struct cpio *cpio)
|
||||
{
|
||||
const char *prog;
|
||||
const char *p;
|
||||
|
||||
prog = cpio->progname;
|
||||
|
||||
fflush(stderr);
|
||||
|
||||
p = (strcmp(prog,"bsdcpio") != 0) ? "(bsdcpio)" : "";
|
||||
printf("%s%s: manipulate archive files\n", prog, p);
|
||||
|
||||
for (p = long_help_msg; *p != '\0'; p++) {
|
||||
if (*p == '%') {
|
||||
if (p[1] == 'p') {
|
||||
fputs(prog, stdout);
|
||||
p++;
|
||||
} else
|
||||
putchar('%');
|
||||
} else
|
||||
putchar(*p);
|
||||
}
|
||||
version();
|
||||
}
|
||||
|
||||
static void version(void)
|
||||
{
|
||||
fprintf(stderr,"bsdcpio %s -- %s\n",
|
||||
PACKAGE_VERSION, archive_version());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void
|
||||
mode_out(struct cpio *cpio)
|
||||
{
|
||||
int r;
|
||||
|
||||
cpio->archive = archive_write_new();
|
||||
if (cpio->archive == NULL)
|
||||
cpio_errc(cpio, 1, 0, "Failed to allocate archive object");
|
||||
switch (cpio->compress) {
|
||||
case 'j': case 'y':
|
||||
archive_write_set_compression_bzip2(cpio->archive);
|
||||
|
@ -157,40 +337,96 @@ out(struct cpio *cpio)
|
|||
archive_write_set_compression_none(cpio->archive);
|
||||
break;
|
||||
}
|
||||
archive_write_set_format_cpio(cpio->archive);
|
||||
archive_write_open_file(cpio->archive, cpio->filename);
|
||||
|
||||
r = archive_write_set_format_by_name(cpio->archive, cpio->format);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(cpio->archive));
|
||||
r = archive_write_open_file(cpio->archive, cpio->filename);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(cpio->archive));
|
||||
process_lines(cpio, "-", out_file);
|
||||
|
||||
archive_write_close(cpio->archive);
|
||||
r = archive_write_close(cpio->archive);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(cpio->archive));
|
||||
archive_write_finish(cpio->archive);
|
||||
}
|
||||
|
||||
static char buff[16384];
|
||||
|
||||
static int
|
||||
out_file(struct cpio *cpio, const char *pathname)
|
||||
out_file(struct cpio *cpio, const char *path)
|
||||
{
|
||||
const char *destpath;
|
||||
|
||||
if (cpio->option_rename)
|
||||
destpath = cpio_rename(path);
|
||||
else
|
||||
destpath = path;
|
||||
if (destpath == NULL)
|
||||
return (0);
|
||||
return (file_to_archive(cpio, path, destpath));
|
||||
}
|
||||
|
||||
/*
|
||||
* This is used by both out mode (to copy objects from disk into
|
||||
* an archive) and pass mode (to copy objects from disk to
|
||||
* an archive_write_disk "archive").
|
||||
*/
|
||||
static int
|
||||
file_to_archive(struct cpio *cpio, const char *srcpath, const char *destpath)
|
||||
{
|
||||
static char buff[16384];
|
||||
struct stat st;
|
||||
struct archive_entry *entry;
|
||||
int fd;
|
||||
ssize_t len;
|
||||
int r;
|
||||
|
||||
if (cpio->verbose)
|
||||
fprintf(stderr,"%s", pathname);
|
||||
fprintf(stderr,"%s", destpath);
|
||||
|
||||
entry = archive_entry_new();
|
||||
stat(pathname, &st);
|
||||
if (entry == NULL)
|
||||
cpio_errc(cpio, 1, 0, "Couldn't allocate entry");
|
||||
stat(srcpath, &st);
|
||||
archive_entry_copy_stat(entry, &st);
|
||||
archive_entry_set_pathname(entry, pathname);
|
||||
archive_write_header(cpio->archive, entry);
|
||||
fd = open(pathname, O_RDONLY);
|
||||
len = read(fd, buff, sizeof(buff));
|
||||
while (len > 0) {
|
||||
archive_write_data(cpio->archive, buff, len);
|
||||
len = read(fd, buff, sizeof(buff));
|
||||
archive_entry_set_pathname(entry, destpath);
|
||||
|
||||
/* Obviously, this only gets invoked in pass mode. */
|
||||
if (cpio->option_link) {
|
||||
/* Note: link(2) doesn't create parent directories. */
|
||||
archive_entry_set_hardlink(entry, srcpath);
|
||||
r = archive_write_header(cpio->archive, entry);
|
||||
if (r == ARCHIVE_OK)
|
||||
return (0);
|
||||
cpio_warnc(cpio, archive_errno(cpio->archive),
|
||||
archive_error_string(cpio->archive));
|
||||
if (r == ARCHIVE_FATAL)
|
||||
exit(1);
|
||||
return (0);
|
||||
}
|
||||
r = archive_write_header(cpio->archive, entry);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_warnc(cpio, archive_errno(cpio->archive),
|
||||
"%s: %s",
|
||||
destpath,
|
||||
archive_error_string(cpio->archive));
|
||||
if (r == ARCHIVE_FATAL)
|
||||
exit(1);
|
||||
if (r == ARCHIVE_OK && S_ISREG(st.st_mode)) {
|
||||
fd = open(srcpath, O_RDONLY);
|
||||
len = read(fd, buff, sizeof(buff));
|
||||
while (len > 0) {
|
||||
r = archive_write_data(cpio->archive, buff, len);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0,
|
||||
archive_error_string(cpio->archive));
|
||||
len = read(fd, buff, sizeof(buff));
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
close(fd);
|
||||
archive_entry_free(entry);
|
||||
if (cpio->option_atime_restore) {
|
||||
/* TODO: invoke utimes() ?? */
|
||||
}
|
||||
if (cpio->verbose)
|
||||
fprintf(stderr,"\n");
|
||||
return (0);
|
||||
|
@ -198,16 +434,23 @@ out_file(struct cpio *cpio, const char *pathname)
|
|||
|
||||
|
||||
static void
|
||||
in(struct cpio *cpio)
|
||||
mode_in(struct cpio *cpio)
|
||||
{
|
||||
struct archive *a;
|
||||
struct archive_entry *entry;
|
||||
struct archive *ext;
|
||||
const char *destpath;
|
||||
int r;
|
||||
|
||||
ext = archive_write_disk_new();
|
||||
archive_write_disk_set_options(ext, cpio->extract_flags);
|
||||
if (ext == NULL)
|
||||
cpio_errc(cpio, 1, 0, "Couldn't allocate restore object");
|
||||
r = archive_write_disk_set_options(ext, cpio->extract_flags);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(ext));
|
||||
a = archive_read_new();
|
||||
if (a == NULL)
|
||||
cpio_errc(cpio, 1, 0, "Couldn't allocate archive object");
|
||||
archive_read_support_compression_all(a);
|
||||
archive_read_support_format_all(a);
|
||||
|
||||
|
@ -222,8 +465,15 @@ in(struct cpio *cpio)
|
|||
cpio_errc(cpio, 1, archive_errno(a),
|
||||
archive_error_string(a));
|
||||
}
|
||||
if (cpio->option_rename) {
|
||||
destpath = cpio_rename(archive_entry_pathname(entry));
|
||||
archive_entry_set_pathname(entry, destpath);
|
||||
} else
|
||||
destpath = archive_entry_pathname(entry);
|
||||
if (destpath == NULL)
|
||||
continue;
|
||||
if (cpio->verbose)
|
||||
fprintf(stdout, "%s\n", archive_entry_pathname(entry));
|
||||
fprintf(stdout, "%s\n", destpath);
|
||||
r = archive_write_header(ext, entry);
|
||||
if (r != ARCHIVE_OK) {
|
||||
fprintf(stderr, "%s: %s\n",
|
||||
|
@ -233,9 +483,13 @@ in(struct cpio *cpio)
|
|||
r = copy_data(cpio, a, ext);
|
||||
}
|
||||
}
|
||||
archive_read_close(a);
|
||||
r = archive_read_close(a);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(a));
|
||||
archive_read_finish(a);
|
||||
archive_write_close(ext);
|
||||
r = archive_write_close(ext);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(ext));
|
||||
archive_write_finish(ext);
|
||||
exit(0);
|
||||
}
|
||||
|
@ -267,7 +521,7 @@ copy_data(struct cpio *cpio, struct archive *ar, struct archive *aw)
|
|||
}
|
||||
|
||||
static void
|
||||
list(struct cpio *cpio)
|
||||
mode_list(struct cpio *cpio)
|
||||
{
|
||||
char mode[12];
|
||||
struct archive *a;
|
||||
|
@ -275,6 +529,8 @@ list(struct cpio *cpio)
|
|||
int r;
|
||||
|
||||
a = archive_read_new();
|
||||
if (a == NULL)
|
||||
cpio_errc(cpio, 1, 0, "Couldn't allocate archive object");
|
||||
archive_read_support_compression_all(a);
|
||||
archive_read_support_format_all(a);
|
||||
|
||||
|
@ -293,7 +549,8 @@ list(struct cpio *cpio)
|
|||
cpio_strmode(entry, mode);
|
||||
/* TODO: uname/gname lookups */
|
||||
/* TODO: Clean this up. */
|
||||
fprintf(stdout, "%s%3d %8s%8s " CPIO_FILESIZE_PRINTF " %s\n",
|
||||
fprintf(stdout,
|
||||
"%s%3d %8s%8s " CPIO_FILESIZE_PRINTF " %s\n",
|
||||
mode,
|
||||
archive_entry_nlink(entry),
|
||||
archive_entry_uname(entry),
|
||||
|
@ -303,20 +560,195 @@ list(struct cpio *cpio)
|
|||
} else
|
||||
fprintf(stdout, "%s\n", archive_entry_pathname(entry));
|
||||
}
|
||||
archive_read_close(a);
|
||||
r = archive_read_close(a);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(a));
|
||||
archive_read_finish(a);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
copy(struct cpio *cpio)
|
||||
/*
|
||||
* TODO: Fix hardlink handling; hardlinked source files won't
|
||||
* be hardlinked in the destination. Not clear whether existing
|
||||
* libarchive machinery can easily generalize to this case, or whether
|
||||
* I've finally found the use case that will force me to create
|
||||
* archive_read_disk.
|
||||
*/
|
||||
static int
|
||||
pass_file(struct cpio *cpio, const char *pathname)
|
||||
{
|
||||
(void)cpio; /* UNUSED */
|
||||
size_t len;
|
||||
const char *destpath;
|
||||
|
||||
len = strlen(cpio->pass_destdir) + strlen(pathname) + 8;
|
||||
if (len >= cpio->pass_destpath_alloc) {
|
||||
while (len >= cpio->pass_destpath_alloc) {
|
||||
cpio->pass_destpath_alloc += 512;
|
||||
cpio->pass_destpath_alloc *= 2;
|
||||
}
|
||||
free(cpio->pass_destpath);
|
||||
cpio->pass_destpath = malloc(cpio->pass_destpath_alloc);
|
||||
if (cpio->pass_destpath == NULL)
|
||||
cpio_errc(cpio, 1, ENOMEM,
|
||||
"Can't allocate path buffer");
|
||||
}
|
||||
if (pathname[0] == '/')
|
||||
pathname++;
|
||||
strcpy(cpio->pass_destpath, cpio->pass_destdir);
|
||||
strcat(cpio->pass_destpath, pathname);
|
||||
destpath = cpio->pass_destpath;
|
||||
if (cpio->option_rename)
|
||||
destpath = cpio_rename(destpath);
|
||||
if (destpath != NULL)
|
||||
file_to_archive(cpio, pathname, destpath);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
usage(struct cpio *cpio)
|
||||
mode_pass(struct cpio *cpio, const char *destdir)
|
||||
{
|
||||
const char *m = "Usage: cpio <options>\n";
|
||||
cpio_errc(cpio, 1, 0, m);
|
||||
int r;
|
||||
|
||||
/* Ensure target dir has a trailing '/' to simplify path surgery. */
|
||||
cpio->pass_destdir = malloc(strlen(destdir) + 8);
|
||||
strcpy(cpio->pass_destdir, destdir);
|
||||
if (destdir[strlen(destdir) - 1] != '/')
|
||||
strcat(cpio->pass_destdir, "/");
|
||||
|
||||
cpio->archive = archive_write_disk_new();
|
||||
if (cpio->archive == NULL)
|
||||
cpio_errc(cpio, 1, 0, "Failed to allocate archive object");
|
||||
r = archive_write_disk_set_options(cpio->archive, cpio->extract_flags);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(cpio->archive));
|
||||
archive_write_disk_set_standard_lookup(cpio->archive);
|
||||
process_lines(cpio, "-", pass_file);
|
||||
|
||||
r = archive_write_close(cpio->archive);
|
||||
if (r != ARCHIVE_OK)
|
||||
cpio_errc(cpio, 1, 0, archive_error_string(cpio->archive));
|
||||
archive_write_finish(cpio->archive);
|
||||
}
|
||||
|
||||
/*
|
||||
* Prompt for a new name for this entry. Returns a pointer to the
|
||||
* new name or NULL if the entry should not be copied. This
|
||||
* implements the semantics defined in POSIX.1-1996, which specifies
|
||||
* that an input of '.' means the name should be unchanged. GNU cpio
|
||||
* treats '.' as a literal new name.
|
||||
*/
|
||||
static const char *
|
||||
cpio_rename(const char *name)
|
||||
{
|
||||
static char buff[1024];
|
||||
FILE *t;
|
||||
char *p, *ret;
|
||||
|
||||
t = fopen("/dev/tty", "r+");
|
||||
if (t == NULL)
|
||||
return (name);
|
||||
fprintf(t, "%s (Enter/./(new name))? ", name);
|
||||
fflush(t);
|
||||
|
||||
p = fgets(buff, sizeof(buff), t);
|
||||
fclose(t);
|
||||
if (p == NULL)
|
||||
/* End-of-file is a blank line. */
|
||||
return (NULL);
|
||||
|
||||
while (*p == ' ' || *p == '\t')
|
||||
++p;
|
||||
if (*p == '\n' || *p == '\0')
|
||||
/* Empty line. */
|
||||
return (NULL);
|
||||
if (*p == '.' && p[1] == '\n')
|
||||
/* Single period preserves original name. */
|
||||
return (name);
|
||||
ret = p;
|
||||
/* Trim the final newline. */
|
||||
while (*p != '\0' && *p != '\n')
|
||||
++p;
|
||||
if (*p == '\0') {
|
||||
/* TODO: Handle this error somehow. */
|
||||
}
|
||||
/* Overwrite the final \n with a null character. */
|
||||
*p = '\0';
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static int
|
||||
cpio_getopt(struct cpio *cpio, const char *optstring,
|
||||
const struct option **poption)
|
||||
{
|
||||
char *p, *q;
|
||||
const struct option *option;
|
||||
int opt;
|
||||
int option_index;
|
||||
size_t option_length;
|
||||
|
||||
option_index = -1;
|
||||
*poption = NULL;
|
||||
|
||||
#ifdef HAVE_GETOPT_LONG
|
||||
opt = getopt_long(cpio->argc, cpio->argv, optstring,
|
||||
cpio_longopts, &option_index);
|
||||
if (option_index > -1)
|
||||
*poption = cpio_longopts + option_index;
|
||||
#else
|
||||
opt = getopt(cpio->argc, cpio->argv, optstring);
|
||||
#endif
|
||||
|
||||
/* Support long options through -W longopt=value */
|
||||
if (opt == 'W') {
|
||||
p = optarg;
|
||||
q = strchr(optarg, '=');
|
||||
if (q != NULL) {
|
||||
option_length = (size_t)(q - p);
|
||||
optarg = q + 1;
|
||||
} else {
|
||||
option_length = strlen(p);
|
||||
optarg = NULL;
|
||||
}
|
||||
option = cpio_longopts;
|
||||
while (option->name != NULL &&
|
||||
(strlen(option->name) < option_length ||
|
||||
strncmp(p, option->name, option_length) != 0 )) {
|
||||
option++;
|
||||
}
|
||||
|
||||
if (option->name != NULL) {
|
||||
*poption = option;
|
||||
opt = option->val;
|
||||
|
||||
/* If the first match was exact, we're done. */
|
||||
if (strncmp(p, option->name, strlen(option->name)) == 0) {
|
||||
while (option->name != NULL)
|
||||
option++;
|
||||
} else {
|
||||
/* Check if there's another match. */
|
||||
option++;
|
||||
while (option->name != NULL &&
|
||||
(strlen(option->name) < option_length ||
|
||||
strncmp(p, option->name, option_length) != 0)) {
|
||||
option++;
|
||||
}
|
||||
}
|
||||
if (option->name != NULL)
|
||||
cpio_errc(cpio, 1, 0,
|
||||
"Ambiguous option %s "
|
||||
"(matches both %s and %s)",
|
||||
p, (*poption)->name, option->name);
|
||||
|
||||
if ((*poption)->has_arg == required_argument
|
||||
&& optarg == NULL)
|
||||
cpio_errc(cpio, 1, 0,
|
||||
"Option \"%s\" requires argument", p);
|
||||
} else {
|
||||
opt = '?';
|
||||
/* TODO: Set up a fake 'struct option' for
|
||||
* error reporting... ? ? ? */
|
||||
}
|
||||
}
|
||||
|
||||
return (opt);
|
||||
}
|
||||
|
|
|
@ -49,9 +49,14 @@ struct cpio {
|
|||
int extract_flags; /* Flags for extract operation */
|
||||
char symlink_mode; /* H or L, per BSD conventions */
|
||||
const char *compress_program;
|
||||
int option_atime_restore; /* -a */
|
||||
int option_null; /* -0 --null */
|
||||
int option_list; /* -t */
|
||||
int option_link; /* -l */
|
||||
int option_rename; /* -r */
|
||||
char *pass_destdir;
|
||||
size_t pass_destpath_alloc;
|
||||
char *pass_destpath;
|
||||
|
||||
/* If >= 0, then close this when done. */
|
||||
int fd;
|
||||
|
|
|
@ -218,6 +218,9 @@ typedef int archive_close_callback(struct archive *, void *_client_data);
|
|||
#define ARCHIVE_FORMAT_AR 0x70000
|
||||
#define ARCHIVE_FORMAT_AR_GNU (ARCHIVE_FORMAT_AR | 1)
|
||||
#define ARCHIVE_FORMAT_AR_BSD (ARCHIVE_FORMAT_AR | 2)
|
||||
#define ARCHIVE_FORMAT_MTREE 0x80000
|
||||
#define ARCHIVE_FORMAT_MTREE_V1 (ARCHIVE_FORMAT_MTREE | 1)
|
||||
#define ARCHIVE_FORMAT_MTREE_V2 (ARCHIVE_FORMAT_MTREE | 2)
|
||||
|
||||
/*-
|
||||
* Basic outline for reading an archive:
|
||||
|
@ -254,6 +257,7 @@ int archive_read_support_format_cpio(struct archive *);
|
|||
int archive_read_support_format_empty(struct archive *);
|
||||
int archive_read_support_format_gnutar(struct archive *);
|
||||
int archive_read_support_format_iso9660(struct archive *);
|
||||
int archive_read_support_format_mtree(struct archive *);
|
||||
int archive_read_support_format_tar(struct archive *);
|
||||
int archive_read_support_format_zip(struct archive *);
|
||||
|
||||
|
|
|
@ -34,9 +34,6 @@ __FBSDID("$FreeBSD: src/lib/libarchive/archive_entry.c,v 1.44 2007/07/15 19:10:3
|
|||
#endif
|
||||
#ifdef MAJOR_IN_MKDEV
|
||||
#include <sys/mkdev.h>
|
||||
# if !defined makedev && (defined mkdev || defined _WIN32 || defined __WIN32__)
|
||||
# define makedev mkdev
|
||||
# endif
|
||||
#else
|
||||
#ifdef MAJOR_IN_SYSMACROS
|
||||
#include <sys/sysmacros.h>
|
||||
|
@ -74,6 +71,22 @@ __FBSDID("$FreeBSD: src/lib/libarchive/archive_entry.c,v 1.44 2007/07/15 19:10:3
|
|||
#undef max
|
||||
#define max(a, b) ((a)>(b)?(a):(b))
|
||||
|
||||
/* Play games to come up with a suitable makedev() definition. */
|
||||
#ifdef __QNXNTO__
|
||||
/* QNX. <sigh> */
|
||||
#include <sys/netmgr.h>
|
||||
#define ae_makedev(maj, min) makedev(ND_LOCAL_NODE, (maj), (min))
|
||||
#elif defined makedev
|
||||
/* There's a "makedev" macro. */
|
||||
#define ae_makedev(maj, min) makedev((maj), (min))
|
||||
#elif defined mkdev || defined _WIN32 || defined __WIN32__
|
||||
/* Windows. <sigh> */
|
||||
#define ae_makedev(maj, min) mkdev((maj), (min))
|
||||
#else
|
||||
/* There's a "makedev" function. */
|
||||
#define ae_makedev(maj, min) makedev((maj), (min))
|
||||
#endif
|
||||
|
||||
static void aes_clean(struct aes *);
|
||||
static void aes_copy(struct aes *dest, struct aes *src);
|
||||
static const char * aes_get_mbs(struct aes *);
|
||||
|
@ -402,7 +415,7 @@ dev_t
|
|||
archive_entry_dev(struct archive_entry *entry)
|
||||
{
|
||||
if (entry->ae_stat.aest_dev_is_broken_down)
|
||||
return makedev(entry->ae_stat.aest_devmajor,
|
||||
return ae_makedev(entry->ae_stat.aest_devmajor,
|
||||
entry->ae_stat.aest_devminor);
|
||||
else
|
||||
return (entry->ae_stat.aest_dev);
|
||||
|
@ -548,7 +561,7 @@ dev_t
|
|||
archive_entry_rdev(struct archive_entry *entry)
|
||||
{
|
||||
if (entry->ae_stat.aest_rdev_is_broken_down)
|
||||
return makedev(entry->ae_stat.aest_rdevmajor,
|
||||
return ae_makedev(entry->ae_stat.aest_rdevmajor,
|
||||
entry->ae_stat.aest_rdevminor);
|
||||
else
|
||||
return (entry->ae_stat.aest_rdev);
|
||||
|
@ -779,6 +792,14 @@ archive_entry_copy_pathname_w(struct archive_entry *entry, const wchar_t *name)
|
|||
aes_copy_wcs(&entry->ae_pathname, name);
|
||||
}
|
||||
|
||||
void
|
||||
archive_entry_set_perm(struct archive_entry *entry, mode_t p)
|
||||
{
|
||||
entry->stat_valid = 0;
|
||||
entry->ae_stat.aest_mode &= AE_IFMT;
|
||||
entry->ae_stat.aest_mode |= ~AE_IFMT & p;
|
||||
}
|
||||
|
||||
void
|
||||
archive_entry_set_rdev(struct archive_entry *entry, dev_t m)
|
||||
{
|
||||
|
|
|
@ -148,6 +148,7 @@ void archive_entry_set_nlink(struct archive_entry *, unsigned int);
|
|||
void archive_entry_set_pathname(struct archive_entry *, const char *);
|
||||
void archive_entry_copy_pathname(struct archive_entry *, const char *);
|
||||
void archive_entry_copy_pathname_w(struct archive_entry *, const wchar_t *);
|
||||
void archive_entry_set_perm(struct archive_entry *, mode_t);
|
||||
void archive_entry_set_rdev(struct archive_entry *, dev_t);
|
||||
void archive_entry_set_rdevmajor(struct archive_entry *, dev_t);
|
||||
void archive_entry_set_rdevminor(struct archive_entry *, dev_t);
|
||||
|
|
|
@ -122,4 +122,4 @@
|
|||
#define ARCHIVE_ERRNO_MISC (-1)
|
||||
#endif
|
||||
|
||||
#endif /* !ARCHIVE_H_INCLUDED */
|
||||
#endif /* !ARCHIVE_PLATFORM_H_INCLUDED */
|
||||
|
|
|
@ -35,6 +35,7 @@ archive_read_support_format_all(struct archive *a)
|
|||
archive_read_support_format_cpio(a);
|
||||
archive_read_support_format_empty(a);
|
||||
archive_read_support_format_iso9660(a);
|
||||
archive_read_support_format_mtree(a);
|
||||
archive_read_support_format_tar(a);
|
||||
archive_read_support_format_zip(a);
|
||||
return (ARCHIVE_OK);
|
||||
|
|
|
@ -0,0 +1,708 @@
|
|||
/*-
|
||||
* Copyright (c) 2003-2007 Tim Kientzle
|
||||
* 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 "archive_platform.h"
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
#ifdef HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
#endif
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#include <stddef.h>
|
||||
/* #include <stdint.h> */ /* See archive_platform.h */
|
||||
#ifdef HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#include "archive.h"
|
||||
#include "archive_entry.h"
|
||||
#include "archive_private.h"
|
||||
#include "archive_read_private.h"
|
||||
#include "archive_string.h"
|
||||
|
||||
struct mtree_entry {
|
||||
struct mtree_entry *next;
|
||||
char *name;
|
||||
char *option_start;
|
||||
char *option_end;
|
||||
char full;
|
||||
char used;
|
||||
};
|
||||
|
||||
struct mtree {
|
||||
struct archive_string line;
|
||||
size_t buffsize;
|
||||
char *buff;
|
||||
off_t offset;
|
||||
int fd;
|
||||
int bid;
|
||||
int filetype;
|
||||
int archive_format;
|
||||
const char *archive_format_name;
|
||||
struct mtree_entry *entries;
|
||||
struct mtree_entry *this_entry;
|
||||
struct archive_string current_dir;
|
||||
struct archive_string contents_name;
|
||||
};
|
||||
|
||||
static int bid(struct archive_read *);
|
||||
static int cleanup(struct archive_read *);
|
||||
static void parse_escapes(char *, struct mtree_entry *);
|
||||
static int parse_setting(struct archive_read *, struct mtree *,
|
||||
struct archive_entry *, char *, char *);
|
||||
static int read_data(struct archive_read *a,
|
||||
const void **buff, size_t *size, off_t *offset);
|
||||
static ssize_t readline(struct archive_read *, struct mtree *, char **, ssize_t);
|
||||
static int skip(struct archive_read *a);
|
||||
static int read_header(struct archive_read *,
|
||||
struct archive_entry *);
|
||||
static int64_t mtree_atol10(char **);
|
||||
static int64_t mtree_atol8(char **);
|
||||
|
||||
int
|
||||
archive_read_support_format_mtree(struct archive *_a)
|
||||
{
|
||||
struct archive_read *a = (struct archive_read *)_a;
|
||||
struct mtree *mtree;
|
||||
int r;
|
||||
|
||||
mtree = (struct mtree *)malloc(sizeof(*mtree));
|
||||
if (mtree == NULL) {
|
||||
archive_set_error(&a->archive, ENOMEM,
|
||||
"Can't allocate mtree data");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
memset(mtree, 0, sizeof(*mtree));
|
||||
mtree->bid = -1;
|
||||
mtree->fd = -1;
|
||||
|
||||
r = __archive_read_register_format(a, mtree,
|
||||
bid, read_header, read_data, skip, cleanup);
|
||||
|
||||
if (r != ARCHIVE_OK)
|
||||
free(mtree);
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
static int
|
||||
cleanup(struct archive_read *a)
|
||||
{
|
||||
struct mtree *mtree;
|
||||
struct mtree_entry *p, *q;
|
||||
|
||||
mtree = (struct mtree *)(a->format->data);
|
||||
p = mtree->entries;
|
||||
while (p != NULL) {
|
||||
q = p->next;
|
||||
free(p->name);
|
||||
/*
|
||||
* Note: option_start, option_end are pointers into
|
||||
* the block that p->name points to. So we should
|
||||
* not try to free them!
|
||||
*/
|
||||
free(p);
|
||||
p = q;
|
||||
}
|
||||
archive_string_free(&mtree->line);
|
||||
archive_string_free(&mtree->current_dir);
|
||||
archive_string_free(&mtree->contents_name);
|
||||
free(mtree->buff);
|
||||
free(mtree);
|
||||
(a->format->data) = NULL;
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
bid(struct archive_read *a)
|
||||
{
|
||||
struct mtree *mtree;
|
||||
ssize_t bytes_read;
|
||||
const void *h;
|
||||
const char *signature = "#mtree";
|
||||
const char *p;
|
||||
|
||||
mtree = (struct mtree *)(a->format->data);
|
||||
if (mtree->bid != -1)
|
||||
return (mtree->bid);
|
||||
|
||||
/* Now let's look at the actual header and see if it matches. */
|
||||
bytes_read = (a->decompressor->read_ahead)(a, &h, strlen(signature));
|
||||
|
||||
if (bytes_read <= 0)
|
||||
return (bytes_read);
|
||||
|
||||
p = h;
|
||||
mtree->bid = 0;
|
||||
while (bytes_read > 0 && *signature != '\0') {
|
||||
if (*p != *signature)
|
||||
return (mtree->bid = 0);
|
||||
mtree->bid += 8;
|
||||
p++;
|
||||
signature++;
|
||||
bytes_read--;
|
||||
}
|
||||
return (mtree->bid);
|
||||
}
|
||||
|
||||
/*
|
||||
* The extended mtree format permits multiple lines specifying
|
||||
* attributes for each file. Practically speaking, that means we have
|
||||
* to read the entire mtree file into memory up front.
|
||||
*/
|
||||
static int
|
||||
read_mtree(struct archive_read *a, struct mtree *mtree)
|
||||
{
|
||||
ssize_t len;
|
||||
char *p;
|
||||
struct mtree_entry *mentry;
|
||||
struct mtree_entry *last_mentry = NULL;
|
||||
|
||||
mtree->archive_format = ARCHIVE_FORMAT_MTREE_V1;
|
||||
mtree->archive_format_name = "mtree";
|
||||
|
||||
for (;;) {
|
||||
len = readline(a, mtree, &p, 256);
|
||||
if (len == 0) {
|
||||
mtree->this_entry = mtree->entries;
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
if (len < 0)
|
||||
return (len);
|
||||
/* Leading whitespace is never significant, ignore it. */
|
||||
while (*p == ' ' || *p == '\t') {
|
||||
++p;
|
||||
--len;
|
||||
}
|
||||
/* Skip content lines and blank lines. */
|
||||
if (*p == '#')
|
||||
continue;
|
||||
if (*p == '\r' || *p == '\n' || *p == '\0')
|
||||
continue;
|
||||
mentry = malloc(sizeof(*mentry));
|
||||
if (mentry == NULL) {
|
||||
archive_set_error(&a->archive, ENOMEM,
|
||||
"Can't allocate memory");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
memset(mentry, 0, sizeof(*mentry));
|
||||
/* Add this entry to list. */
|
||||
if (last_mentry == NULL) {
|
||||
last_mentry = mtree->entries = mentry;
|
||||
} else {
|
||||
last_mentry->next = mentry;
|
||||
}
|
||||
last_mentry = mentry;
|
||||
|
||||
/* Copy line over onto heap. */
|
||||
mentry->name = malloc(len + 1);
|
||||
if (mentry->name == NULL) {
|
||||
free(mentry);
|
||||
archive_set_error(&a->archive, ENOMEM,
|
||||
"Can't allocate memory");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
strcpy(mentry->name, p);
|
||||
mentry->option_end = mentry->name + len;
|
||||
/* Find end of name. */
|
||||
p = mentry->name;
|
||||
while (*p != ' ' && *p != '\n' && *p != '\0')
|
||||
++p;
|
||||
*p++ = '\0';
|
||||
parse_escapes(mentry->name, mentry);
|
||||
/* Find start of options and record it. */
|
||||
while (p < mentry->option_end && (*p == ' ' || *p == '\t'))
|
||||
++p;
|
||||
mentry->option_start = p;
|
||||
/* Null terminate each separate option. */
|
||||
while (++p < mentry->option_end)
|
||||
if (*p == ' ' || *p == '\t' || *p == '\n')
|
||||
*p = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
read_header(struct archive_read *a, struct archive_entry *entry)
|
||||
{
|
||||
struct stat st;
|
||||
struct mtree *mtree;
|
||||
struct mtree_entry *mentry, *mentry2;
|
||||
char *p, *q;
|
||||
int r = ARCHIVE_OK, r1;
|
||||
|
||||
mtree = (struct mtree *)(a->format->data);
|
||||
|
||||
if (mtree->fd >= 0) {
|
||||
close(mtree->fd);
|
||||
mtree->fd = -1;
|
||||
}
|
||||
|
||||
if (mtree->entries == NULL) {
|
||||
r = read_mtree(a, mtree);
|
||||
if (r != ARCHIVE_OK)
|
||||
return (r);
|
||||
}
|
||||
|
||||
a->archive.archive_format = mtree->archive_format;
|
||||
a->archive.archive_format_name = mtree->archive_format_name;
|
||||
|
||||
for (;;) {
|
||||
mentry = mtree->this_entry;
|
||||
if (mentry == NULL) {
|
||||
mtree->this_entry = NULL;
|
||||
return (ARCHIVE_EOF);
|
||||
}
|
||||
mtree->this_entry = mentry->next;
|
||||
if (mentry->used)
|
||||
continue;
|
||||
mentry->used = 1;
|
||||
if (strcmp(mentry->name, "..") == 0) {
|
||||
if (archive_strlen(&mtree->current_dir) > 0) {
|
||||
/* Roll back current path. */
|
||||
p = mtree->current_dir.s
|
||||
+ mtree->current_dir.length - 1;
|
||||
while (p >= mtree->current_dir.s && *p != '/')
|
||||
--p;
|
||||
if (p >= mtree->current_dir.s)
|
||||
--p;
|
||||
mtree->current_dir.length
|
||||
= p - mtree->current_dir.s + 1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
mtree->filetype = AE_IFREG;
|
||||
|
||||
/* Parse options. */
|
||||
p = mentry->option_start;
|
||||
while (p < mentry->option_end) {
|
||||
q = p + strlen(p);
|
||||
r1 = parse_setting(a, mtree, entry, p, q);
|
||||
if (r1 != ARCHIVE_OK)
|
||||
r = r1;
|
||||
p = q + 1;
|
||||
}
|
||||
|
||||
if (mentry->full) {
|
||||
archive_entry_copy_pathname(entry, mentry->name);
|
||||
/*
|
||||
* "Full" entries are allowed to have multiple
|
||||
* lines and those lines aren't required to be
|
||||
* adjacent. We don't support multiple lines
|
||||
* for "relative" entries nor do we make any
|
||||
* attempt to merge data from separate
|
||||
* "relative" and "full" entries. (Merging
|
||||
* "relative" and "full" entries would require
|
||||
* dealing with pathname canonicalization,
|
||||
* which is a very tricky subject.)
|
||||
*/
|
||||
mentry2 = mentry->next;
|
||||
while (mentry2 != NULL) {
|
||||
if (mentry2->full
|
||||
&& !mentry2->used
|
||||
&& strcmp(mentry->name, mentry2->name) == 0) {
|
||||
/*
|
||||
* Add those options as well;
|
||||
* later lines override
|
||||
* earlier ones.
|
||||
*/
|
||||
p = mentry2->option_start;
|
||||
while (p < mentry2->option_end) {
|
||||
q = p + strlen(p);
|
||||
r1 = parse_setting(a, mtree, entry, p, q);
|
||||
if (r1 != ARCHIVE_OK)
|
||||
r = r1;
|
||||
p = q + 1;
|
||||
}
|
||||
mentry2->used = 1;
|
||||
}
|
||||
mentry2 = mentry2->next;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Relative entries require us to construct
|
||||
* the full path and possibly update the
|
||||
* current directory.
|
||||
*/
|
||||
size_t n = archive_strlen(&mtree->current_dir);
|
||||
if (n > 0)
|
||||
archive_strcat(&mtree->current_dir, "/");
|
||||
archive_strcat(&mtree->current_dir, mentry->name);
|
||||
archive_entry_copy_pathname(entry, mtree->current_dir.s);
|
||||
if (archive_entry_filetype(entry) != AE_IFDIR)
|
||||
mtree->current_dir.length = n;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to open and stat the file to get the real size.
|
||||
* It would be nice to avoid this here so that getting
|
||||
* a listing of an mtree wouldn't require opening
|
||||
* every referenced contents file. But then we
|
||||
* wouldn't know the actual contents size, so I don't
|
||||
* see a really viable way around this. (Also, we may
|
||||
* want to someday pull other unspecified info from
|
||||
* the contents file on disk.)
|
||||
*/
|
||||
if (archive_strlen(&mtree->contents_name) > 0) {
|
||||
mtree->fd = open(mtree->contents_name.s, O_RDONLY);
|
||||
if (mtree->fd < 0) {
|
||||
archive_set_error(&a->archive, errno,
|
||||
"Can't open content=\"%s\"",
|
||||
mtree->contents_name.s);
|
||||
r = ARCHIVE_WARN;
|
||||
}
|
||||
} else {
|
||||
/* If the specified path opens, use it. */
|
||||
mtree->fd = open(mtree->current_dir.s, O_RDONLY);
|
||||
/* But don't fail if it's not there. */
|
||||
}
|
||||
|
||||
/*
|
||||
* If there is a contents file on disk, use that size;
|
||||
* otherwise leave it as-is (it might have been set from
|
||||
* the mtree size= keyword).
|
||||
*/
|
||||
if (mtree->fd >= 0) {
|
||||
fstat(mtree->fd, &st);
|
||||
archive_entry_set_size(entry, st.st_size);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
parse_setting(struct archive_read *a, struct mtree *mtree, struct archive_entry *entry, char *key, char *end)
|
||||
{
|
||||
char *val;
|
||||
|
||||
|
||||
if (end == key)
|
||||
return (ARCHIVE_OK);
|
||||
if (*key == '\0')
|
||||
return (ARCHIVE_OK);
|
||||
|
||||
val = strchr(key, '=');
|
||||
if (val == NULL) {
|
||||
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Malformed attribute \"%s\" (%d)", key, key[0]);
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
|
||||
*val = '\0';
|
||||
++val;
|
||||
|
||||
switch (key[0]) {
|
||||
case 'c':
|
||||
if (strcmp(key, "content") == 0) {
|
||||
parse_escapes(val, NULL);
|
||||
archive_strcpy(&mtree->contents_name, val);
|
||||
break;
|
||||
}
|
||||
case 'g':
|
||||
if (strcmp(key, "gid") == 0) {
|
||||
archive_entry_set_gid(entry, mtree_atol10(&val));
|
||||
break;
|
||||
}
|
||||
if (strcmp(key, "gname") == 0) {
|
||||
archive_entry_copy_gname(entry, val);
|
||||
break;
|
||||
}
|
||||
case 'm':
|
||||
if (strcmp(key, "mode") == 0) {
|
||||
if (val[0] == '0') {
|
||||
archive_entry_set_perm(entry,
|
||||
mtree_atol8(&val));
|
||||
} else
|
||||
archive_set_error(&a->archive,
|
||||
ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Symbolic mode \"%s\" unsupported", val);
|
||||
break;
|
||||
}
|
||||
case 't':
|
||||
if (strcmp(key, "type") == 0) {
|
||||
switch (val[0]) {
|
||||
case 'b':
|
||||
if (strcmp(val, "block") == 0) {
|
||||
mtree->filetype = AE_IFBLK;
|
||||
break;
|
||||
}
|
||||
case 'c':
|
||||
if (strcmp(val, "char") == 0) {
|
||||
mtree->filetype = AE_IFCHR;
|
||||
break;
|
||||
}
|
||||
case 'd':
|
||||
if (strcmp(val, "dir") == 0) {
|
||||
mtree->filetype = AE_IFDIR;
|
||||
break;
|
||||
}
|
||||
case 'f':
|
||||
if (strcmp(val, "fifo") == 0) {
|
||||
mtree->filetype = AE_IFIFO;
|
||||
break;
|
||||
}
|
||||
if (strcmp(val, "file") == 0) {
|
||||
mtree->filetype = AE_IFREG;
|
||||
break;
|
||||
}
|
||||
case 'l':
|
||||
if (strcmp(val, "link") == 0) {
|
||||
mtree->filetype = AE_IFLNK;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
archive_set_error(&a->archive,
|
||||
ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Unrecognized file type \"%s\"", val);
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
archive_entry_set_filetype(entry, mtree->filetype);
|
||||
break;
|
||||
}
|
||||
if (strcmp(key, "time") == 0) {
|
||||
archive_entry_set_mtime(entry, mtree_atol10(&val), 0);
|
||||
break;
|
||||
}
|
||||
case 'u':
|
||||
if (strcmp(key, "uid") == 0) {
|
||||
archive_entry_set_uid(entry, mtree_atol10(&val));
|
||||
break;
|
||||
}
|
||||
if (strcmp(key, "uname") == 0) {
|
||||
archive_entry_copy_uname(entry, val);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Unrecognized key %s=%s", key, val);
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
static int
|
||||
read_data(struct archive_read *a, const void **buff, size_t *size, off_t *offset)
|
||||
{
|
||||
ssize_t bytes_read;
|
||||
struct mtree *mtree;
|
||||
|
||||
mtree = (struct mtree *)(a->format->data);
|
||||
if (mtree->fd < 0) {
|
||||
*buff = NULL;
|
||||
*offset = 0;
|
||||
*size = 0;
|
||||
return (ARCHIVE_EOF);
|
||||
}
|
||||
if (mtree->buff == NULL) {
|
||||
mtree->buffsize = 64 * 1024;
|
||||
mtree->buff = malloc(mtree->buffsize);
|
||||
if (mtree->buff == NULL) {
|
||||
archive_set_error(&a->archive, ENOMEM,
|
||||
"Can't allocate memory");
|
||||
}
|
||||
}
|
||||
|
||||
*buff = mtree->buff;
|
||||
*offset = mtree->offset;
|
||||
bytes_read = read(mtree->fd, mtree->buff, mtree->buffsize);
|
||||
if (bytes_read < 0) {
|
||||
archive_set_error(&a->archive, errno, "Can't read");
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
if (bytes_read == 0) {
|
||||
*size = 0;
|
||||
return (ARCHIVE_EOF);
|
||||
}
|
||||
mtree->offset += bytes_read;
|
||||
*size = (size_t)bytes_read;
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
/* Skip does nothing except possibly close the contents file. */
|
||||
static int
|
||||
skip(struct archive_read *a)
|
||||
{
|
||||
struct mtree *mtree;
|
||||
|
||||
mtree = (struct mtree *)(a->format->data);
|
||||
if (mtree->fd >= 0) {
|
||||
close(mtree->fd);
|
||||
mtree->fd = -1;
|
||||
}
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Since parsing octal escapes always makes strings shorter,
|
||||
* we can always do this conversion in-place.
|
||||
*/
|
||||
static void
|
||||
parse_escapes(char *src, struct mtree_entry *mentry)
|
||||
{
|
||||
char *dest = src;
|
||||
char c;
|
||||
|
||||
while (*src != '\0') {
|
||||
c = *src++;
|
||||
if (c == '/' && mentry != NULL)
|
||||
mentry->full = 1;
|
||||
if (c == '\\') {
|
||||
if (src[0] >= '0' && src[0] <= '3'
|
||||
&& src[1] >= '0' && src[1] <= '7'
|
||||
&& src[2] >= '0' && src[2] <= '7') {
|
||||
c = (src[0] - '0') << 6;
|
||||
c |= (src[1] - '0') << 3;
|
||||
c |= (src[2] - '0');
|
||||
src += 3;
|
||||
}
|
||||
}
|
||||
*dest++ = c;
|
||||
}
|
||||
*dest = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* Note that this implementation does not (and should not!) obey
|
||||
* locale settings; you cannot simply substitute strtol here, since
|
||||
* it does obey locale.
|
||||
*/
|
||||
static int64_t
|
||||
mtree_atol8(char **p)
|
||||
{
|
||||
int64_t l, limit, last_digit_limit;
|
||||
int digit, base;
|
||||
|
||||
base = 8;
|
||||
limit = INT64_MAX / base;
|
||||
last_digit_limit = INT64_MAX % base;
|
||||
|
||||
l = 0;
|
||||
digit = **p - '0';
|
||||
while (digit >= 0 && digit < base) {
|
||||
if (l>limit || (l == limit && digit > last_digit_limit)) {
|
||||
l = INT64_MAX; /* Truncate on overflow. */
|
||||
break;
|
||||
}
|
||||
l = (l * base) + digit;
|
||||
digit = *++(*p) - '0';
|
||||
}
|
||||
return (l);
|
||||
}
|
||||
|
||||
/*
|
||||
* Note that this implementation does not (and should not!) obey
|
||||
* locale settings; you cannot simply substitute strtol here, since
|
||||
* it does obey locale.
|
||||
*/
|
||||
static int64_t
|
||||
mtree_atol10(char **p)
|
||||
{
|
||||
int64_t l, limit, last_digit_limit;
|
||||
int base, digit, sign;
|
||||
|
||||
base = 10;
|
||||
limit = INT64_MAX / base;
|
||||
last_digit_limit = INT64_MAX % base;
|
||||
|
||||
if (**p == '-') {
|
||||
sign = -1;
|
||||
++(*p);
|
||||
} else
|
||||
sign = 1;
|
||||
|
||||
l = 0;
|
||||
digit = **p - '0';
|
||||
while (digit >= 0 && digit < base) {
|
||||
if (l > limit || (l == limit && digit > last_digit_limit)) {
|
||||
l = UINT64_MAX; /* Truncate on overflow. */
|
||||
break;
|
||||
}
|
||||
l = (l * base) + digit;
|
||||
digit = *++(*p) - '0';
|
||||
}
|
||||
return (sign < 0) ? -l : l;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns length of line (including trailing newline)
|
||||
* or negative on error. 'start' argument is updated to
|
||||
* point to first character of line.
|
||||
*/
|
||||
static ssize_t
|
||||
readline(struct archive_read *a, struct mtree *mtree, char **start, ssize_t limit)
|
||||
{
|
||||
ssize_t bytes_read;
|
||||
ssize_t total_size = 0;
|
||||
const void *t;
|
||||
const char *s;
|
||||
void *p;
|
||||
|
||||
/* Accumulate line in a line buffer. */
|
||||
for (;;) {
|
||||
/* Read some more. */
|
||||
bytes_read = (a->decompressor->read_ahead)(a, &t, 1);
|
||||
if (bytes_read == 0)
|
||||
return (0);
|
||||
if (bytes_read < 0)
|
||||
return (ARCHIVE_FATAL);
|
||||
s = t; /* Start of line? */
|
||||
p = memchr(t, '\n', bytes_read);
|
||||
/* If we found '\n', trim the read. */
|
||||
if (p != NULL) {
|
||||
bytes_read = 1 + ((const char *)p) - s;
|
||||
}
|
||||
if (total_size + bytes_read + 1 > limit) {
|
||||
archive_set_error(&a->archive,
|
||||
ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Line too long");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
if (archive_string_ensure(&mtree->line,
|
||||
total_size + bytes_read + 1) == NULL) {
|
||||
archive_set_error(&a->archive, ENOMEM,
|
||||
"Can't allocate working buffer");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
memcpy(mtree->line.s + total_size, t, bytes_read);
|
||||
(a->decompressor->consume)(a, bytes_read);
|
||||
total_size += bytes_read;
|
||||
/* Null terminate. */
|
||||
mtree->line.s[total_size] = '\0';
|
||||
/* If we found '\n', clean up and return. */
|
||||
if (p != NULL) {
|
||||
*start = mtree->line.s;
|
||||
return (total_size);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#include "archive_platform.h"
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_tar.c,v 1.60 2007/07/15 19:13:59 kientzle Exp $");
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_tar.c,v 1.61 2007/08/18 21:53:25 kientzle Exp $");
|
||||
|
||||
#ifdef HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
|
@ -72,6 +72,8 @@ static size_t wcslen(const wchar_t *s)
|
|||
#include "archive_private.h"
|
||||
#include "archive_read_private.h"
|
||||
|
||||
#define tar_min(a,b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
/*
|
||||
* Layout of POSIX 'ustar' tar header.
|
||||
*/
|
||||
|
@ -172,6 +174,7 @@ static int archive_block_is_null(const unsigned char *p);
|
|||
static char *base64_decode(const wchar_t *, size_t, size_t *);
|
||||
static void gnu_add_sparse_entry(struct tar *,
|
||||
off_t offset, off_t remaining);
|
||||
static void gnu_clear_sparse_list(struct tar *);
|
||||
static int gnu_sparse_old_read(struct archive_read *, struct tar *,
|
||||
const struct archive_entry_header_gnutar *header);
|
||||
static void gnu_sparse_old_parse(struct tar *,
|
||||
|
@ -211,7 +214,8 @@ static int pax_attribute(struct tar *, struct archive_entry *,
|
|||
static int pax_header(struct archive_read *, struct tar *,
|
||||
struct archive_entry *, char *attr);
|
||||
static void pax_time(const wchar_t *, int64_t *sec, long *nanos);
|
||||
static ssize_t readline(struct archive_read *, struct tar *, const char **);
|
||||
static ssize_t readline(struct archive_read *, struct tar *, const char **,
|
||||
ssize_t limit);
|
||||
static int read_body_to_string(struct archive_read *, struct tar *,
|
||||
struct archive_string *, const void *h);
|
||||
static int64_t tar_atol(const char *, unsigned);
|
||||
|
@ -263,14 +267,9 @@ static int
|
|||
archive_read_format_tar_cleanup(struct archive_read *a)
|
||||
{
|
||||
struct tar *tar;
|
||||
struct sparse_block *p;
|
||||
|
||||
tar = (struct tar *)(a->format->data);
|
||||
while (tar->sparse_list != NULL) {
|
||||
p = tar->sparse_list;
|
||||
tar->sparse_list = p->next;
|
||||
free(p);
|
||||
}
|
||||
gnu_clear_sparse_list(tar);
|
||||
archive_string_free(&tar->acl_text);
|
||||
archive_string_free(&tar->entry_name);
|
||||
archive_string_free(&tar->entry_linkname);
|
||||
|
@ -423,7 +422,6 @@ archive_read_format_tar_read_header(struct archive_read *a,
|
|||
const char *p;
|
||||
int r;
|
||||
size_t l;
|
||||
ssize_t size;
|
||||
|
||||
/* Assign default device/inode values. */
|
||||
archive_entry_set_dev(entry, 1 + default_dev); /* Don't use zero. */
|
||||
|
@ -445,22 +443,6 @@ archive_read_format_tar_read_header(struct archive_read *a,
|
|||
|
||||
r = tar_read_header(a, tar, entry);
|
||||
|
||||
/*
|
||||
* Yuck. See comments for gnu_sparse_10_read for why this
|
||||
* is here and not in _read_data where it "should" go.
|
||||
*/
|
||||
if (tar->sparse_gnu_pending
|
||||
&& tar->sparse_gnu_major == 1
|
||||
&& tar->sparse_gnu_minor == 0) {
|
||||
tar->sparse_gnu_pending = 0;
|
||||
/* Read initial sparse map. */
|
||||
size = gnu_sparse_10_read(a, tar);
|
||||
if (size < 0)
|
||||
return (size);
|
||||
tar->entry_bytes_remaining -= size;
|
||||
tar->entry_padding += size;
|
||||
}
|
||||
|
||||
/*
|
||||
* "non-sparse" files are really just sparse files with
|
||||
* a single block.
|
||||
|
@ -497,11 +479,12 @@ archive_read_format_tar_read_data(struct archive_read *a,
|
|||
|
||||
if (tar->sparse_gnu_pending) {
|
||||
if (tar->sparse_gnu_major == 1 && tar->sparse_gnu_minor == 0) {
|
||||
/*
|
||||
* <sigh> We should parse the sparse data
|
||||
* here, but have to parse it as part of the
|
||||
* header because of a bug in GNU tar 1.16.1.
|
||||
*/
|
||||
tar->sparse_gnu_pending = 0;
|
||||
/* Read initial sparse map. */
|
||||
bytes_read = gnu_sparse_10_read(a, tar);
|
||||
tar->entry_bytes_remaining -= bytes_read;
|
||||
if (bytes_read < 0)
|
||||
return (bytes_read);
|
||||
} else {
|
||||
*size = 0;
|
||||
*offset = 0;
|
||||
|
@ -559,7 +542,6 @@ archive_read_format_tar_skip(struct archive_read *a)
|
|||
{
|
||||
off_t bytes_skipped;
|
||||
struct tar* tar;
|
||||
struct sparse_block *p;
|
||||
|
||||
tar = (struct tar *)(a->format->data);
|
||||
|
||||
|
@ -577,12 +559,7 @@ archive_read_format_tar_skip(struct archive_read *a)
|
|||
tar->entry_padding = 0;
|
||||
|
||||
/* Free the sparse list. */
|
||||
while (tar->sparse_list != NULL) {
|
||||
p = tar->sparse_list;
|
||||
tar->sparse_list = p->next;
|
||||
free(p);
|
||||
}
|
||||
tar->sparse_last = NULL;
|
||||
gnu_clear_sparse_list(tar);
|
||||
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
@ -1650,6 +1627,19 @@ gnu_add_sparse_entry(struct tar *tar, off_t offset, off_t remaining)
|
|||
p->remaining = remaining;
|
||||
}
|
||||
|
||||
static void
|
||||
gnu_clear_sparse_list(struct tar *tar)
|
||||
{
|
||||
struct sparse_block *p;
|
||||
|
||||
while (tar->sparse_list != NULL) {
|
||||
p = tar->sparse_list;
|
||||
tar->sparse_list = p->next;
|
||||
free(p);
|
||||
}
|
||||
tar->sparse_last = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* GNU tar old-format sparse data.
|
||||
*
|
||||
|
@ -1793,7 +1783,7 @@ gnu_sparse_01_parse(struct tar *tar, const wchar_t *p)
|
|||
*/
|
||||
static int64_t
|
||||
gnu_sparse_10_atol(struct archive_read *a, struct tar *tar,
|
||||
ssize_t *total_read)
|
||||
ssize_t *remaining)
|
||||
{
|
||||
int64_t l, limit, last_digit_limit;
|
||||
const char *p;
|
||||
|
@ -1804,10 +1794,16 @@ gnu_sparse_10_atol(struct archive_read *a, struct tar *tar,
|
|||
limit = INT64_MAX / base;
|
||||
last_digit_limit = INT64_MAX % base;
|
||||
|
||||
bytes_read = readline(a, tar, &p);
|
||||
if (bytes_read <= 0)
|
||||
return (ARCHIVE_FATAL);
|
||||
*total_read += bytes_read;
|
||||
/*
|
||||
* Skip any lines starting with '#'; GNU tar specs
|
||||
* don't require this, but they should.
|
||||
*/
|
||||
do {
|
||||
bytes_read = readline(a, tar, &p, tar_min(*remaining, 100));
|
||||
if (bytes_read <= 0)
|
||||
return (ARCHIVE_FATAL);
|
||||
*remaining -= bytes_read;
|
||||
} while (p[0] == '#');
|
||||
|
||||
l = 0;
|
||||
while (bytes_read > 0) {
|
||||
|
@ -1828,32 +1824,39 @@ gnu_sparse_10_atol(struct archive_read *a, struct tar *tar,
|
|||
}
|
||||
|
||||
/*
|
||||
* Returns number of bytes consumed to read the sparse block data.
|
||||
* Returns length (in bytes) of the sparse data description
|
||||
* that was read.
|
||||
*/
|
||||
static ssize_t
|
||||
gnu_sparse_10_read(struct archive_read *a, struct tar *tar)
|
||||
{
|
||||
ssize_t bytes_read = 0;
|
||||
ssize_t remaining, bytes_read;
|
||||
int entries;
|
||||
off_t offset, size, to_skip;
|
||||
|
||||
/* Clear out the existing sparse list. */
|
||||
gnu_clear_sparse_list(tar);
|
||||
|
||||
remaining = tar->entry_bytes_remaining;
|
||||
|
||||
/* Parse entries. */
|
||||
entries = gnu_sparse_10_atol(a, tar, &bytes_read);
|
||||
entries = gnu_sparse_10_atol(a, tar, &remaining);
|
||||
if (entries < 0)
|
||||
return (ARCHIVE_FATAL);
|
||||
/* Parse the individual entries. */
|
||||
while (entries-- > 0) {
|
||||
/* Parse offset/size */
|
||||
offset = gnu_sparse_10_atol(a, tar, &bytes_read);
|
||||
offset = gnu_sparse_10_atol(a, tar, &remaining);
|
||||
if (offset < 0)
|
||||
return (ARCHIVE_FATAL);
|
||||
size = gnu_sparse_10_atol(a, tar, &bytes_read);
|
||||
size = gnu_sparse_10_atol(a, tar, &remaining);
|
||||
if (size < 0)
|
||||
return (ARCHIVE_FATAL);
|
||||
/* Add a new sparse entry. */
|
||||
gnu_add_sparse_entry(tar, offset, size);
|
||||
}
|
||||
/* Skip rest of block... */
|
||||
bytes_read = tar->entry_bytes_remaining - remaining;
|
||||
to_skip = 0x1ff & -bytes_read;
|
||||
if (to_skip != (a->decompressor->skip)(a, to_skip))
|
||||
return (ARCHIVE_FATAL);
|
||||
|
@ -2004,7 +2007,8 @@ tar_atol256(const char *_p, unsigned char_cnt)
|
|||
* when possible.
|
||||
*/
|
||||
static ssize_t
|
||||
readline(struct archive_read *a, struct tar *tar, const char **start)
|
||||
readline(struct archive_read *a, struct tar *tar, const char **start,
|
||||
ssize_t limit)
|
||||
{
|
||||
ssize_t bytes_read;
|
||||
ssize_t total_size = 0;
|
||||
|
@ -2020,12 +2024,24 @@ readline(struct archive_read *a, struct tar *tar, const char **start)
|
|||
/* If we found '\n' in the read buffer, return pointer to that. */
|
||||
if (p != NULL) {
|
||||
bytes_read = 1 + ((const char *)p) - s;
|
||||
if (bytes_read > limit) {
|
||||
archive_set_error(&a->archive,
|
||||
ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Line too long");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
(a->decompressor->consume)(a, bytes_read);
|
||||
*start = s;
|
||||
return (bytes_read);
|
||||
}
|
||||
/* Otherwise, we need to accumulate in a line buffer. */
|
||||
for (;;) {
|
||||
if (total_size + bytes_read > limit) {
|
||||
archive_set_error(&a->archive,
|
||||
ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Line too long");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
if (archive_string_ensure(&tar->line, total_size + bytes_read) == NULL) {
|
||||
archive_set_error(&a->archive, ENOMEM,
|
||||
"Can't allocate working buffer");
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
*/
|
||||
|
||||
#include "archive_platform.h"
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_disk.c,v 1.13 2007/07/15 19:13:59 kientzle Exp $");
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_disk.c,v 1.14 2007/08/12 17:35:05 kientzle Exp $");
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
|
@ -1541,15 +1541,28 @@ set_mode(struct archive_write_disk *a, int mode)
|
|||
}
|
||||
if (a->pst->st_gid != a->gid) {
|
||||
mode &= ~ S_ISGID;
|
||||
archive_set_error(&a->archive, -1, "Can't restore SGID bit");
|
||||
r = ARCHIVE_WARN;
|
||||
if (a->flags & ARCHIVE_EXTRACT_OWNER) {
|
||||
/*
|
||||
* This is only an error if you
|
||||
* requested owner restore. If you
|
||||
* didn't, we'll try to restore
|
||||
* sgid/suid, but won't consider it a
|
||||
* problem if we can't.
|
||||
*/
|
||||
archive_set_error(&a->archive, -1,
|
||||
"Can't restore SGID bit");
|
||||
r = ARCHIVE_WARN;
|
||||
}
|
||||
}
|
||||
/* While we're here, double-check the UID. */
|
||||
if (a->pst->st_uid != a->uid
|
||||
&& (a->todo & TODO_SUID)) {
|
||||
mode &= ~ S_ISUID;
|
||||
archive_set_error(&a->archive, -1, "Can't restore SUID bit");
|
||||
r = ARCHIVE_WARN;
|
||||
if (a->flags & ARCHIVE_EXTRACT_OWNER) {
|
||||
archive_set_error(&a->archive, -1,
|
||||
"Can't restore SUID bit");
|
||||
r = ARCHIVE_WARN;
|
||||
}
|
||||
}
|
||||
a->todo &= ~TODO_SGID_CHECK;
|
||||
a->todo &= ~TODO_SUID_CHECK;
|
||||
|
@ -1561,8 +1574,11 @@ set_mode(struct archive_write_disk *a, int mode)
|
|||
*/
|
||||
if (a->user_uid != a->uid) {
|
||||
mode &= ~ S_ISUID;
|
||||
archive_set_error(&a->archive, -1, "Can't make file SUID");
|
||||
r = ARCHIVE_WARN;
|
||||
if (a->flags & ARCHIVE_EXTRACT_OWNER) {
|
||||
archive_set_error(&a->archive, -1,
|
||||
"Can't make file SUID");
|
||||
r = ARCHIVE_WARN;
|
||||
}
|
||||
}
|
||||
a->todo &= ~TODO_SUID_CHECK;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ __FBSDID("$FreeBSD: src/lib/libarchive/filter_fork.c,v 1.1 2007/05/29 01:00:20 k
|
|||
#if defined(HAVE_POLL)
|
||||
# if defined(HAVE_POLL_H)
|
||||
# include <poll.h>
|
||||
# elif defined(HAVE_SYS_POLL_H)
|
||||
# include <sys/poll.h>
|
||||
# endif
|
||||
#elif defined(HAVE_SELECT)
|
||||
# if defined(HAVE_SYS_SELECT_H)
|
||||
|
|
44
archivers/libarchive/files/libarchive/test/list.h
Normal file
44
archivers/libarchive/files/libarchive/test/list.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
DEFINE_TEST(test_acl_basic)
|
||||
DEFINE_TEST(test_acl_pax)
|
||||
DEFINE_TEST(test_archive_api_feature)
|
||||
DEFINE_TEST(test_bad_fd)
|
||||
DEFINE_TEST(test_entry)
|
||||
DEFINE_TEST(test_read_compress_program)
|
||||
DEFINE_TEST(test_read_data_large)
|
||||
DEFINE_TEST(test_read_extract)
|
||||
DEFINE_TEST(test_read_format_ar)
|
||||
DEFINE_TEST(test_read_format_cpio_bin)
|
||||
DEFINE_TEST(test_read_format_cpio_bin_Z)
|
||||
DEFINE_TEST(test_read_format_cpio_bin_bz2)
|
||||
DEFINE_TEST(test_read_format_cpio_bin_gz)
|
||||
DEFINE_TEST(test_read_format_cpio_odc)
|
||||
DEFINE_TEST(test_read_format_cpio_svr4_gzip)
|
||||
DEFINE_TEST(test_read_format_cpio_svr4c_Z)
|
||||
DEFINE_TEST(test_read_format_empty)
|
||||
DEFINE_TEST(test_read_format_gtar_gz)
|
||||
DEFINE_TEST(test_read_format_gtar_sparse)
|
||||
DEFINE_TEST(test_read_format_iso_gz)
|
||||
DEFINE_TEST(test_read_format_isorr_bz2)
|
||||
DEFINE_TEST(test_read_format_mtree)
|
||||
DEFINE_TEST(test_read_format_pax_bz2)
|
||||
DEFINE_TEST(test_read_format_tar)
|
||||
DEFINE_TEST(test_read_format_tbz)
|
||||
DEFINE_TEST(test_read_format_tgz)
|
||||
DEFINE_TEST(test_read_format_tz)
|
||||
DEFINE_TEST(test_read_format_zip)
|
||||
DEFINE_TEST(test_read_large)
|
||||
DEFINE_TEST(test_read_pax_truncated)
|
||||
DEFINE_TEST(test_read_position)
|
||||
DEFINE_TEST(test_read_truncated)
|
||||
DEFINE_TEST(test_tar_filenames)
|
||||
DEFINE_TEST(test_write_compress_program)
|
||||
DEFINE_TEST(test_write_disk)
|
||||
DEFINE_TEST(test_write_disk_perms)
|
||||
DEFINE_TEST(test_write_disk_secure)
|
||||
DEFINE_TEST(test_write_format_ar)
|
||||
DEFINE_TEST(test_write_format_cpio)
|
||||
DEFINE_TEST(test_write_format_cpio_empty)
|
||||
DEFINE_TEST(test_write_format_shar_empty)
|
||||
DEFINE_TEST(test_write_format_tar)
|
||||
DEFINE_TEST(test_write_format_tar_empty)
|
||||
DEFINE_TEST(test_write_open_memory)
|
|
@ -23,88 +23,473 @@
|
|||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "test.h"
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/test/test_read_format_gtar_sparse.c,v 1.4 2007/07/14 17:54:14 kientzle Exp $");
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/test/test_read_format_gtar_sparse.c,v 1.6 2007/08/18 21:53:25 kientzle Exp $");
|
||||
|
||||
/*
|
||||
* Each of the following is an archive of a single sparse file
|
||||
* named 'sparse' which has:
|
||||
* * a length of 3M exactly
|
||||
* * a single 'a' byte at offset 100000
|
||||
* * a single 'a' byte at offset 200000
|
||||
*/
|
||||
|
||||
static struct contents {
|
||||
struct contents {
|
||||
off_t o;
|
||||
size_t s;
|
||||
char *d;
|
||||
} archive_contents[] = {
|
||||
};
|
||||
|
||||
struct contents archive_contents_sparse[] = {
|
||||
{ 1000000, 1, "a" },
|
||||
{ 2000000, 1, "a" },
|
||||
{ 3145728, 0, NULL }
|
||||
};
|
||||
|
||||
/* Old GNU tar sparse format. */
|
||||
static unsigned char archive_old[] = {
|
||||
31,139,8,0,150,221,'l','F',0,3,'+','.','H',',','*','N','e',160,')','0',0,
|
||||
2,'3',19,19,16,'m','h','n','j',128,'L',131,128,17,16,'3',24,26,152,25,27,
|
||||
27,154,154,25,25,26,'2',0,'e',205,141,140,25,20,130,'i',235,',',8,'(','-',
|
||||
'.','I',',','R','P','`','(',201,204,197,171,142,144,'<',217,0,20,4,198,'f',
|
||||
'&',134,160,'P',128,134,8,156,13,12,'%','#',',',226,134,'&',16,'>','L',28,
|
||||
204,198,'g',1,'\\',3,213,'A','"',245,141,28,5,'#',8,140,166,159,'Q','0',10,
|
||||
'F',193,'(',24,24,0,0,'}','}',226,185,0,10,0,0};
|
||||
struct contents archive_contents_sparse2[] = {
|
||||
{ 1000000, 1, "a" },
|
||||
{ 2000000, 1, "a" },
|
||||
{ 3000000, 1, "a" },
|
||||
{ 4000000, 1, "a" },
|
||||
{ 5000000, 1, "a" },
|
||||
{ 6000000, 1, "a" },
|
||||
{ 7000000, 1, "a" },
|
||||
{ 8000000, 1, "a" },
|
||||
{ 9000000, 1, "a" },
|
||||
{ 10000000, 1, "a" },
|
||||
{ 11000000, 1, "a" },
|
||||
{ 12000000, 1, "a" },
|
||||
{ 13000000, 1, "a" },
|
||||
{ 14000000, 1, "a" },
|
||||
{ 15000000, 1, "a" },
|
||||
{ 16000000, 1, "a" },
|
||||
{ 17000000, 1, "a" },
|
||||
{ 18000000, 1, "a" },
|
||||
{ 19000000, 1, "a" },
|
||||
{ 20000000, 1, "a" },
|
||||
{ 21000000, 1, "a" },
|
||||
{ 22000000, 1, "a" },
|
||||
{ 23000000, 1, "a" },
|
||||
{ 24000000, 1, "a" },
|
||||
{ 25000000, 1, "a" },
|
||||
{ 26000000, 1, "a" },
|
||||
{ 27000000, 1, "a" },
|
||||
{ 28000000, 1, "a" },
|
||||
{ 29000000, 1, "a" },
|
||||
{ 30000000, 1, "a" },
|
||||
{ 31000000, 1, "a" },
|
||||
{ 32000000, 1, "a" },
|
||||
{ 33000000, 1, "a" },
|
||||
{ 34000000, 1, "a" },
|
||||
{ 35000000, 1, "a" },
|
||||
{ 36000000, 1, "a" },
|
||||
{ 37000000, 1, "a" },
|
||||
{ 38000000, 1, "a" },
|
||||
{ 39000000, 1, "a" },
|
||||
{ 40000000, 1, "a" },
|
||||
{ 41000000, 1, "a" },
|
||||
{ 42000000, 1, "a" },
|
||||
{ 43000000, 1, "a" },
|
||||
{ 44000000, 1, "a" },
|
||||
{ 45000000, 1, "a" },
|
||||
{ 46000000, 1, "a" },
|
||||
{ 47000000, 1, "a" },
|
||||
{ 48000000, 1, "a" },
|
||||
{ 49000000, 1, "a" },
|
||||
{ 50000000, 1, "a" },
|
||||
{ 51000000, 1, "a" },
|
||||
{ 52000000, 1, "a" },
|
||||
{ 53000000, 1, "a" },
|
||||
{ 54000000, 1, "a" },
|
||||
{ 55000000, 1, "a" },
|
||||
{ 56000000, 1, "a" },
|
||||
{ 57000000, 1, "a" },
|
||||
{ 58000000, 1, "a" },
|
||||
{ 59000000, 1, "a" },
|
||||
{ 60000000, 1, "a" },
|
||||
{ 61000000, 1, "a" },
|
||||
{ 62000000, 1, "a" },
|
||||
{ 63000000, 1, "a" },
|
||||
{ 64000000, 1, "a" },
|
||||
{ 65000000, 1, "a" },
|
||||
{ 66000000, 1, "a" },
|
||||
{ 67000000, 1, "a" },
|
||||
{ 68000000, 1, "a" },
|
||||
{ 69000000, 1, "a" },
|
||||
{ 70000000, 1, "a" },
|
||||
{ 71000000, 1, "a" },
|
||||
{ 72000000, 1, "a" },
|
||||
{ 73000000, 1, "a" },
|
||||
{ 74000000, 1, "a" },
|
||||
{ 75000000, 1, "a" },
|
||||
{ 76000000, 1, "a" },
|
||||
{ 77000000, 1, "a" },
|
||||
{ 78000000, 1, "a" },
|
||||
{ 79000000, 1, "a" },
|
||||
{ 80000000, 1, "a" },
|
||||
{ 81000000, 1, "a" },
|
||||
{ 82000000, 1, "a" },
|
||||
{ 83000000, 1, "a" },
|
||||
{ 84000000, 1, "a" },
|
||||
{ 85000000, 1, "a" },
|
||||
{ 86000000, 1, "a" },
|
||||
{ 87000000, 1, "a" },
|
||||
{ 88000000, 1, "a" },
|
||||
{ 89000000, 1, "a" },
|
||||
{ 90000000, 1, "a" },
|
||||
{ 91000000, 1, "a" },
|
||||
{ 92000000, 1, "a" },
|
||||
{ 93000000, 1, "a" },
|
||||
{ 94000000, 1, "a" },
|
||||
{ 95000000, 1, "a" },
|
||||
{ 96000000, 1, "a" },
|
||||
{ 97000000, 1, "a" },
|
||||
{ 98000000, 1, "a" },
|
||||
{ 99000000, 1, "a" },
|
||||
{ 99000001, 0, NULL }
|
||||
};
|
||||
|
||||
struct contents archive_contents_nonsparse[] = {
|
||||
{ 0, 1, "a" },
|
||||
{ 1, 0, NULL }
|
||||
};
|
||||
|
||||
/*
|
||||
* Describe an archive with three entries:
|
||||
*
|
||||
* File 1: named "sparse"
|
||||
* * a length of 3145728 bytes (3MiB)
|
||||
* * a single 'a' byte at offset 1000000
|
||||
* * a single 'a' byte at offset 2000000
|
||||
* File 2: named "sparse2"
|
||||
* * a single 'a' byte at offset 1,000,000, 2,000,000, ..., 99,000,000
|
||||
* * length of 99,000,001
|
||||
* File 3: named 'non-sparse'
|
||||
* * length of 1 byte
|
||||
* * contains a single byte 'a'
|
||||
*/
|
||||
|
||||
struct archive_contents {
|
||||
const char *filename;
|
||||
struct contents *contents;
|
||||
} files[] = {
|
||||
{ "sparse", archive_contents_sparse },
|
||||
{ "sparse2", archive_contents_sparse2 },
|
||||
{ "non-sparse", archive_contents_nonsparse },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* Old GNU tar sparse format, as created by gtar 1.13 */
|
||||
static unsigned char archive_old_gtar_1_13[] = {
|
||||
31,139,8,0,30,'%',193,'F',0,3,237,215,'K','n',219,'H',20,133,'a',246,'N',
|
||||
180,129,6,170,'n',189,22,210,'+',208,' ',131,12,146,14,',','g',255,'}',201,
|
||||
192,142,17,29,'(','A',159,24,'l',160,255,207,3,219,'e',193,186,'$',127,241,
|
||||
'q',251,'r','}',186,'}',216,222,'U',169,165,204,222,183,'R','J',']',163,188,
|
||||
253,190,139,252,'u',171,'e',206,18,17,189,205,'m','_',')',177,']',254,'z',
|
||||
223,177,190,249,'z','{',190,'>',']','.',219,243,199,'O',15,'_',247,179,191,
|
||||
255,'k',251,'.','h',179,231,'>','z',221,'#',175,'?',231,'^',10,177,'^',219,
|
||||
':',188,172,239,'K',15,223,160,246,'o',175,250,253,211,'_',127,255,191,196,
|
||||
255,8,253,0,231,185,29,215,255,'x',215,247,'x','x',253,175,'=',218,221,245,
|
||||
'?','j',31,'\\',255,31,'\\',255,'[','o','j','}','E',233,'?',174,255,'Q',202,
|
||||
'X','u',212,213,212,'M',194,'~',167,213,'J',31,226,191,197,'\\','e',138,245,
|
||||
22,163,'/',181,158,27,161,182,162,'G',12,181,21,'}',214,170,182,'"','G',29,
|
||||
'w','[',177,175,143,'Y',213,156,'3','c','Q','s',206,209,170,154,'s',213,':',
|
||||
139,'Z',207,157,'-',230,220,227,157,'b',206,154,'{','-',196,156,185,15,218,
|
||||
20,'s',214,',','=',196,156,'5',223,'s',138,'9','k',180,213,196,156,'5','V',
|
||||
30,'O',177,190,'G',161,230,'l','+',214,'}',21,175,199,191,246,'V',155,154,
|
||||
183,207,181,212,188,'#','f','S',243,142,'c',171,239,215,'g','4','U','w',157,
|
||||
'3','T',221,'G',196,'j',191,230,'f',23,'1','g',228,';','w','1','g',148,172,
|
||||
'H',204,25,181,198,16,'s','F','~','F','T',191,217,196,'R',253,230,185,'j',
|
||||
170,'~',143,143,147,154,'3',15,'O','U','s',246,220,0,'5','g',238,132,'P',
|
||||
's',246,'5',167,154,'s',180,161,250,141,177,218,'}',191,223,143,127,30,205,
|
||||
'P',29,31,31,127,'5',239,218,191,212,250,'<','6',227,199,245,150,19,'7','1',
|
||||
'o','+','3',255,145,'X',175,'Q','U',199,'-',247,210,'}',199,251,233,168,'N',
|
||||
213,239,'q',154,18,'s',182,204,189,171,'9','s',247,21,'5','g',198,219,213,
|
||||
156,'=',207,130,'j',206,145,225,169,'9',247,'U','5','g','^',247,'T',191,'/',
|
||||
167,211,251,245,181,134,154,'3',15,'s','U','s',230,'^',27,15,142,127,223,
|
||||
247,136,152,'7','?','<','U','u',220,'3','z',213,'q',207,15,180,234,248,'8',
|
||||
253,139,'y','{',134,'7',197,188,'=','s',12,177,'_',243,206,' ',239,'"',196,
|
||||
'z',207,'3',134,154,'3','?',133,170,223,'>',242,'D',172,230,28,'#','T',191,
|
||||
199,'e','J',205,'9','3','/','5','g','~','l',154,154,'s','e','0','b',206,177,
|
||||
167,'\'',230,28,185,'G','U',191,251,177,'W',253,142,'<',209,171,'~',143,203,
|
||||
233,131,227,'?',242,196,'t',127,215,176,175,175,'P',247,5,'#','s','Q',247,
|
||||
5,'#',195,'T',247,5,'#',15,180,234,'8','O',218,']','u',156,135,161,169,142,
|
||||
143,203,191,154,'s',238,'W',0,181,190,127,137,245,227,'f',232,205,'z',145,
|
||||
'7','F',248,'%','<',191,195,'A','?','p',208,15,28,244,3,7,253,192,'A','?',
|
||||
'p',184,253,208,31,28,244,3,7,253,192,'A','?','p',208,15,28,244,3,7,253,192,
|
||||
193,243,'?',206,'D','?','p',208,15,28,244,3,7,253,192,'A','?','p',208,15,
|
||||
28,'<',255,227,'L',244,3,7,253,192,'A','?','p',208,15,28,244,3,7,253,192,
|
||||
193,243,'?',206,'D','?','p',208,15,28,244,3,7,253,192,'A','?','p',208,15,
|
||||
28,'<',255,227,'L',244,3,7,253,192,'A','?','p',208,15,28,244,3,7,253,192,
|
||||
193,243,'?',206,'D','?','p',208,15,28,244,3,7,253,192,'A','?','p',208,15,
|
||||
28,'<',255,227,'L',244,3,7,253,192,'A','?','p',208,15,28,244,3,7,253,192,
|
||||
193,243,'?',206,'D','?','p',208,15,28,244,3,7,253,192,'A','?','p',208,15,
|
||||
28,'<',255,227,'L',244,3,7,253,192,'A','?','p',208,15,28,244,3,7,253,192,
|
||||
193,243,'?',206,'D','?','p',208,15,28,244,3,7,253,192,'A','?','p',208,15,
|
||||
28,'<',255,227,'L',244,3,7,253,192,'A','?','p',208,15,28,244,3,7,253,192,
|
||||
193,243,'?',206,'D','?','p',208,15,28,244,227,249,252,247,231,'?','o','_',
|
||||
174,'O',183,15,239,247,30,165,150,'2','{',223,'J',')','u',141,242,246,251,
|
||||
139,173,150,'9','K','D',244,'6',243,245,'5',127,218,'.',229,253,'F',250,238,
|
||||
235,237,249,250,'t',185,'l',207,31,'?','=','|',221,207,254,14,0,0,0,0,0,0,
|
||||
0,255,'1',255,0,178,'s',140,'2',0,240,0,0};
|
||||
|
||||
/* Old GNU tar sparse format, as created by gtar 1.17 */
|
||||
static unsigned char archive_old_gtar_1_17[] = {
|
||||
31,139,8,0,30,'%',193,'F',0,3,237,215,']','r',19,'G',20,134,'a','e','\'',
|
||||
218,'@',170,186,'O',255,'-','$','+',208,5,23,'\\','@','(',203,236,'?','g',
|
||||
134,216,'8',232,139,160,248,'P','M',170,242,'>',20,'%',211,'6',214,153,158,
|
||||
'W','#',205,245,211,229,233,250,238,244,'P','%',205,222,183,199,186,'F','y',
|
||||
251,184,137,252,'{',170,'e',206,18,17,189,205,'S','~','w',197,'<',157,255,
|
||||
'x',236,'X','_','|',190,'>','_',158,206,231,211,243,251,15,'w',127,238,'{',
|
||||
223,255,'i',219,22,180,217,235,182,11,127,239,200,235,215,185,'K','!',214,
|
||||
'k',255,242,239,151,245,253,235,'{','O',240,250,31,'~',185,203,175,255,149,
|
||||
248,31,161,159,'c',']',247,235,127,'<',244,'9',238,'^',255,'k',143,'V',234,
|
||||
'?',175,255,17,'5',127,156,235,255,191,'^',255,'[',235,'M',173,175,'(',253,
|
||||
219,245,223,'J',25,171,142,186,182,'m','V',207,158,251,223,135,248,'m','1',
|
||||
'W',153,'b',189,197,232,'K',173,231,'A',168,163,232,17,'C',29,'E',159,181,
|
||||
170,163,200,'Q',199,205,'Q','l',235,'c','V','5',231,172,'}',168,'9',231,'h',
|
||||
'U',205,185,'j',157,'E',173,231,'f',139,'9',243,'a','N','1','g',205,']',11,
|
||||
'1','g',238,'A',155,'b',206,154,165,135,152,179,230,'s','N','1','g',141,182,
|
||||
154,152,179,198,202,243,')',214,183,'(',212,156,'m',197,186,173,226,245,252,
|
||||
215,222,'j','S',243,246,185,150,154,'w',196,'l','j',222,177,31,245,237,250,
|
||||
140,166,234,174,'s',134,170,'{',143,'X',237,'k',30,'v',17,'s','F','>','s',
|
||||
23,'s','F',201,138,196,156,'Q','k',12,'1','g',228,'k','D',245,155,'M',',',
|
||||
213,'o','^',171,166,234,'w',127,'9',169,'9',243,244,'T','5','g',207,3,'P',
|
||||
's',230,'&',132,154,179,175,'9',213,156,163,13,213,'o',140,213,'n',251,253,
|
||||
'z',254,243,'l',134,234,'x',127,249,171,'y',215,246,'G',173,207,253,'0',190,
|
||||
']','o','9','q',19,243,182,'2',243,23,137,245,26,'U','u',220,'r',151,'n',
|
||||
';',222,'.','G','u',170,'~',247,203,148,152,179,'e',238,']',205,153,219,'W',
|
||||
212,156,25,'o','W','s',246,188,10,170,'9','G',134,167,230,220,'V',213,156,
|
||||
249,190,167,250,'}',185,156,222,174,175,'5',212,156,'y',154,171,154,'3','w',
|
||||
'm',220,'9',255,'}',219,17,'1','o',190,'x',170,234,184,'g',244,170,227,158,
|
||||
'/','h',213,241,'~',249,23,243,246,12,'o',138,'y','{',230,24,'b','_',243,
|
||||
147,'A','~',138,16,235,'=',175,24,'j',206,'|',21,170,'~',251,200,11,177,154,
|
||||
's',140,'P',253,238,'o','S','j',206,153,'y',169,'9',243,'e',211,212,156,'+',
|
||||
131,17,'s',142,'-','=','1',231,200,29,'U',253,'n',231,'^',245,';',242,'B',
|
||||
175,250,221,223,'N',239,156,255,145,23,166,219,'O',13,219,250,10,245,185,
|
||||
'`','d','.',234,'s',193,200,'0',213,231,130,145,'\'','Z','u',156,23,237,174,
|
||||
':',206,211,208,'T',199,251,219,191,154,'s','n',239,0,'j','}',251,'#',214,
|
||||
247,15,'C','o',214,139,252,'`',132,31,194,253,27,28,244,3,7,253,192,'A','?',
|
||||
'p',208,15,28,244,3,135,219,15,253,193,'A','?','p',208,15,28,244,3,7,253,
|
||||
192,'A','?','p',208,15,28,220,255,227,'H',244,3,7,253,192,'A','?','p',208,
|
||||
15,28,244,3,7,253,192,193,253,'?',142,'D','?','p',208,15,28,244,3,7,253,192,
|
||||
'A','?','p',208,15,28,220,255,227,'H',244,3,7,253,192,'A','?','p',208,15,
|
||||
28,244,3,7,253,192,193,253,'?',142,'D','?','p',208,15,28,244,3,7,253,192,
|
||||
'A','?','p',208,15,28,220,255,227,'H',244,3,7,253,192,'A','?','p',208,15,
|
||||
28,244,3,7,253,192,193,253,'?',142,'D','?','p',208,15,28,244,3,7,253,192,
|
||||
'A','?','p',208,15,28,220,255,227,'H',244,3,7,253,192,'A','?','p',208,15,
|
||||
28,244,3,7,253,192,193,253,'?',142,'D','?','p',208,15,28,244,3,7,253,192,
|
||||
'A','?','p',208,15,28,220,255,227,'H',244,3,7,253,192,'A','?','p',208,15,
|
||||
28,244,3,7,253,192,193,253,'?',142,'D','?','p',208,15,28,244,3,7,253,192,
|
||||
'A','?','p',208,15,28,220,255,227,'H',244,3,7,253,192,'A','?',158,143,127,
|
||||
'~',252,253,250,233,242,'t','}',247,184,231,'(','i',246,190,'=',214,'5',202,
|
||||
219,199,23,167,'Z',230,',',17,209,219,'<',149,'Z','#',234,233,'\\',30,'7',
|
||||
210,'W',159,175,207,151,167,243,249,244,252,254,195,221,159,251,222,247,1,
|
||||
0,0,0,0,0,0,0,248,15,249,11,162,'$',218,227,0,240,0,0};
|
||||
|
||||
#if ARCHIVE_VERSION_STAMP >= 1009000
|
||||
/* libarchive < 1.9 doesn't support these. */
|
||||
/* libarchive < 1.9 does not support this. */
|
||||
/* GNU tar "posix" sparse format 0.0, as created by gtar 1.17 */
|
||||
static unsigned char archive_0_0_gtar_1_17[] = {
|
||||
31,139,8,0,31,'%',193,'F',0,3,237,217,207,'n',218,'X',20,199,'q',214,'<',
|
||||
5,'/','0',228,222,'s','}',255,'x',193,'z',186,26,'u',211,7,240,164,174,20,
|
||||
205,'$',169,'0',145,'2',243,244,'5','%',205,144,200,193,'p',14,141,203,232,
|
||||
251,217,'P','A',14,'8','9',191,'[',253,',',150,'W',31,155,199,15,'m',243,
|
||||
185,']','w',203,232,156,148,171,238,'k',179,238,218,217,249,184,'^',170,170,
|
||||
237,163,207,209,237,'?','~','W','9',153,'y',151,146,19,145,'*',228,153,243,
|
||||
161,'J','2','[','<',158,241,26,222,244,208,'m',154,'u',127,')',214,247,'y',
|
||||
250,']',158,31,'/',132,228,197,239,127,'|','Z',238,'v',190,236,'n',254,'m',
|
||||
'W',193,'W','1','K',153,'K',218,127,233,238,225,246,207,191,239,175,255,234,
|
||||
'V','a','.','e',255,149,251,'/','_',186,'v',179,170,'{','!',205,'_',190,225,
|
||||
'v',234,159,'M',219,173,162,151,185,212,3,'c',190,31,'+','Y','N',158,'{',
|
||||
190,202,'8','8',231,230,226,22,205,230,230,182,']','y','_',178,'K',193,'e',
|
||||
191,'}',238,250,229,'s','n','>',245,6,166,'u',246,195,'>','`',228,252,203,
|
||||
246,184,252,'w',254,'S',127,254,'}',14,'a',182,'x',151,'C',244,227,252,247,
|
||||
177,'8',248,'s','c',175,'_',232,249,183,'j',166,190,0,'\\','4',242,'3',173,
|
||||
229,'[',253,'O',206,247,25,135,255,255,247,193,247,157,239,'U',255,139,'1',
|
||||
210,255,222,195,203,'*',247,189,255,213,245,'n','/',3,149,'l','W',0,235,250,
|
||||
151,'h',128,178,157,'s',229,244,230,216,207,229,170,':','y',174,234,231,'R',
|
||||
'q','\'',207,197,237,156,'?',253,239,146,250,185,24,'O',255,187,148,']',2,
|
||||
'O',159,'S',238,175,30,223,'_','p','C','{','w',227,11,28,30,244,227,27,28,
|
||||
30,148,241,21,14,15,134,241,29,14,15,'V',227,'K',28,30,'L',227,'[','|','c',
|
||||
'p','|',141,195,131,'Y',187,199,162,221,'c',173,220,163,'8',229,30,197,'+',
|
||||
247,'(',162,220,163,'T',202,'=','J',165,220,163,'D',229,30,'%',')',247,'(',
|
||||
'Y',187,199,162,221,'c',173,220,'c','p',202,'=',6,'Q',238,'1',136,'r',143,
|
||||
'!','(',247,24,'*',229,30,'C','T',238,'1','$',229,30,'C',214,238,177,'(',
|
||||
247,248,'t',28,'O',191,212,202,')',247,'X',29,209,'o',134,7,143,'(','8',195,
|
||||
131,'G','4',156,225,193,'#','*',206,240,224,17,29,'g','x',240,136,146,'3',
|
||||
'<','x','D',203,'y','c','P',187,'G','m',207,137,218,158,19,181,'=','\'','j',
|
||||
'{','N',212,246,156,168,237,'9','Q',219,'s',162,182,231,'D','m',207,137,218,
|
||||
158,19,181,'=','\'','i','{','N',210,246,156,164,237,'9','I',219,'s',146,182,
|
||||
231,'$','m',207,'I',218,158,147,180,'=','\'','i','{','N',210,246,156,172,
|
||||
237,'9','Y',219,'s',178,182,231,'d','m',207,201,218,158,147,181,'=','\'',
|
||||
'k','{','N',214,246,156,172,237,'9','E',219,'s',138,182,231,20,'m',207,')',
|
||||
218,158,'S',180,'=',167,'h','{','N',209,246,156,162,237,'9','E',219,'s',138,
|
||||
182,231,20,'m',207,169,181,'=',167,214,246,156,'Z',219,'s','j','m',207,169,
|
||||
181,'=',167,214,246,156,'Z',219,'s','j','m',207,169,'G','z',142,175,3,'_',
|
||||
174,255,'_',236,150,'{',198,'/','{',6,28,252,254,199,'W',18,156,127,245,253,
|
||||
191,'8','I','|',255,127,9,248,254,22,22,228,7,22,228,7,22,228,7,22,228,7,
|
||||
22,228,7,22,214,252,144,'?','X',144,31,'X',144,31,'X',144,31,'X',144,31,'X',
|
||||
144,31,'X',144,31,'X','p',255,143,')',145,31,'X',144,31,'X',144,31,'X',144,
|
||||
31,'X',144,31,'X',144,31,'X','p',255,143,')',145,31,'X',144,31,'X',144,31,
|
||||
'X',144,31,'X',144,31,'X',144,31,'X','p',255,143,')',145,31,'X',144,31,'X',
|
||||
144,31,'X',144,31,'X',144,31,'X',144,31,'X','p',255,143,')',145,31,'X',144,
|
||||
31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X','p',255,143,')',145,31,
|
||||
'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X','p',255,143,')',
|
||||
145,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X','p',255,
|
||||
143,')',145,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X',
|
||||
'p',255,143,')',145,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,'X',144,
|
||||
31,'X','p',255,143,')',145,31,'X',144,31,'X',144,31,'X',144,31,'X',144,31,
|
||||
'X',144,31,'X','p',255,143,')',145,31,'X',144,31,'X',144,31,'X',144,31,'X',
|
||||
144,31,'X',144,31,'X','p',255,143,')',145,31,'X',144,31,'X',144,31,155,229,
|
||||
213,199,230,241,'C',219,'|','n',215,221,'2',':','\'',229,234,238,254,238,
|
||||
183,238,'k',179,238,218,'3','}',134,235,165,170,218,'>',250,28,221,254,227,
|
||||
'N',255,'o',239,'R','r','"','R',133,'<','s',190,146,232,'g',139,199,'3','}',
|
||||
254,'A',15,221,166,'Y',247,151,'b','}',159,167,'_',229,249,241,'B',136,'[',
|
||||
'4',155,155,219,'v',229,'}',201,'.',5,151,221,188,127,238,250,245,'s','S',
|
||||
'_','\'','~',142,179,31,246,1,163,231,223,237,159,255,212,159,127,137,210,
|
||||
159,255,'w','9','D','?',206,127,31,248,131,'?','7',246,250,133,158,127,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,192,'e',250,6,'X',180,13,'8',0,24,1,0};
|
||||
#endif
|
||||
|
||||
/* GNU tar "0.0" posix format, as written by GNU tar 1.15.1. */
|
||||
static unsigned char archive_0_0[] = {
|
||||
31,139,8,0,171,221,'l','F',0,3,237,147,193,'N',195,'0',12,134,'s',206,'S',
|
||||
244,9,186,216,142,147,246,144,'3',156,'&','.','<','@',24,153,'4',193,24,'j',
|
||||
':','i',227,233,'I',129,'M','E','*','L','h',21,'U',165,'|',23,'K','v','~',
|
||||
203,145,253,151,139,';',127,184,13,254,'1','4',177,180,'h',140,'^',196,'W',
|
||||
223,196,' ',198,'C','%',140,214,']',4,203,170,31,'?',208,10,5,'(','C',4,'l',
|
||||
'4',161,'P','@',218,178,'(',14,'#',206,240,'#',251,216,250,'&',141,'r','m',
|
||||
159,175,191,156,227,'L','@','[',220,',',239,203,207,157,151,'q',243,22,28,
|
||||
129,'f',139,149,'D',211,'/',189,236,183,15,207,187,213,'S','t','$',177,234,
|
||||
'W','v',235,'u',12,173,171,19,'d',228,247,134,157,234,216,134,232,24,'P',
|
||||
'b','=',' ',131,'$',171,',',254,'Y','w',158,146,7,'u','J',162,'*','|',187,
|
||||
217,6,7,'P',1,'S',205,'5','v',185,'U','?',167,13,203,169,'7','0','-',163,
|
||||
155,'}',128,11,254,199,206,'.','\'',255,'#','@',242,'?','X','R',162,248,23,
|
||||
19,157,252,159,206,226,215,'w',151,234,'3',245,255,181,248,169,7,200,204,
|
||||
154,'|','?',153,'L','&','3',13,239,',',195,'|','B',0,14,0,0};
|
||||
#if ARCHIVE_VERSION_STAMP >= 1009000
|
||||
/* libarchive < 1.9 does not support this. */
|
||||
/* GNU tar "posix" sparse format 0.1, as created by gtar 1.17 */
|
||||
static unsigned char archive_0_1_gtar_1_17[] = {
|
||||
31,139,8,0,31,'%',193,'F',0,3,237,215,205,'n',26,'W',24,135,'q',214,'\\',
|
||||
5,23,224,194,249,'>','3',11,182,'m','V','U',164,170,23,'0','u','f','a','%',
|
||||
'v',',',198,150,172,'^','}',135,15,'\'',127,187,9,'T','z',137,167,'D',207,
|
||||
'o',195,4,'l','^','0',207,'!',231,',','W',239,187,167,'w','}',247,161,223,
|
||||
12,203,236,'\\',244,171,225,190,219,12,253,236,'|',220,168,164,180,189,245,
|
||||
'5',';',189,221,9,'9',204,188,'+',197,133,16,'R',172,'3',231,'c',202,'u',
|
||||
182,'x',':',227,'k',248,174,199,225,161,219,140,'/',197,250,'<',135,247,242,
|
||||
229,246,'B',132,186,248,237,247,'?',151,251,207,'|','9',220,252,221,175,163,
|
||||
31,255,250,161,153,135,162,15,221,'=',222,254,245,233,243,245,199,'a',29,
|
||||
'_','?',210,221,246,235,253,245,'<','{','}',228,182,187,'_',183,163,'X',174,
|
||||
178,15,'W','~',188,'l','j',216,']',31,134,'\\',185,'y','p',139,238,225,'f',
|
||||
'|',10,239,155,234,'J','t',213,'o',239,187,'~','y',159,155,'O',253,151,250,
|
||||
'9','-','W',227,231,245,199,238,227,250,245,230,'S',255,'C',190,2,'N',172,
|
||||
255,176,']','.','_',215,127,25,215,127,246,169,204,22,'o',178,136,158,215,
|
||||
255,152,219,209,159,';',245,248,133,174,127,171,'n',234,23,128,139,'F','?',
|
||||
211,'Z','~','o',255,23,206,'7',227,212,247,127,241,178,255,'K','n',187,255,
|
||||
203,'1',179,255,'{',11,161,249,215,254,175,'m','w',239,'`',220,133,213,'o',
|
||||
'o',0,219,246,245,'C','_','w',128,'a',238,'C','[',254,227,'&','0','l',175,
|
||||
']',179,223,16,142,215,'5',165,221,'u',26,175,'K',227,'v',215,'y','{',237,
|
||||
247,191,'[',198,235,156,247,191,219,236,255,206,251,'k','y',254,'V',158,223,
|
||||
';',25,224,189,'L',240,'A','F',248,'(','3','|',146,'!',190,200,20,'_',244,
|
||||
'm','T',157,211,232,156,'V',230,4,'\'','s',130,151,'9','!',200,156,144,'d',
|
||||
'N','H','2','\'','d',253,'{',21,153,19,170,206,'i','t','N','+','s',162,147,
|
||||
'9','1',200,156,24,'d','N',140,186,'9','O',250,193,'d',153,19,139,204,137,
|
||||
'U',231,'4','2',231,240,'v',220,225,31,'2','\'',233,231,159,'4',128,244,162,
|
||||
0,'M',' ','i',3,'I','#','H','Z','A',210,12,146,'v',144,181,131,172,29,'d',
|
||||
237,' ','k',7,'Y',';',200,218,'A',214,14,178,'v',144,181,131,172,29,20,237,
|
||||
160,'h',7,'E',';','(',218,'A',209,14,138,'v','P',180,131,162,29,20,237,160,
|
||||
'h',7,'U',';',168,218,'A',213,14,170,'v','P',181,131,170,29,'T',237,160,'j',
|
||||
7,'U',';','h',180,131,'F',';','h',180,131,'F',';','h',180,131,'F',';','h',
|
||||
180,131,230,197,151,193,139,'o',3,237,160,209,14,'Z',237,160,213,14,'Z',237,
|
||||
160,213,14,'Z',237,160,213,14,'Z',237,160,213,14,218,231,14,'|',27,255,231,
|
||||
231,219,'c',231,191,'s','m',1,142,254,255,239,'S',136,206,191,'>',255,133,
|
||||
228,'9',255,']',2,246,239,176,160,31,'X',208,15,',',232,7,22,244,3,11,250,
|
||||
129,133,181,31,250,131,5,253,192,130,'~','`','A','?',176,160,31,'X',208,15,
|
||||
',',232,7,22,156,255,'1','%',250,129,5,253,192,130,'~','`','A','?',176,160,
|
||||
31,'X',208,15,',','8',255,'c','J',244,3,11,250,129,5,253,192,130,'~','`',
|
||||
'A','?',176,160,31,'X','p',254,199,148,232,7,22,244,3,11,250,129,5,253,192,
|
||||
130,'~','`','A','?',176,224,252,143,')',209,15,',',232,7,22,244,3,11,250,
|
||||
129,5,253,192,130,'~','`',193,249,31,'S',162,31,'X',208,15,',',232,7,22,244,
|
||||
3,11,250,129,5,253,192,130,243,'?',166,'D','?',176,160,31,'X',208,15,',',
|
||||
232,7,22,244,3,11,250,129,5,231,127,'L',137,'~','`','A','?',176,160,31,'X',
|
||||
208,15,',',232,7,22,244,3,11,206,255,152,18,253,192,130,'~','`','A','?',176,
|
||||
160,31,'X',208,15,',',232,7,22,156,255,'1','%',250,129,5,253,192,130,'~',
|
||||
'`','A','?',176,160,31,'X',208,15,',','8',255,'c','J',244,3,11,250,129,5,
|
||||
253,192,130,'~','`','A','?',176,160,31,'X','p',254,199,148,232,7,22,244,3,
|
||||
11,250,177,'Y',174,222,'w','O',239,250,238,'C',191,25,150,217,185,232,'W',
|
||||
'w',159,239,'~',25,238,187,205,208,159,'i',134,27,149,148,182,183,190,'f',
|
||||
167,183,'{',227,181,'w',165,184,16,'B','J',227,253,'>',133,152,'g',139,167,
|
||||
'3',205,'?',234,'q','x',232,'6',227,'K',177,'>',207,225,173,'|',185,189,16,
|
||||
193,'-',186,135,155,219,'~',237,'}','S',']',137,174,186,249,'x',223,245,235,
|
||||
251,166,'~',157,248,'1',206,190,216,191,225,228,250,'w',178,254,'c',25,215,
|
||||
127,200,193,207,22,'o',178,136,158,215,255,24,252,209,159,';',245,248,133,
|
||||
174,127,0,0,0,0,0,240,243,251,7,233,'Q','N','O',0,240,0,0};
|
||||
#endif
|
||||
|
||||
#if ARCHIVE_VERSION_STAMP >= 1009000
|
||||
/* libarchive < 1.9 does not support this. */
|
||||
/* GNU tar "posix" sparse format 1.0, as created by gtar 1.17 */
|
||||
static unsigned char archive_1_0_gtar_1_17[] = {
|
||||
31,139,8,0,' ','%',193,'F',0,3,237,215,205,'n',26,'I',20,134,'a',214,'\\',
|
||||
5,'7',16,168,255,234,'^','x',155,'d',21,'E',138,230,2,'Z','I','/',24,197,
|
||||
'N',4,142,'d',205,213,'O',1,182,245,217,178,'A',163,'C',220,131,242,'>',155,
|
||||
'n',183,'m',14,'?','o',161,174,229,234,243,'p',247,'q',28,190,141,155,237,
|
||||
'2',';',23,211,'j',251,'s',216,'l',199,217,249,184,166,164,180,';',250,154,
|
||||
157,30,247,130,207,'3',239,'J','q','!',132,148,218,'u',31,'S',142,179,197,
|
||||
221,25,159,195,171,'~','m','o',135,'M','{','*',214,199,185,127,'-',143,199,
|
||||
11,17,194,226,195,167,191,150,135,207,'|','y','=',252,253,'c','s',229,231,
|
||||
207,174,174,'o',218,'U','7',15,'E',175,222,12,215,227,213,225,'|',30,189,
|
||||
254,'f','3',14,223,183,235,127,198,171,232,'S',174,161,155,7,183,24,'n',215,
|
||||
237,207,189,239,170,'+',209,'U',191,187,246,245,233,'5','7',159,250,205,248,
|
||||
3,'-','W',237,131,251,178,255,220,222,175,191,143,191,229,'+',224,196,250,
|
||||
143,187,229,242,184,254,'c','i',235,'?',251,28,'f',139,'7','Y','D',15,235,
|
||||
191,181,'x',244,239,'N',253,254,'B',215,127,156,247,'M',',',243,236,195,220,
|
||||
183,211,174,134,253,249,195,218,'e','U',226,136,'a',234,'\'',128,139,'F',
|
||||
'?',211,'Z',190,'v',255,31,206,'7',227,244,253,127,'}','~',255,159,'c',229,
|
||||
254,255,'-',252,167,251,255,250,202,253,127,187,'[',8,'/','n',0,250,'~',255,
|
||||
'f',248,23,'v',0,129,29,192,255,193,177,251,255,'s','}',5,28,']',255,237,
|
||||
'6','3',':',255,252,254,'?',164,202,253,255,'[',232,251,215,'6',0,'a','w',
|
||||
238,186,195,'f',160,157,215,148,246,231,169,157,151,206,237,207,243,238,220,
|
||||
31,254,183,180,243,156,15,255,219,29,222,132,195,185,'<','~','/',143,239,
|
||||
157,12,240,'^','&',248,' ','#','|',148,25,'>',201,16,'_','d',138,'/',250,
|
||||
'2',170,206,233,'t','N','/','s',130,147,'9',193,203,156,16,'d','N','H','2',
|
||||
'\'','$',153,19,178,190,'_','E',230,132,170,'s',':',157,211,203,156,232,'d',
|
||||
'N',12,'2','\'',6,153,19,163,'n',204,146,'~','0','Y',230,196,'"','s','b',
|
||||
213,'9',157,204,185,127,'9',238,254,7,153,147,244,243,'O',26,'@','z','R',
|
||||
128,'&',144,180,129,164,17,'$',173,' ','i',6,'I',';',200,218,'A',214,14,178,
|
||||
'v',144,181,131,172,29,'d',237,' ','k',7,'Y',';',200,218,'A',214,14,138,'v',
|
||||
'P',180,131,162,29,20,237,160,'h',7,'E',';','(',218,'A',209,14,138,'v','P',
|
||||
180,131,170,29,'T',237,160,'j',7,'U',';',168,218,'A',213,14,170,'v','P',181,
|
||||
131,170,29,'t',218,'A',167,29,'t',218,'A',167,29,'t',218,'A',167,29,'t',218,
|
||||
'A',247,228,203,224,201,183,129,'v',208,'i',7,189,'v',208,'k',7,189,'v',208,
|
||||
'k',7,189,'v',208,'k',7,189,'v',208,'k',7,253,'C',7,190,143,220,'o','X',177,
|
||||
127,131,5,253,192,130,'~','`','A','?',176,160,31,'X',208,15,',',172,253,208,
|
||||
31,',',232,7,22,244,3,11,250,129,5,253,192,130,'~','`','A','?',176,'`',255,
|
||||
143,')',209,15,',',232,7,22,244,3,11,250,129,5,253,192,130,'~','`',193,254,
|
||||
31,'S',162,31,'X',208,15,',',232,7,22,244,3,11,250,129,5,253,192,130,253,
|
||||
'?',166,'D','?',176,160,31,'X',208,15,',',232,7,22,244,3,11,250,129,5,251,
|
||||
127,'L',137,'~','`','A','?',176,160,31,'X',208,15,',',232,7,22,244,3,11,246,
|
||||
255,152,18,253,192,130,'~','`','A','?',176,160,31,'X',208,15,',',232,7,22,
|
||||
236,255,'1','%',250,129,5,253,192,130,'~','`','A','?',176,160,31,'X',208,
|
||||
15,',',216,255,'c','J',244,3,11,250,129,5,253,192,130,'~','`','A','?',176,
|
||||
160,31,'X',176,255,199,148,232,7,22,244,3,11,250,129,5,253,192,130,'~','`',
|
||||
'A','?',176,'`',255,143,')',209,15,',',232,7,22,244,3,11,250,129,5,253,192,
|
||||
130,'~','`',193,254,31,'S',162,31,'X',208,15,',',232,7,22,244,3,11,250,129,
|
||||
5,253,192,130,253,'?',166,'D','?',176,160,31,'X',208,143,205,'r',245,'y',
|
||||
184,251,'8',14,223,198,205,'v',153,157,139,'i','u',243,227,230,221,246,231,
|
||||
176,217,142,'g',154,225,154,146,210,238,232,'k','v','z','<','h',231,222,149,
|
||||
226,'B',8,')',181,235,'>',133,'v','X',220,157,'i',254,'Q',191,182,183,195,
|
||||
166,'=',21,235,227,220,191,148,199,227,133,8,'n','1',220,174,175,199,'+',
|
||||
239,187,234,'J','t',213,205,219,181,175,207,175,'M',253,'<',241,'{',156,'}',
|
||||
177,191,224,228,250,'w',178,254,'c','i',235,'?',228,224,'g',139,'7','Y','D',
|
||||
15,235,191,5,127,244,239,'N',253,254,'B',215,'?',0,0,0,128,'?',199,191,200,
|
||||
'e','(',171,0,240,0,0};
|
||||
#endif
|
||||
|
||||
/* GNU tar "0.1" posix format, as written by GNU tar 1.15.XXX. */
|
||||
static unsigned char archive_0_1[] = {
|
||||
31,139,8,0,191,221,'l','F',0,3,237,148,193,'N',195,'0',12,134,'s',238,'S',
|
||||
244,1,170,'4','v','b',167,';',244,202,'v','B','H',136,7,8,'#',135,138,'u',
|
||||
'L',205,'&','M','<','=','Y',183,161,10,9,'v',216,160,'*',202,'w',177,'e',
|
||||
'G',137,19,251,143,',',31,220,'~',225,221,139,239,130,180,200,204,'e',216,
|
||||
184,'.','x','q',';','T',132,141,'9','X',176,164,134,182,7,9,5,'(',214,26,
|
||||
136,13,145,'P',160,'I','Y',145,239,'o','X',195,183,236,194,214,'u',177,148,
|
||||
'k',247,'9',221,229,211,'N',4,180,249,252,254,'I',30,'{','.','C',243,238,
|
||||
'k',13,134,',','V',25,242,'0',181,222,181,207,171,183,229,'k',168,245,215,
|
||||
140,'k','}','}',244,'3',130,'a',166,'u',155,'z',22,209,'\\',16,'`',1,209,
|
||||
173,',',246,254,233,144,'B','e',168,'r',183,'m',226,22,0,21,144,158,'1',244,
|
||||
177,229,'0','f',152,178,177,'_',234,127,'"',203,216,175,199,190,']','w',205,
|
||||
202,255,202,23,'p','A',255,'x',144,203,'Y',255,8,16,245,'O',192,'$',242,'?',
|
||||
17,209,'Y',255,'q',220,'~','\\','w',')','?','Q',253,'_',139,27,187,128,196,
|
||||
164,'I',243,147,'H','$',18,227,240,1,'Q',127,'c',137,0,14,0,0};
|
||||
|
||||
/* GNU tar "1.0" posix format, as written by GNU tar 1.16.1. */
|
||||
/*
|
||||
* Uncompressed, as that exercises some of the code better
|
||||
* than compressed does. (The uncompression layers try to work with
|
||||
* large blocks and the parsing code here has sections that have
|
||||
* to work harder if reads return small pieces of data.)
|
||||
* The following test archive is a little odd. First, it's uncompressed,
|
||||
* because that exercises some of the block reassembly code a little harder.
|
||||
* Second, it includes some leading comments prior to the sparse block
|
||||
* description. GNU tar doesn't do this, but I think it should, so I
|
||||
* want to ensure that libarchive correctly ignores such comments.
|
||||
*/
|
||||
static unsigned char archive_1_0[] = {
|
||||
'.','/','P','a','x','H','e','a','d','e','r','s','.','7','2','6','6','8','/',
|
||||
's','p','a','r','s','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
#if ARCHIVE_VERSION_STAMP >= 1009000
|
||||
|
||||
/* Because it's uncompressed, I've made this archive a bit simpler. */
|
||||
struct archive_contents files_1_0b[] = {
|
||||
{ "sparse", archive_contents_sparse },
|
||||
{ "non-sparse", archive_contents_nonsparse },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static unsigned char archive_1_0b[] = {
|
||||
'.','/','P','a','x','H','e','a','d','e','r','s','.','7','5','4','7','/','s',
|
||||
'p','a','r','s','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0','0','0','6','4','4',0,'0','0','0','1','7',
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,'0','0','0','0','6','4','4',0,'0','0','0','1','7',
|
||||
'5','0',0,'0','0','0','1','7','5','0',0,'0','0','0','0','0','0','0','0','2',
|
||||
'1','5',0,'1','0','6','3','3','1','5','6','4','7','2',0,'0','1','3','5','0',
|
||||
'7',0,' ','x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
'1','5',0,'1','0','6','5','7','4','5','4','6','1','3',0,'0','1','3','4','2',
|
||||
'5',0,' ','x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s',
|
||||
't','a','r',0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -120,8 +505,8 @@ static unsigned char archive_1_0[] = {
|
|||
'.','s','p','a','r','s','e','.','n','a','m','e','=','s','p','a','r','s','e',
|
||||
10,'3','1',' ','G','N','U','.','s','p','a','r','s','e','.','r','e','a','l',
|
||||
's','i','z','e','=','3','1','4','5','7','2','8',10,'2','0',' ','a','t','i',
|
||||
'm','e','=','1','1','8','1','5','3','9','6','3','4',10,'2','0',' ','c','t',
|
||||
'i','m','e','=','1','1','8','1','5','3','9','4','6','5',10,0,0,0,0,0,0,0,
|
||||
'm','e','=','1','1','8','6','8','7','9','7','9','9',10,'2','0',' ','c','t',
|
||||
'i','m','e','=','1','1','8','6','8','7','9','5','2','8',10,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -132,26 +517,36 @@ static unsigned char archive_1_0[] = {
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'.','/','G',
|
||||
'N','U','S','p','a','r','s','e','F','i','l','e','.','7','2','6','6','8','/',
|
||||
's','p','a','r','s','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
'N','U','S','p','a','r','s','e','F','i','l','e','.','7','5','4','7','/','s',
|
||||
'p','a','r','s','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,'0','0','0','0','6','4','4',0,'0','0','0','1','7','5',
|
||||
'0',0,'0','0','0','1','7','5','0',0,'0','0','0','0','0','0','0','3','0','0',
|
||||
'0',0,'1','0','6','3','3','1','5','6','2','1','1',0,'0','1','5','1','7','0',
|
||||
0,' ','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,'0','0','0','0','6','4','4',0,'0','0','0','1','7','5','0',
|
||||
0,'0','0','0','1','7','5','0',0,'0','0','0','0','0','0','0','3','0','0','0',
|
||||
0,'1','0','6','5','7','4','5','4','0','5','0',0,'0','1','5','1','1','2',0,
|
||||
' ','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t',
|
||||
'a','r',0,'0','0','t','i','m',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,'t','i','m',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,'0','0','0','0','0','0','0',0,'0','0','0','0','0','0','0',0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a',
|
||||
'r',0,'0','0','t','i','m',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,'t','i','m',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,'0','0','0','0','0','0','0',0,'0','0','0','0','0','0','0',0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'3',10,'9','9','9','9','3','6',10,'5','1',
|
||||
'2',10,'1','9','9','9','8','7','2',10,'5','1','2',10,'3','1','4','5','7',
|
||||
'2','8',10,'0',10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
||||
/* 32 added bytes containing extra comments at beginning of sparse block */
|
||||
'#','!','g','n','u','-','s','p','a','r','s','e','-','f','o','r','m','a',
|
||||
't',10,'#','f','o','r','m','a','t',':','1','.','0',10,
|
||||
|
||||
'3',10,'9','9','9','9','3','6',10,'5','1','2',
|
||||
10,'1','9','9','9','8','7','2',10,'5','1','2',10,'3','1','4','5','7','2',
|
||||
'8',10,'0',10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
||||
/* 32 removed bytes to preserve alignment. */
|
||||
/* 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
|
||||
0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -163,8 +558,8 @@ static unsigned char archive_1_0[] = {
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'a',0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'a',0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -179,8 +574,8 @@ static unsigned char archive_1_0[] = {
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'a',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'a',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -189,12 +584,26 @@ static unsigned char archive_1_0[] = {
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'.','/','P','a',
|
||||
'x','H','e','a','d','e','r','s','.','7','5','4','7','/','n','o','n','-','s',
|
||||
'p','a','r','s','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,'0','0','0','0','6','4','4',0,'0','0','0','1','7','5','0',
|
||||
0,'0','0','0','1','7','5','0',0,'0','0','0','0','0','0','0','0','0','5','0',
|
||||
0,'1','0','6','5','7','4','5','4','6','1','3',0,'0','1','4','2','1','2',0,
|
||||
' ','x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a',
|
||||
'r',0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0',
|
||||
'0','0','0','0','0',0,'0','0','0','0','0','0','0',0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,'2','0',' ','a','t','i','m','e','=','1','1','8','6','8','7',
|
||||
'9','7','9','9',10,'2','0',' ','c','t','i','m','e','=','1','1','8','6','8',
|
||||
'7','9','5','4','4',10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -207,14 +616,23 @@ static unsigned char archive_1_0[] = {
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,'n','o','n','-','s','p','a','r','s','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,'0','0','0','0','6','4','4',0,'0','0','0','1','7','5','0',0,'0','0','0',
|
||||
'1','7','5','0',0,'0','0','0','0','0','0','0','0','0','0','1',0,'1','0','6',
|
||||
'5','7','4','5','4','0','7','0',0,'0','1','2','5','3','1',0,' ','0',0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a','r',0,'0','0',
|
||||
't','i','m',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'t',
|
||||
'i','m',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0',
|
||||
'0','0','0','0','0',0,'0','0','0','0','0','0','0',0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,'a',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -232,67 +650,239 @@ static unsigned char archive_1_0[] = {
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A tricky piece of code that verifies the contents of a sparse
|
||||
* archive entry against a description as defined at the top of this
|
||||
* source file.
|
||||
*/
|
||||
#define min(a,b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
/*
|
||||
* A convenience wrapper that adds the size of the buffer and the
|
||||
* name of the buffer to any call.
|
||||
*/
|
||||
#define verify_archive(buffer, contents) \
|
||||
_verify_archive(buffer, sizeof(buffer), #buffer, contents)
|
||||
|
||||
static void
|
||||
verify_archive(void *b, size_t l, struct contents *cts)
|
||||
_verify_archive(void *buffer, size_t length, const char *name,
|
||||
struct archive_contents *ac)
|
||||
{
|
||||
struct archive_entry *ae;
|
||||
struct archive *a;
|
||||
int err;
|
||||
/* data, size, offset of next expected block. */
|
||||
struct contents e;
|
||||
struct contents expect;
|
||||
/* data, size, offset of block read from archive. */
|
||||
const void *ad;
|
||||
size_t as;
|
||||
off_t ao;
|
||||
struct contents actual;
|
||||
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assert(0 == archive_read_support_compression_all(a));
|
||||
assert(0 == archive_read_support_format_tar(a));
|
||||
assert(0 == read_open_memory(a, b, l, 3));
|
||||
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
|
||||
assert(0 == read_open_memory(a, buffer, length, 3));
|
||||
|
||||
e = *cts++;
|
||||
while (0 == (err = archive_read_data_block(a, &ad, &as, &ao))) {
|
||||
while (as > 0) {
|
||||
/* Anything before the next expected block must be NULL. */
|
||||
char c = *(char *)ad;
|
||||
if(ao < e.o) {
|
||||
assert(c == 0);
|
||||
} else if (ao == e.o) {
|
||||
assert(c == *e.d);
|
||||
e.d++;
|
||||
e.o++;
|
||||
e.s--;
|
||||
/* End of expected? step to next expected. */
|
||||
if (e.s <= 0)
|
||||
e = *cts++;
|
||||
} else {
|
||||
failure("Expected data not found");
|
||||
assert(ao <= e.o);
|
||||
archive_read_finish(a);
|
||||
return;
|
||||
while (ac->filename != NULL) {
|
||||
struct contents *cts = ac->contents;
|
||||
|
||||
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
|
||||
failure("Name mismatch in archive %s", name);
|
||||
assertEqualString(ac->filename, archive_entry_pathname(ae));
|
||||
|
||||
expect = *cts++;
|
||||
while (0 == (err = archive_read_data_block(a,
|
||||
(const void **)&actual.d,
|
||||
&actual.s, &actual.o))) {
|
||||
while (actual.s > 0) {
|
||||
char c = *(char *)actual.d;
|
||||
if(actual.o < expect.o) {
|
||||
/*
|
||||
* Any byte before the expected
|
||||
* data must be NULL.
|
||||
*/
|
||||
failure("%s: pad at offset %d "
|
||||
"should be zero", name, actual.o);
|
||||
assertEqualInt(c, 0);
|
||||
} else if (actual.o == expect.o) {
|
||||
/*
|
||||
* Data at matching offsets must match.
|
||||
*/
|
||||
assertEqualInt(c, *expect.d);
|
||||
expect.d++;
|
||||
expect.o++;
|
||||
expect.s--;
|
||||
/* End of expected? step to next expected. */
|
||||
if (expect.s <= 0)
|
||||
expect = *cts++;
|
||||
} else {
|
||||
/*
|
||||
* We found data beyond that expected.
|
||||
*/
|
||||
failure("%s: Unexpected trailing data",
|
||||
name);
|
||||
assert(actual.o <= expect.o);
|
||||
archive_read_finish(a);
|
||||
return;
|
||||
}
|
||||
actual.d++;
|
||||
actual.o++;
|
||||
actual.s--;
|
||||
}
|
||||
ad++;
|
||||
ao++;
|
||||
as--;
|
||||
}
|
||||
}
|
||||
assertEqualIntA(a, err, ARCHIVE_EOF);
|
||||
failure("Size returned at EOF must be zero");
|
||||
assertEqualInt(as, 0);
|
||||
failure("%s: should be end of entry", name);
|
||||
assertEqualIntA(a, err, ARCHIVE_EOF);
|
||||
failure("%s: Size returned at EOF must be zero", name);
|
||||
assertEqualInt(actual.s, 0);
|
||||
#if ARCHIVE_VERSION_STAMP < 1009000
|
||||
/* libarchive < 1.9 doesn't get this right */
|
||||
skipping("offset of final sparse chunk");
|
||||
/* libarchive < 1.9 doesn't get this right */
|
||||
skipping("offset of final sparse chunk");
|
||||
#else
|
||||
failure("Offset of final empty chunk must be same as file size");
|
||||
assertEqualInt(ao, e.o);
|
||||
failure("%s: Offset of final empty chunk must be same as file size", name);
|
||||
assertEqualInt(actual.o, expect.o);
|
||||
#endif
|
||||
/* Step to next file description. */
|
||||
++ac;
|
||||
}
|
||||
|
||||
err = archive_read_next_header(a, &ae);
|
||||
assertEqualIntA(a, ARCHIVE_EOF, err);
|
||||
|
||||
assert(0 == archive_read_close(a));
|
||||
#if ARCHIVE_API_VERSION > 1
|
||||
|
@ -304,11 +894,13 @@ verify_archive(void *b, size_t l, struct contents *cts)
|
|||
|
||||
DEFINE_TEST(test_read_format_gtar_sparse)
|
||||
{
|
||||
FILE *t = fopen("archive_1_0.tgz", "w");
|
||||
fwrite(archive_1_0, sizeof(archive_1_0), 1, t);
|
||||
fclose(t);
|
||||
/*
|
||||
FILE *t = fopen("archive_1_0.tgz", "w");
|
||||
fwrite(archive_1_0, sizeof(archive_1_0), 1, t);
|
||||
fclose(t);
|
||||
*/
|
||||
|
||||
verify_archive(archive_old, sizeof(archive_old), archive_contents);
|
||||
verify_archive(archive_old_gtar_1_13, files);
|
||||
|
||||
/*
|
||||
* libarchive < 1.9 doesn't support the newer sparse formats
|
||||
|
@ -317,17 +909,18 @@ DEFINE_TEST(test_read_format_gtar_sparse)
|
|||
#if ARCHIVE_VERSION_STAMP < 1009000
|
||||
skipping("read support for GNUtar sparse format 0.0");
|
||||
#else
|
||||
verify_archive(archive_0_0, sizeof(archive_0_0), archive_contents);
|
||||
verify_archive(archive_0_0_gtar_1_17, files);
|
||||
#endif
|
||||
#if ARCHIVE_VERSION_STAMP < 1009000
|
||||
skipping("read support for GNUtar sparse format 0.1");
|
||||
#else
|
||||
verify_archive(archive_0_1, sizeof(archive_0_1), archive_contents);
|
||||
verify_archive(archive_0_1_gtar_1_17, files);
|
||||
#endif
|
||||
#if ARCHIVE_VERSION_STAMP < 1009000
|
||||
skipping("read support for GNUtar sparse format 1.0");
|
||||
#else
|
||||
verify_archive(archive_1_0, sizeof(archive_1_0), archive_contents);
|
||||
verify_archive(archive_1_0_gtar_1_17, files);
|
||||
verify_archive(archive_1_0b, files_1_0b);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
/*-
|
||||
* Copyright (c) 2003-2007 Tim Kientzle
|
||||
* 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$");
|
||||
|
||||
/* Single entry with a hardlink. */
|
||||
static unsigned char archive[] = {
|
||||
"#mtree\n"
|
||||
"file type=file uid=18 mode=0123\n"
|
||||
"dir type=dir\n"
|
||||
" file\\040with\\040space type=file uid=18\n"
|
||||
" ..\n"
|
||||
"file\\04with\\040space\n"
|
||||
"dir2 type=dir\n"
|
||||
" dir3a type=dir\n"
|
||||
" indir3a\n"
|
||||
"dir2/fullindir2 type=file mode=0777\n"
|
||||
" ..\n"
|
||||
" indir2\n"
|
||||
" dir3b type=dir\n"
|
||||
" indir3b\n"
|
||||
" ..\n"
|
||||
" ..\n"
|
||||
"notindir\n"
|
||||
"dir2/fullindir2 mode=0644\n"
|
||||
};
|
||||
|
||||
DEFINE_TEST(test_read_format_mtree)
|
||||
{
|
||||
struct archive_entry *ae;
|
||||
struct archive *a;
|
||||
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_read_support_compression_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_read_support_format_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_read_open_memory(a, archive, sizeof(archive)));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_MTREE_V1);
|
||||
assertEqualString(archive_entry_pathname(ae), "file");
|
||||
assertEqualInt(archive_entry_uid(ae), 18);
|
||||
assert(S_ISREG(archive_entry_mode(ae)));
|
||||
assertEqualInt(archive_entry_mode(ae), AE_IFREG | 0123);
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir");
|
||||
assert(S_ISDIR(archive_entry_mode(ae)));
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir/file with space");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "file\\04with space");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2/dir3a");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2/dir3a/indir3a");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2/fullindir2");
|
||||
assertEqualInt(archive_entry_mode(ae), AE_IFREG | 0644);
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2/indir2");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2/dir3b");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "dir2/dir3b/indir3b");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString(archive_entry_pathname(ae), "notindir");
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
|
||||
#if ARCHIVE_API_VERSION > 1
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
|
||||
#else
|
||||
archive_read_finish(a);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include "test.h"
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/test/test_write_disk_perms.c,v 1.6 2007/07/15 17:16:42 kientzle Exp $");
|
||||
__FBSDID("$FreeBSD: src/lib/libarchive/test/test_write_disk_perms.c,v 1.7 2007/08/12 17:35:05 kientzle Exp $");
|
||||
|
||||
#if ARCHIVE_VERSION_STAMP >= 1009000
|
||||
|
||||
|
@ -235,6 +235,24 @@ DEFINE_TEST(test_write_disk_perms)
|
|||
archive_entry_set_uid(ae, getuid() + 1);
|
||||
archive_write_disk_set_options(a, ARCHIVE_EXTRACT_PERM);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
/*
|
||||
* Because we didn't ask for owner, the failure to
|
||||
* restore SUID shouldn't return a failure.
|
||||
* We check below to make sure SUID really wasn't set.
|
||||
* See more detailed comments below.
|
||||
*/
|
||||
failure("Opportunistic SUID failure shouldn't return error.");
|
||||
assertEqualInt(0, archive_write_finish_entry(a));
|
||||
|
||||
assert(archive_entry_clear(ae) != NULL);
|
||||
archive_entry_copy_pathname(ae, "file_bad_suid2");
|
||||
archive_entry_set_mode(ae, S_IFREG | S_ISUID | 0742);
|
||||
archive_entry_set_uid(ae, getuid() + 1);
|
||||
archive_write_disk_set_options(a,
|
||||
ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_OWNER);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
/* Owner change should fail here. */
|
||||
failure("Non-opportunistic SUID failure should return error.");
|
||||
assertEqualInt(ARCHIVE_WARN, archive_write_finish_entry(a));
|
||||
|
||||
/* Write a regular file with ARCHIVE_EXTRACT_PERM & SGID bit */
|
||||
|
@ -254,16 +272,26 @@ DEFINE_TEST(test_write_disk_perms)
|
|||
*/
|
||||
printf("Current user can't test gid restore: must belong to more than one group.\n");
|
||||
} else {
|
||||
/* Write a regular file with ARCHIVE_EXTRACT_PERM & SGID bit */
|
||||
/*
|
||||
* Write a regular file with ARCHIVE_EXTRACT_PERM & SGID bit
|
||||
* but without ARCHIVE_EXTRACT_OWNER.
|
||||
*/
|
||||
/*
|
||||
* This is a weird case: The user has asked for permissions to
|
||||
* be restored but not asked for ownership to be restored. As
|
||||
* a result, the default file creation will create a file with
|
||||
* the wrong group. There are two reasonable behaviors: warn
|
||||
* and drop the SGID bit (the current libarchive behavior) or
|
||||
* try to set the group. It is completely wrong to set the
|
||||
* SGID bit with the wrong group (which is, incidentally,
|
||||
* exactly what gtar 1.15 does).
|
||||
* the wrong group. There are several possible behaviors for
|
||||
* libarchive in this scenario:
|
||||
* = Set the SGID bit. It is wrong and a security hole to
|
||||
* set SGID with the wrong group. Even POSIX thinks so.
|
||||
* = Implicitly set the group. I don't like this.
|
||||
* = drop the SGID bit and warn (the old libarchive behavior)
|
||||
* = drop the SGID bit and don't warn (the current libarchive
|
||||
* behavior).
|
||||
* The current behavior sees SGID/SUID restore when you
|
||||
* don't ask for owner restore as an "opportunistic"
|
||||
* action. That is, libarchive should do it if it can,
|
||||
* but if it can't, it's not an error.
|
||||
*/
|
||||
assert(archive_entry_clear(ae) != NULL);
|
||||
archive_entry_copy_pathname(ae, "file_alt_sgid");
|
||||
|
@ -272,10 +300,13 @@ DEFINE_TEST(test_write_disk_perms)
|
|||
archive_entry_set_gid(ae, altgid());
|
||||
archive_write_disk_set_options(a, ARCHIVE_EXTRACT_PERM);
|
||||
assert(0 == archive_write_header(a, ae));
|
||||
failure("Setting SGID bit should not succeed here.");
|
||||
assertEqualIntA(a, ARCHIVE_WARN, archive_write_finish_entry(a));
|
||||
failure("Setting SGID bit should fail because of group mismatch but the failure should be silent because we didn't ask for the group to be set.");
|
||||
assertEqualIntA(a, 0, archive_write_finish_entry(a));
|
||||
|
||||
/* As above, but add _EXTRACT_OWNER. */
|
||||
/*
|
||||
* As above, but add _EXTRACT_OWNER to verify that it
|
||||
* does succeed.
|
||||
*/
|
||||
assert(archive_entry_clear(ae) != NULL);
|
||||
archive_entry_copy_pathname(ae, "file_alt_sgid_owner");
|
||||
archive_entry_set_mode(ae, S_IFREG | S_ISGID | 0742);
|
||||
|
@ -303,7 +334,17 @@ DEFINE_TEST(test_write_disk_perms)
|
|||
archive_entry_set_gid(ae, invalidgid());
|
||||
archive_write_disk_set_options(a, ARCHIVE_EXTRACT_PERM);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
failure("This SGID restore should fail.");
|
||||
failure("This SGID restore should fail without an error.");
|
||||
assertEqualIntA(a, 0, archive_write_finish_entry(a));
|
||||
|
||||
assert(archive_entry_clear(ae) != NULL);
|
||||
archive_entry_copy_pathname(ae, "file_bad_sgid2");
|
||||
archive_entry_set_mode(ae, S_IFREG | S_ISGID | 0742);
|
||||
archive_entry_set_gid(ae, invalidgid());
|
||||
archive_write_disk_set_options(a,
|
||||
ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_OWNER);
|
||||
assertA(0 == archive_write_header(a, ae));
|
||||
failure("This SGID restore should fail with an error.");
|
||||
assertEqualIntA(a, ARCHIVE_WARN, archive_write_finish_entry(a));
|
||||
}
|
||||
|
||||
|
@ -362,6 +403,11 @@ DEFINE_TEST(test_write_disk_perms)
|
|||
failure("file_bad_suid: st.st_mode=%o", st.st_mode);
|
||||
assert((st.st_mode & 07777) == (0742));
|
||||
|
||||
/* SUID bit should NOT have been set here. */
|
||||
assert(0 == stat("file_bad_suid2", &st));
|
||||
failure("file_bad_suid2: st.st_mode=%o", st.st_mode);
|
||||
assert((st.st_mode & 07777) == (0742));
|
||||
|
||||
/* SGID should be set here. */
|
||||
assert(0 == stat("file_perm_sgid", &st));
|
||||
failure("file_perm_sgid: st.st_mode=%o", st.st_mode);
|
||||
|
@ -384,6 +430,10 @@ DEFINE_TEST(test_write_disk_perms)
|
|||
assert(0 == stat("file_bad_sgid", &st));
|
||||
failure("file_bad_sgid: st.st_mode=%o", st.st_mode);
|
||||
assert((st.st_mode & 07777) == (0742));
|
||||
/* SGID should NOT be set here. */
|
||||
assert(0 == stat("file_bad_sgid2", &st));
|
||||
failure("file_bad_sgid2: st.st_mode=%o", st.st_mode);
|
||||
assert((st.st_mode & 07777) == (0742));
|
||||
}
|
||||
|
||||
if (getuid() != 0) {
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#include "bsdtar_platform.h"
|
||||
__FBSDID("$FreeBSD: src/usr.bin/tar/bsdtar.c,v 1.75 2007/05/29 05:39:10 kientzle Exp $");
|
||||
__FBSDID("$FreeBSD: src/usr.bin/tar/bsdtar.c,v 1.77 2007/09/09 00:07:18 kientzle Exp $");
|
||||
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
|
@ -151,6 +151,7 @@ enum {
|
|||
OPTION_NO_SAME_PERMISSIONS,
|
||||
OPTION_NULL,
|
||||
OPTION_ONE_FILE_SYSTEM,
|
||||
OPTION_POSIX,
|
||||
OPTION_STRIP_COMPONENTS,
|
||||
OPTION_TOTALS,
|
||||
OPTION_USE_COMPRESS_PROGRAM,
|
||||
|
@ -202,6 +203,7 @@ static const struct option tar_longopts[] = {
|
|||
{ "no-same-permissions",no_argument, NULL, OPTION_NO_SAME_PERMISSIONS },
|
||||
{ "null", no_argument, NULL, OPTION_NULL },
|
||||
{ "one-file-system", no_argument, NULL, OPTION_ONE_FILE_SYSTEM },
|
||||
{ "posix", no_argument, NULL, OPTION_POSIX },
|
||||
{ "preserve-permissions", no_argument, NULL, 'p' },
|
||||
{ "read-full-blocks", no_argument, NULL, 'B' },
|
||||
{ "same-permissions", no_argument, NULL, 'p' },
|
||||
|
@ -489,6 +491,9 @@ main(int argc, char **argv)
|
|||
bsdtar->extract_flags |= ARCHIVE_EXTRACT_XATTR;
|
||||
bsdtar->extract_flags |= ARCHIVE_EXTRACT_FFLAGS;
|
||||
break;
|
||||
case OPTION_POSIX: /* GNU tar */
|
||||
bsdtar->create_format = "pax";
|
||||
break;
|
||||
case 'r': /* SUSv2 */
|
||||
set_mode(bsdtar, opt);
|
||||
break;
|
||||
|
|
|
@ -1 +1 @@
|
|||
2.2.6
|
||||
2.2.8
|
Loading…
Reference in a new issue