X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=80091fa2053680e55a0bdcc863e883b71f5831c0;hb=694e8376abff79426bb7e9f69c9662e6ce03c69d;hp=33616d017220acdb069e545a39efdfb3959b3ca2;hpb=80e5de931058de5cebdf162785069ae3f8db5887;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 33616d0..80091fa 100644 --- a/src/tar.c +++ b/src/tar.c @@ -56,7 +56,7 @@ # define DEFAULT_BLOCKING 20 #endif -static void usage (int) __attribute__ ((noreturn)); +void usage (int) __attribute__ ((noreturn)); /* Miscellaneous. */ @@ -206,6 +206,7 @@ enum OCCURRENCE_OPTION, OVERWRITE_OPTION, OWNER_OPTION, + PAX_OPTION, POSIX_OPTION, PRESERVE_OPTION, RECORD_SIZE_OPTION, @@ -296,6 +297,7 @@ static struct option long_options[] = {"one-file-system", no_argument, 0, 'l'}, {"overwrite", no_argument, 0, OVERWRITE_OPTION}, {"owner", required_argument, 0, OWNER_OPTION}, + {"pax-option", required_argument, 0, PAX_OPTION}, {"portability", no_argument, 0, 'o'}, {"posix", no_argument, 0, POSIX_OPTION}, {"preserve", no_argument, 0, PRESERVE_OPTION}, @@ -336,7 +338,7 @@ static struct option long_options[] = }; /* Print a usage message and exit with STATUS. */ -static void +void usage (int status) { if (status != TAREXIT_SUCCESS) @@ -481,7 +483,7 @@ Local file selection:\n\ stdout); #if !MSDOS fputs (_("\ - -N, --newer=DATE only store files newer than DATE\n\ + -N, --newer=DATE-OR-FILE only store files newer than DATE-OR-FILE\n\ --newer-mtime=DATE compare date and time when data changed only\n\ --after-date=DATE same as -N\n"), stdout); @@ -1073,6 +1075,10 @@ decode_options (int argc, char **argv) } break; + case PAX_OPTION: + xheader_set_option (optarg); + break; + case POSIX_OPTION: set_archive_format ("posix"); break; @@ -1275,9 +1281,6 @@ see the file named COPYING for details.")); if (archive_format == DEFAULT_FORMAT) archive_format = DEFAULT_ARCHIVE_FORMAT; - if (archive_format == GNU_FORMAT && getenv ("POSIXLY_CORRECT")) - archive_format = POSIX_FORMAT; /*FIXME?*/ - if (volume_label_option && subcommand_option == CREATE_SUBCOMMAND) assert_format (FORMAT_MASK (OLDGNU_FORMAT) | FORMAT_MASK (GNU_FORMAT)); @@ -1286,7 +1289,8 @@ see the file named COPYING for details.")); || multi_volume_option || sparse_option) assert_format (FORMAT_MASK (OLDGNU_FORMAT) - | FORMAT_MASK (GNU_FORMAT)); + | FORMAT_MASK (GNU_FORMAT) + | FORMAT_MASK (POSIX_FORMAT)); if (occurrence_option) { @@ -1300,7 +1304,7 @@ see the file named COPYING for details.")); USAGE_ERROR ((0, 0, _("--occurrence cannot be used in the requested operation mode"))); } - + if (archive_names == 0) { /* If no archive file name given, try TAPE from the environment, or @@ -1316,7 +1320,7 @@ see the file named COPYING for details.")); if (archive_names > 1 && !multi_volume_option) USAGE_ERROR ((0, 0, - _("Multiple archive files requires `-M' option"))); + _("Multiple archive files require `-M' option"))); if (listed_incremental_option && newer_mtime_option != TYPE_MINIMUM (time_t)) @@ -1343,6 +1347,22 @@ see the file named COPYING for details.")); (unsigned long) volume_label_max_len)); } + if (verify_option) + { + if (multi_volume_option) + USAGE_ERROR ((0, 0, _("Cannot verify multi-volume archives"))); + if (use_compress_program_option) + USAGE_ERROR ((0, 0, _("Cannot verify compressed archives"))); + } + + if (use_compress_program_option) + { + if (multi_volume_option) + USAGE_ERROR ((0, 0, _("Cannot use multi-volume compressed archives"))); + if (subcommand_option == UPDATE_SUBCOMMAND) + USAGE_ERROR ((0, 0, _("Cannot update compressed archives"))); + } + /* If ready to unlink hierarchies, so we are for simpler files. */ if (recursive_unlink_option) old_files_option = UNLINK_FIRST_OLD_FILES;