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.
This commit is contained in:
Tim Kientzle 2010-02-06 20:36:14 +00:00
parent 12d4db7c3f
commit c92560005d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=203569
2 changed files with 11 additions and 42 deletions

View File

@ -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;

View File

@ -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))