X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Ftar.c;h=dfbeca8eb70f90a9e49b510537f4c2cad4060d9b;hb=c9f5ead8dec28ea7b774184f3c22e9b02ac6f8e2;hp=5ffb7601c3e132f53637c53aa56c3913ad08f1f5;hpb=276d317d88ace2866bf0c5e3456aa912cc21d161;p=chaz%2Ftar diff --git a/src/tar.c b/src/tar.c index 5ffb760..dfbeca8 100644 --- a/src/tar.c +++ b/src/tar.c @@ -25,6 +25,11 @@ # define SIGCHLD SIGCLD #endif +#include +#ifndef time +time_t time (); +#endif + /* The following causes "common.h" to produce definitions of all the global variables, rather than just "extern" declarations of them. GNU tar does depend on the system loader to preset all GLOBAL variables to neutral (or @@ -75,6 +80,7 @@ int confirm (const char *message_action, const char *message_name) { static FILE *confirm_file; + static int confirm_file_EOF; if (!confirm_file) { @@ -94,13 +100,19 @@ confirm (const char *message_action, const char *message_name) fflush (stdlis); { - int reply = getc (confirm_file); + int reply = confirm_file_EOF ? EOF : getc (confirm_file); int character; for (character = reply; - character != '\n' && character != EOF; + character != '\n'; character = getc (confirm_file)) - continue; + if (character == EOF) + { + confirm_file_EOF = 1; + fputc ('\n', stdlis); + fflush (stdlis); + break; + } return reply == 'y' || reply == 'Y'; } } @@ -206,6 +218,8 @@ struct option long_options[] = {"newer-mtime", required_argument, 0, NEWER_MTIME_OPTION}, {"null", no_argument, 0, NULL_OPTION}, {"no-recursion", no_argument, 0, NO_RECURSE_OPTION}, + {"no-same-owner", no_argument, &same_owner_option, -1}, + {"no-same-permissions", no_argument, &same_permissions_option, -1}, {"numeric-owner", no_argument, &numeric_owner_option, 1}, {"old-archive", no_argument, 0, 'o'}, {"one-file-system", no_argument, 0, 'l'}, @@ -264,7 +278,13 @@ usage (int status) GNU `tar' saves many files together into a single tape or disk archive, and\n\ can restore individual files from the archive.\n"), stdout); - printf (_("\nUsage: %s [OPTION]... [FILE]...\n"), program_name); + printf (_("\nUsage: %s [OPTION]... [FILE]...\n\ +\n\ +Examples:\n\ + %s -cf archive.tar foo bar # Create archive.tar from files foo and bar.\n\ + %s -tvf archive.tar # List all files in archive.tar verbosely.\n\ + %s -xf archive.tar # Extract all files from archive.tar.\n"), + program_name, program_name, program_name, program_name); fputs (_("\ \n\ If a long option shows an argument as mandatory, then it is mandatory\n\ @@ -294,7 +314,8 @@ Operation modifiers:\n\ -S, --sparse handle sparse files efficiently\n\ -O, --to-stdout extract files to standard output\n\ -G, --incremental handle old GNU-format incremental backup\n\ - -g, --listed-incremental handle new GNU-format incremental backup\n\ + -g, --listed-incremental=FILE\n\ + handle new GNU-format incremental backup\n\ --ignore-failed-read do not exit with nonzero on unreadable files\n"), stdout); fputs (_("\ @@ -306,8 +327,10 @@ Handling of file attributes:\n\ --atime-preserve don't change access times on dumped files\n\ -m, --modification-time don't extract file modified time\n\ --same-owner try extracting files with the same ownership\n\ + --no-same-owner extract files as yourself\n\ --numeric-owner always use numbers for user/group names\n\ - -p, --same-permissions extract all protection information\n\ + -p, --same-permissions extract permissions information\n\ + --no-same-permissions do not extract permissions information\n\ --preserve-permissions same as -p\n\ -s, --same-order sort names to extract to match archive\n\ --preserve-order same as -s\n\ @@ -400,10 +423,7 @@ Support for POSIX is only partially implemented, don't count on it yet.\n\ ARCHIVE may be FILE, HOST:FILE or USER@HOST:FILE; and FILE may be a file\n\ or a device. *This* `tar' defaults to `-f%s -b%d'.\n"), DEFAULT_ARCHIVE, DEFAULT_BLOCKING); - fputs (_("\ -\n\ -Report bugs to .\n"), - stdout); + fputs (_("\nReport bugs to .\n"), stdout); } exit (status); } @@ -708,7 +728,8 @@ decode_options (int argc, char *const *argv) newer_mtime_option = get_date (optarg, 0); if (newer_mtime_option == (time_t) -1) - USAGE_ERROR ((0, 0, _("Invalid date format `%s'"), optarg)); + WARN ((0, 0, _("Substituting %s for unknown date format `%s'"), + tartime (newer_mtime_option), optarg)); break; #endif /* not MSDOS */ @@ -1017,19 +1038,13 @@ decode_options (int argc, char *const *argv) if (show_version) { - printf ("tar (GNU %s) %s\n", PACKAGE, VERSION); - fputs (_("\ -\n\ -Copyright 1988, 92,93,94,95,96,97,98, 1999 Free Software Foundation, Inc.\n"), - stdout); - fputs (_("\ -This is free software; see the source for copying conditions. There is NO\n\ -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"), - stdout); - fputs (_("\ -\n\ -Written by John Gilmore and Jay Fenlason.\n"), - stdout); + printf ("tar (GNU %s) %s\n%s\n%s\n%s\n", PACKAGE, VERSION, + "Copyright 1999 Free Software Foundation, Inc.", + _("\ +This program comes with NO WARRANTY, to the extent permitted by law.\n\ +You may redistribute it under the terms of the GNU General Public License;\n\ +see the file named COPYING for details."), + _("Written by John Gilmore and Jay Fenlason.")); exit (TAREXIT_SUCCESS); } @@ -1137,6 +1152,10 @@ Written by John Gilmore and Jay Fenlason.\n"), int main (int argc, char *const *argv) { +#if HAVE_CLOCK_GETTIME + if (clock_gettime (CLOCK_REALTIME, &start_timespec) != 0) +#endif + start_time = time (0); program_name = argv[0]; setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR);