const char *argp_program_version = "tar (" PACKAGE_NAME ") " VERSION;
const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
-static char doc[] = N_("GNU `tar' saves many files together into a single tape or disk archive, and can restore individual files from the archive.\n\
+static char const doc0[] = N_("\
+GNU `tar' saves many files together into a single tape or disk archive, \
+and can restore individual files from the archive.\n\
\n\
Examples:\n\
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.\n\
tar -tvf archive.tar # List all files in archive.tar verbosely.\n\
tar -xf archive.tar # Extract all files from archive.tar.\n\
-\vThe backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\
+");
+static char const doc1[] = N_("\
+The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\
The version control may be set with --backup or VERSION_CONTROL, values are:\n\n\
none, off never make backups\n\
t, numbered make numbered backups\n\
N_("use sed replace EXPRESSION to transform file names"), GRID+1 },
#undef GRID
-#define GRID 95
+#define GRID 95
{NULL, 0, NULL, 0,
N_("File name matching options (affect both exclude and include patterns):"),
GRID },
{"wildcards-match-slash", WILDCARDS_MATCH_SLASH_OPTION, 0, 0,
N_("wildcards match `/' (default for exclusion)"), GRID+1 },
#undef GRID
-
+
#define GRID 100
{NULL, 0, NULL, 0,
N_("Informative output:"), GRID },
| (args)->matching_flags \
| recursion_option)
-#ifdef REMOTE_SHELL
+#ifdef REMOTE_SHELL
# define DECL_SHOW_DEFAULT_SETTINGS(stream, printer) \
{ \
printer (stream, \
static void
show_default_settings (FILE *fp)
DECL_SHOW_DEFAULT_SETTINGS(fp, fprintf)
-
+
static void
show_default_settings_fs (argp_fmtstream_t fs)
DECL_SHOW_DEFAULT_SETTINGS(fs, argp_fmtstream_printf)
{ "QUIT", SIGQUIT }
};
struct sigtab *p;
-
+
for (p = sigtab; p < sigtab + sizeof (sigtab) / sizeof (sigtab[0]); p++)
if (strcmp (p->name, name) == 0)
{
ARGP_HELP_STD_HELP & ~ARGP_HELP_BUG_ADDR);
/* FIXME: use struct uparams.rmargin (from argp-help.c) instead of 79 */
fs = argp_make_fmtstream (state->out_stream, 0, 79, 0);
-
+
argp_fmtstream_printf (fs, "\n%s\n\n",
_("Valid arguments for --quoting-style options are:"));
tar_list_quoting_styles (fs, " ");
-
+
argp_fmtstream_puts (fs, _("\n*This* tar defaults to:\n"));
show_default_settings_fs (fs);
argp_fmtstream_putc (fs, '\n');
get_date_or_file (args, "--mtime", arg, &mtime_option);
set_mtime_option = true;
break;
-
+
case 'n':
seekable_archive = true;
break;
}
}
break;
-
+
case 't':
set_subcommand_option (LIST_SUBCOMMAND);
verbose_option++;
case TRANSFORM_OPTION:
set_transform_expr (arg);
break;
-
+
case USE_COMPRESS_PROGRAM_OPTION:
set_use_compress_program_option (arg);
break;
options,
parse_opt,
N_("[FILE]..."),
- doc,
+ NULL,
NULL,
NULL,
NULL
};
+/* Initialize the argp documentation. gettext 0.15 dislikes doc
+ strings containing '\v', so insert '\v' after translation. */
+
+static void
+initialize_argp_doc (void)
+{
+ char const *xdoc0 = _(doc0); size_t xlen0 = strlen (xdoc0);
+ char const *xdoc1 = _(doc1); size_t xlen1 = strlen (xdoc1);
+ char *doc = xmalloc (xlen0 + 1 + xlen1 + 1);
+ memcpy (doc, xdoc0, xlen0);
+ doc[xlen0] = '\v';
+ memcpy (doc + xlen0 + 1, doc1, xlen1 + 1);;
+ argp.doc = doc;
+}
+
void
usage (int status)
{
args.backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
args.version_control_string = 0;
args.input_files = false;
-
+
subcommand_option = UNKNOWN_SUBCOMMAND;
archive_format = DEFAULT_FORMAT;
blocking_factor = DEFAULT_BLOCKING;
unquote_option = true;
tar_sparse_major = 1;
tar_sparse_minor = 0;
-
+
owner_option = -1;
group_option = -1;
+ initialize_argp_doc ();
+
/* Convert old-style tar call by exploding option element and rearranging
options accordingly. */
/* Warn about implicit use of the wildcards in command line arguments.
See TODO */
warn_regex_usage = args.wildcards == default_wildcards;
-
+
/* Derive option values and check option consistency. */
if (archive_format == DEFAULT_FORMAT)
| FORMAT_MASK (GNU_FORMAT)
| FORMAT_MASK (POSIX_FORMAT));
- if (multi_volume_option
- && archive_format == POSIX_FORMAT
- && subcommand_option == CREATE_SUBCOMMAND
- && !tape_length_option)
- USAGE_ERROR ((0, 0,
- _("creating multi-volume archives in posix format requires using --tape-length (-L) option")));
-
if (occurrence_option)
{
if (!args.input_files)
/* Close all inherited open descriptors, except for the first three */
closeopen ();
-
+
/* Pre-allocate a few structures. */
allocated_archive_names = 10;