/* 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
#define GLOBAL
#include "common.h"
+#include "quotearg.h"
#include "xstrtol.h"
time_t get_date ();
# define DEFAULT_BLOCKING 20
#endif
-static void usage PARAMS ((int));
+static void usage PARAMS ((int)) __attribute__ ((noreturn));
\f
/* Miscellaneous. */
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);
{
NEWER_MTIME_OPTION,
NO_RECURSE_OPTION,
NULL_OPTION,
+ OVERWRITE_OPTION,
OWNER_OPTION,
POSIX_OPTION,
PRESERVE_OPTION,
{"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},
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\
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':
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 */
break;
case 'U':
- unlink_first_option = 1;
+ old_files_option = UNLINK_FIRST_OLD_FILES;
break;
case 'v':
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':
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:
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)))
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\
/* 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. */
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;
exit_status = TAREXIT_SUCCESS;
filename_terminator = '\n';
+ set_quoting_style (0, escape_quoting_style);
/* Pre-allocate a few structures. */