]> Dogcows Code - chaz/tar/blobdiff - src/tar.c
Update copyright year.
[chaz/tar] / src / tar.c
index 379b05a0113dec80129672dd31aa5201cfe77213..5415bbee8e950e30655a2e1b2d2afb1053cbf6c6 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -1,5 +1,5 @@
 /* A tar (tape archiver) program.
-   Copyright 1988, 92,93,94,95,96,97, 1999 Free Software Foundation, Inc.
+   Copyright 1988, 92,93,94,95,96,97,99, 2000 Free Software Foundation, Inc.
    Written by John Gilmore, starting 1985-08-25.
 
    This program is free software; you can redistribute it and/or modify it
@@ -37,6 +37,7 @@ time_t time ();
 #define GLOBAL
 #include "common.h"
 
+#include "quotearg.h"
 #include "xstrtol.h"
 
 time_t get_date ();
@@ -51,7 +52,7 @@ time_t get_date ();
 # define DEFAULT_BLOCKING 20
 #endif
 
-static void usage PARAMS ((int));
+static void usage PARAMS ((int)) __attribute__ ((noreturn));
 \f
 /* Miscellaneous.  */
 
@@ -85,18 +86,19 @@ confirm (const char *message_action, const char *message_name)
   if (!confirm_file)
     {
       if (archive == 0 || stdin_used_by)
-       confirm_file = fopen (TTY_NAME, "r");
+       {
+         confirm_file = fopen (TTY_NAME, "r");
+         if (! confirm_file)
+           open_fatal (TTY_NAME);
+       }
       else
        {
          request_stdin ("-w");
          confirm_file = stdin;
        }
-
-      if (!confirm_file)
-       FATAL_ERROR ((0, 0, _("Cannot read confirmation from user")));
     }
 
-  fprintf (stdlis, "%s %s?", message_action, message_name);
+  fprintf (stdlis, "%s %s?", message_action, quote (message_name));
   fflush (stdlis);
 
   {
@@ -136,6 +138,7 @@ enum
   NEWER_MTIME_OPTION,
   NO_RECURSE_OPTION,
   NULL_OPTION,
+  OVERWRITE_OPTION,
   OWNER_OPTION,
   POSIX_OPTION,
   PRESERVE_OPTION,
@@ -223,6 +226,7 @@ struct option long_options[] =
   {"numeric-owner", no_argument, &numeric_owner_option, 1},
   {"old-archive", no_argument, 0, 'o'},
   {"one-file-system", no_argument, 0, 'l'},
+  {"overwrite", no_argument, 0, OVERWRITE_OPTION},
   {"owner", required_argument, 0, OWNER_OPTION},
   {"portability", no_argument, 0, 'o'},
   {"posix", no_argument, 0, POSIX_OPTION},
@@ -278,7 +282,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\
@@ -302,7 +312,8 @@ Main operation mode:\n\
 Operation modifiers:\n\
   -W, --verify               attempt to verify the archive after writing it\n\
       --remove-files         remove files after adding them to the archive\n\
-  -k, --keep-old-files       don't overwrite existing files when extracting\n\
+  -k, --keep-old-files       don't replace existing files when extracting\n\
+      --overwrite            overwrite existing files when extracting\n\
   -U, --unlink-first         remove each file prior to extracting over it\n\
       --recursive-unlink     empty hierarchies prior to extracting directory\n\
   -S, --sparse               handle sparse files efficiently\n\
@@ -417,10 +428,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 <bug-tar@gnu.org>.\n"),
-              stdout);
+      fputs (_("\nReport bugs to <bug-tar@gnu.org>.\n"), stdout);
     }
   exit (status);
 }
@@ -672,9 +680,8 @@ decode_options (int argc, char *const *argv)
        break;
 
       case 'k':
-       /* Don't overwrite existing files.  */
-
-       keep_old_files_option = 1;
+       /* Don't replace existing files.  */
+       old_files_option = KEEP_OLD_FILES;
        break;
 
       case 'K':
