summaryrefslogtreecommitdiffstats
path: root/usr.bin/tar
diff options
context:
space:
mode:
authorkientzle <kientzle@FreeBSD.org>2010-02-06 20:36:14 +0000
committerkientzle <kientzle@FreeBSD.org>2010-02-06 20:36:14 +0000
commit6b176158d359046a101257872776bcfa38c2270f (patch)
tree476487a6f915f663a72dc2a5de04a646688586bf /usr.bin/tar
parent4392f2bf7231595a13a6a6ea7c119d7cec24eb4f (diff)
downloadFreeBSD-src-6b176158d359046a101257872776bcfa38c2270f.zip
FreeBSD-src-6b176158d359046a101257872776bcfa38c2270f.tar.gz
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.
Diffstat (limited to 'usr.bin/tar')
-rw-r--r--usr.bin/tar/bsdtar.c30
-rw-r--r--usr.bin/tar/write.c23
2 files changed, 11 insertions, 42 deletions
diff --git a/usr.bin/tar/bsdtar.c b/usr.bin/tar/bsdtar.c
index b070d8e..535c107 100644
--- a/usr.bin/tar/bsdtar.c
+++ b/usr.bin/tar/bsdtar.c
@@ -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;
diff --git a/usr.bin/tar/write.c b/usr.bin/tar/write.c
index f236876..2ac519f 100644
--- a/usr.bin/tar/write.c
+++ b/usr.bin/tar/write.c
@@ -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))
OpenPOWER on IntegriCloud