X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=31537eb23fad6121f810ff80aa3b4ed25b4ccb5c;hb=b216fed6340d073d33351145be033ecc5b903c7a;hp=c2ead1356c26f7335975585346ee432b127cf618;hpb=1428b7f1764ae29ca1e975a0762872569fccb8df;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index c2ead13..31537eb 100644 --- a/src/tar.c +++ b/src/tar.c @@ -1,7 +1,7 @@ /* A tar (tape archiver) program. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, - 2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2001, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by John Gilmore, starting 1985-08-25. @@ -50,6 +50,7 @@ #include #include #include +#include /* Local declarations. */ @@ -271,6 +272,7 @@ enum IGNORE_FAILED_READ_OPTION, INDEX_FILE_OPTION, KEEP_NEWER_FILES_OPTION, + LZMA_OPTION, LZOP_OPTION, MODE_OPTION, MTIME_OPTION, @@ -323,7 +325,6 @@ enum TRANSFORM_OPTION, UNQUOTE_OPTION, USAGE_OPTION, - USE_COMPRESS_PROGRAM_OPTION, UTC_OPTION, VERSION_OPTION, VOLNO_FILE_OPTION, @@ -352,7 +353,7 @@ The version control may be set with --backup or VERSION_CONTROL, values are:\n\n /* NOTE: - Available option letters are DEIQY and eqy. Consider the following + Available option letters are DEQY and eqy. Consider the following assignments: [For Solaris tar compatibility =/= Is it important at all?] @@ -360,7 +361,6 @@ The version control may be set with --backup or VERSION_CONTROL, values are:\n\n E use extended headers (--format=posix) [q alias for --occurrence=1 =/= this would better be used for quiet?] - [I same as T =/= will harm star compatibility] y per-file gzip compression Y per-block gzip compression */ @@ -595,7 +595,7 @@ static struct argp_option options[] = { {"auto-compress", 'a', 0, 0, N_("use archive suffix to determine the compression program"), GRID+1 }, {"no-auto-compress", NO_AUTO_COMPRESS_OPTION, 0, 0, - N_("do not use use archive suffix to determine the compression program"), + N_("do not use archive suffix to determine the compression program"), GRID+1 }, {"bzip2", 'j', 0, 0, N_("filter the archive through bzip2"), GRID+1 }, @@ -606,11 +606,13 @@ static struct argp_option options[] = { {"compress", 'Z', 0, 0, N_("filter the archive through compress"), GRID+1 }, {"uncompress", 0, 0, OPTION_ALIAS, NULL, GRID+1 }, - {"lzma", 'J', 0, 0, + {"lzma", LZMA_OPTION, 0, 0, N_("filter the archive through lzma"), GRID+1 }, {"lzop", LZOP_OPTION, 0, 0, N_("filter the archive through lzop"), GRID+8 }, - {"use-compress-program", USE_COMPRESS_PROGRAM_OPTION, N_("PROG"), 0, + {"xz", 'J', 0, 0, + N_("filter the archive through xz"), GRID+8 }, + {"use-compress-program", 'I', N_("PROG"), 0, N_("filter through PROG (must accept -d)"), GRID+1 }, #undef GRID @@ -686,6 +688,7 @@ static struct argp_option options[] = { GRID+1 }, {"transform", TRANSFORM_OPTION, N_("EXPRESSION"), 0, N_("use sed replace EXPRESSION to transform file names"), GRID+1 }, + {"xform", 0, 0, OPTION_ALIAS, NULL, GRID+1 }, #undef GRID #define GRID 120 @@ -1363,18 +1366,12 @@ parse_opt (int key, char *arg, struct argp_state *state) ignore_zeros_option = true; break; - case 'I': - USAGE_ERROR ((0, 0, - _("Warning: the -I option is not supported;" - " perhaps you meant -j or -T?"))); - break; - case 'j': set_use_compress_program_option ("bzip2"); break; case 'J': - set_use_compress_program_option ("lzma"); + set_use_compress_program_option ("xz"); break; case 'k': @@ -1408,6 +1405,10 @@ parse_opt (int key, char *arg, struct argp_state *state) } break; + case LZMA_OPTION: + set_use_compress_program_option ("lzma"); + break; + case LZOP_OPTION: set_use_compress_program_option ("lzop"); break; @@ -1819,6 +1820,8 @@ parse_opt (int key, char *arg, struct argp_state *state) /* FIXME: What it is good for? */ same_permissions_option = true; same_order_option = true; + WARN ((0, 0, _("The --preserve option is deprecated, " + "use --preserve-permissions --preserve-order instead"))); break; case RECORD_SIZE_OPTION: @@ -1902,7 +1905,7 @@ parse_opt (int key, char *arg, struct argp_state *state) set_transform_expr (arg); break; - case USE_COMPRESS_PROGRAM_OPTION: + case 'I': set_use_compress_program_option (arg); break; @@ -2345,6 +2348,10 @@ decode_options (int argc, char **argv) if (tape_length_option && tape_length_option < record_size) USAGE_ERROR ((0, 0, _("Volume length cannot be less than record size"))); + + if (same_order_option && listed_incremental_option) + USAGE_ERROR ((0, 0, _("--preserve-order is not compatible with " + "--listed-incremental"))); /* Forbid using -c with no input files whatsoever. Check that `-f -', explicit or implied, is used correctly. */ @@ -2448,11 +2455,14 @@ main (int argc, char **argv) obstack_init (&argv_stk); -#ifdef SIGCHLD + /* Ensure default behavior for some signals */ + signal (SIGPIPE, SIG_DFL); /* System V fork+wait does not work if SIGCHLD is ignored. */ signal (SIGCHLD, SIG_DFL); -#endif + /* Try to disable the ability to unlink a directory. */ + priv_set_remove_linkdir (); + /* Decode options. */ decode_options (argc, argv);