@@ -725,8 +732,8 @@ decode_options (int argc, char *const *argv)
 
        newer_mtime_option = get_date (optarg, 0);
        if (newer_mtime_option == (time_t) -1)
-         WARN ((0, 0, _("Substituting %s for unknown date format `%s'"),
-                tartime (newer_mtime_option), optarg));
+         WARN ((0, 0, _("Substituting %s for unknown date format %s"),
+                tartime (newer_mtime_option), quote (optarg)));
 
        break;
 #endif /* not MSDOS */
@@ -797,7 +804,7 @@ decode_options (int argc, char *const *argv)
        break;
 
       case 'U':
-       unlink_first_option = 1;
+       old_files_option = UNLINK_FIRST_OLD_FILES;
        break;
 
       case 'v':
@@ -822,7 +829,10 @@ decode_options (int argc, char *const *argv)
 
       case 'X':
        if (add_exclude_file (add_filtered_exclude, 0, optarg, '\n') != 0)
-         FATAL_ERROR ((0, errno, "%s", optarg));
+         {
+           int e = errno;
+           FATAL_ERROR ((0, e, "%s", quotearg_colon (optarg)));
+         }
        break;
 
       case 'z':
@@ -871,7 +881,7 @@ decode_options (int argc, char *const *argv)
        if (mode_option == MODE_INVALID)
          FATAL_ERROR ((0, 0, _("Invalid mode given on option")));
        if (mode_option == MODE_MEMORY_EXHAUSTED)
-         FATAL_ERROR ((0, 0, _("Memory exhausted")));
+         xalloc_die ();
        break;
 
       case NO_RECURSE_OPTION:
@@ -882,6 +892,10 @@ decode_options (int argc, char *const *argv)
        filename_terminator = '\0';
        break;
 
+      case OVERWRITE_OPTION:
+       old_files_option = OVERWRITE_OLD_FILES;
+       break;
+
       case OWNER_OPTION:
        if (! (strlen (optarg) < UNAME_FIELD_SIZE
               && uname_to_uid (optarg, &owner_option)))
@@ -1036,7 +1050,7 @@ decode_options (int argc, char *const *argv)
   if (show_version)
     {
       printf ("tar (GNU %s) %s\n%s\n%s\n%s\n", PACKAGE, VERSION,
-             "Copyright 1999 Free Software Foundation, Inc.",
+             "Copyright 2000 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\
@@ -1092,7 +1106,7 @@ see the file named COPYING for details."),
 
   /* If ready to unlink hierarchies, so we are for simpler files.  */
   if (recursive_unlink_option)
-    unlink_first_option = 1;
+    old_files_option = UNLINK_FIRST_OLD_FILES;
 
   /* Forbid using -c with no input files whatsoever.  Check that `-f -',
      explicit or implied, is used correctly.  */
@@ -1118,12 +1132,13 @@ see the file named COPYING for details."),
     case CAT_SUBCOMMAND:
     case UPDATE_SUBCOMMAND:
     case APPEND_SUBCOMMAND:
+    case DELETE_SUBCOMMAND:
       for (archive_name_cursor = archive_name_array;
           archive_name_cursor < archive_name_array + archive_names;
           archive_name_cursor++)
        if (!strcmp (*archive_name_cursor, "-"))
          USAGE_ERROR ((0, 0,
-                       _("Options `-Aru' are incompatible with `-f -'")));
+                       _("Options `-Aru' and `--delete' are incompatible with `-f -'")));
 
     default:
       break;
@@ -1160,6 +1175,7 @@ main (int argc, char *const *argv)
 
   exit_status = TAREXIT_SUCCESS;
   filename_terminator = '\n';
+  set_quoting_style (0, escape_quoting_style);
 
   /* Pre-allocate a few structures.  */
 
This page took 0.025617 seconds and 4 git commands to generate.