svn commit: r189526 - head/usr.bin/tar

Tim Kientzle kientzle at FreeBSD.org
Sat Mar 7 22:19:29 PST 2009


Author: kientzle
Date: Sun Mar  8 06:19:28 2009
New Revision: 189526
URL: http://svn.freebsd.org/changeset/base/189526

Log:
  Merge r492 from libarchive.googlecode.com:  First cut at exposing the
  new options mechanism to userland.  Documentation pending...

Modified:
  head/usr.bin/tar/bsdtar.c
  head/usr.bin/tar/bsdtar.h
  head/usr.bin/tar/cmdline.c
  head/usr.bin/tar/read.c
  head/usr.bin/tar/write.c

Modified: head/usr.bin/tar/bsdtar.c
==============================================================================
--- head/usr.bin/tar/bsdtar.c	Sun Mar  8 06:14:33 2009	(r189525)
+++ head/usr.bin/tar/bsdtar.c	Sun Mar  8 06:19:28 2009	(r189526)
@@ -212,6 +212,9 @@ main(int argc, char **argv)
 		case OPTION_FORMAT: /* GNU tar, others */
 			bsdtar->create_format = bsdtar->optarg;
 			break;
+		case OPTION_FORMAT_OPTIONS:
+			bsdtar->option_format_options = bsdtar->optarg;
+			break;
 		case 'f': /* SUSv2 */
 			bsdtar->filename = bsdtar->optarg;
 			if (strcmp(bsdtar->filename, "-") == 0)

Modified: head/usr.bin/tar/bsdtar.h
==============================================================================
--- head/usr.bin/tar/bsdtar.h	Sun Mar  8 06:14:33 2009	(r189525)
+++ head/usr.bin/tar/bsdtar.h	Sun Mar  8 06:19:28 2009	(r189526)
@@ -60,6 +60,7 @@ struct bsdtar {
 	char		  option_chroot; /* --chroot */
 	char		  option_dont_traverse_mounts; /* --one-file-system */
 	char		  option_fast_read; /* --fast-read */
+	const char	 *option_format_options; /* --format-options */
 	char		  option_honor_nodump; /* --nodump */
 	char		  option_interactive; /* -w */
 	char		  option_no_owner; /* -o */
@@ -110,6 +111,7 @@ enum {
 	OPTION_CHROOT,
 	OPTION_EXCLUDE,
 	OPTION_FORMAT,
+	OPTION_FORMAT_OPTIONS,
 	OPTION_HELP,
 	OPTION_INCLUDE,
 	OPTION_KEEP_NEWER_FILES,

Modified: head/usr.bin/tar/cmdline.c
==============================================================================
--- head/usr.bin/tar/cmdline.c	Sun Mar  8 06:14:33 2009	(r189525)
+++ head/usr.bin/tar/cmdline.c	Sun Mar  8 06:19:28 2009	(r189526)
@@ -83,6 +83,7 @@ static struct option {
 	{ "file",                 1, 'f' },
 	{ "files-from",           1, 'T' },
 	{ "format",               1, OPTION_FORMAT },
+	{ "format-options",       1, OPTION_FORMAT_OPTIONS },
 	{ "gunzip",               0, 'z' },
 	{ "gzip",                 0, 'z' },
 	{ "help",                 0, OPTION_HELP },

Modified: head/usr.bin/tar/read.c
==============================================================================
--- head/usr.bin/tar/read.c	Sun Mar  8 06:14:33 2009	(r189525)
+++ head/usr.bin/tar/read.c	Sun Mar  8 06:19:28 2009	(r189526)
@@ -132,6 +132,12 @@ read_archive(struct bsdtar *bsdtar, char
 	    DEFAULT_BYTES_PER_BLOCK))
 		bsdtar_errc(bsdtar, 1, 0, "Error opening archive: %s",
 		    archive_error_string(a));
+	if (bsdtar->option_format_options != NULL) {
+		r = archive_read_set_options(a, bsdtar->option_format_options);
+		if (r != ARCHIVE_OK)
+			bsdtar_errc(bsdtar, 1, 0, "Error archive options: %s",
+			    archive_error_string(a));
+	}
 
 	do_chdir(bsdtar);
 

Modified: head/usr.bin/tar/write.c
==============================================================================
--- head/usr.bin/tar/write.c	Sun Mar  8 06:14:33 2009	(r189525)
+++ head/usr.bin/tar/write.c	Sun Mar  8 06:19:28 2009	(r189526)
@@ -208,6 +208,12 @@ tar_mode_c(struct bsdtar *bsdtar)
 	if (r != ARCHIVE_OK)
 		bsdtar_errc(bsdtar, 1, 0, archive_error_string(a));
 
+	if (bsdtar->option_format_options != NULL) {
+		r = archive_write_set_options(a, bsdtar->option_format_options);
+		if (r != ARCHIVE_OK)
+			bsdtar_errc(bsdtar, 1, 0, archive_error_string(a));
+	}
+
 	write_archive(a, bsdtar);
 }
 
@@ -294,6 +300,11 @@ tar_mode_r(struct bsdtar *bsdtar)
 	}
 	lseek(bsdtar->fd, end_offset, SEEK_SET); /* XXX check return val XXX */
 	archive_write_open_fd(a, bsdtar->fd); /* XXX check return val XXX */
+	if (bsdtar->option_format_options != NULL) {
+		r = archive_write_set_options(a, bsdtar->option_format_options);
+		if (r != ARCHIVE_OK)
+			bsdtar_errc(bsdtar, 1, 0, archive_error_string(a));
+	}
 
 	write_archive(a, bsdtar); /* XXX check return val XXX */
 
@@ -310,6 +321,7 @@ tar_mode_u(struct bsdtar *bsdtar)
 	int			 format;
 	struct archive_dir_entry	*p;
 	struct archive_dir	 archive_dir;
+	int			 r;
 
 	bsdtar->archive_dir = &archive_dir;
 	memset(&archive_dir, 0, sizeof(archive_dir));
@@ -374,6 +386,11 @@ tar_mode_u(struct bsdtar *bsdtar)
 	lseek(bsdtar->fd, end_offset, SEEK_SET);
 	ftruncate(bsdtar->fd, end_offset);
 	archive_write_open_fd(a, bsdtar->fd);
+	if (bsdtar->option_format_options != NULL) {
+		r = archive_write_set_options(a, bsdtar->option_format_options);
+		if (r != ARCHIVE_OK)
+			bsdtar_errc(bsdtar, 1, 0, archive_error_string(a));
+	}
 
 	write_archive(a, bsdtar);
 


More information about the svn-src-all mailing list