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

Tim Kientzle kientzle at FreeBSD.org
Sat Feb 6 20:36:15 UTC 2010


Author: kientzle
Date: Sat Feb  6 20:36:14 2010
New Revision: 203569
URL: http://svn.freebsd.org/changeset/base/203569

Log:
  bsdtar doesn't actually know what compression is supported by libarchive
  and it should not pretend that it does.  It should just pass along the
  user's request and handle an error if it's not supported.

Modified:
  head/usr.bin/tar/bsdtar.c
  head/usr.bin/tar/write.c

Modified: head/usr.bin/tar/bsdtar.c
==============================================================================
--- head/usr.bin/tar/bsdtar.c	Sat Feb  6 20:27:36 2010	(r203568)
+++ head/usr.bin/tar/bsdtar.c	Sat Feb  6 20:36:14 2010	(r203569)
@@ -299,30 +299,18 @@ main(int argc, char **argv)
 				    bsdtar->optarg);
 			break;
 		case 'j': /* GNU tar */
-#if HAVE_LIBBZ2
 			if (bsdtar->create_compression != '\0')
 				bsdtar_errc(1, 0,
 				    "Can't specify both -%c and -%c", opt,
 				    bsdtar->create_compression);
 			bsdtar->create_compression = opt;
-#else
-			bsdtar_warnc(0,
-			    "bzip2 compression not supported by this version of bsdtar");
-			usage();
-#endif
 			break;
 		case 'J': /* GNU tar 1.21 and later */
-#if HAVE_LIBLZMA
 			if (bsdtar->create_compression != '\0')
 				bsdtar_errc(1, 0,
 				    "Can't specify both -%c and -%c", opt,
 				    bsdtar->create_compression);
 			bsdtar->create_compression = opt;
-#else
-			bsdtar_warnc(0,
-			    "xz compression not supported by this version of bsdtar");
-			usage();
-#endif
 			break;
 		case 'k': /* GNU tar */
 			bsdtar->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE;
@@ -338,17 +326,11 @@ main(int argc, char **argv)
 			bsdtar->option_warn_links = 1;
 			break;
 		case OPTION_LZMA:
-#if HAVE_LIBLZMA
 			if (bsdtar->create_compression != '\0')
 				bsdtar_errc(1, 0,
 				    "Can't specify both -%c and -%c", opt,
 				    bsdtar->create_compression);
 			bsdtar->create_compression = opt;
-#else
-			bsdtar_warnc(0,
-			    "lzma compression not supported by this version of bsdtar");
-			usage();
-#endif
 			break;
 		case 'm': /* SUSv2 */
 			bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_TIME;
@@ -510,17 +492,11 @@ main(int argc, char **argv)
 			set_mode(bsdtar, opt);
 			break;
 		case 'y': /* FreeBSD version of GNU tar */
-#if HAVE_LIBBZ2
 			if (bsdtar->create_compression != '\0')
 				bsdtar_errc(1, 0,
 				    "Can't specify both -%c and -%c", opt,
 				    bsdtar->create_compression);
 			bsdtar->create_compression = opt;
-#else
-			bsdtar_warnc(0,
-			    "bzip2 compression not supported by this version of bsdtar");
-			usage();
-#endif
 			break;
 		case 'Z': /* GNU tar */
 			if (bsdtar->create_compression != '\0')
@@ -530,17 +506,11 @@ main(int argc, char **argv)
 			bsdtar->create_compression = opt;
 			break;
 		case 'z': /* GNU tar, star, many others */
-#if HAVE_LIBZ
 			if (bsdtar->create_compression != '\0')
 				bsdtar_errc(1, 0,
 				    "Can't specify both -%c and -%c", opt,
 				    bsdtar->create_compression);
 			bsdtar->create_compression = opt;
-#else
-			bsdtar_warnc(0,
-			    "gzip compression not supported by this version of bsdtar");
-			usage();
-#endif
 			break;
 		case OPTION_USE_COMPRESS_PROGRAM:
 			bsdtar->compress_program = bsdtar->optarg;

Modified: head/usr.bin/tar/write.c
==============================================================================
--- head/usr.bin/tar/write.c	Sat Feb  6 20:27:36 2010	(r203568)
+++ head/usr.bin/tar/write.c	Sat Feb  6 20:36:14 2010	(r203569)
@@ -185,34 +185,33 @@ tar_mode_c(struct bsdtar *bsdtar)
 	} else {
 		switch (bsdtar->create_compression) {
 		case 0:
-			archive_write_set_compression_none(a);
+			r = archive_write_set_compression_none(a);
 			break;
-#ifdef HAVE_LIBBZ2
 		case 'j': case 'y':
-			archive_write_set_compression_bzip2(a);
+			r = archive_write_set_compression_bzip2(a);
 			break;
-#endif
-#ifdef HAVE_LIBLZMA
 		case 'J':
-			archive_write_set_compression_xz(a);
+			r = archive_write_set_compression_xz(a);
 			break;
 		case OPTION_LZMA:
-			archive_write_set_compression_lzma(a);
+			r = archive_write_set_compression_lzma(a);
 			break;
-#endif
-#ifdef HAVE_LIBZ
 		case 'z':
-			archive_write_set_compression_gzip(a);
+			r = archive_write_set_compression_gzip(a);
 			break;
-#endif
 		case 'Z':
-			archive_write_set_compression_compress(a);
+			r = archive_write_set_compression_compress(a);
 			break;
 		default:
 			bsdtar_errc(1, 0,
 			    "Unrecognized compression option -%c",
 			    bsdtar->create_compression);
 		}
+		if (r != ARCHIVE_OK) {
+			bsdtar_errc(1, 0,
+			    "Unsupported compression option -%c",
+			    bsdtar->create_compression);
+		}
 	}
 
 	if (ARCHIVE_OK != archive_write_set_options(a, bsdtar->option_options))


More information about the svn-src-head mailing list