Quellcode durchsuchen

* src/tar.c: Work around limitation imposed by gettext 0.15
by concatenating strings with "\v" after translation.
(doc): Remove, splitting into:
(doc0, doc1): New constants.
(argp): Don't use doc; just initialize to NULL.
(initialize_argp_doc): New function.
(decode_options): Use it.

Paul Eggert vor 18 Jahren
Ursprung
Commit
0680ad4d42
2 geänderte Dateien mit 31 neuen und 3 gelöschten Zeilen
  1. 8 0
      ChangeLog
  2. 23 3
      src/tar.c

+ 8 - 0
ChangeLog

@@ -1,5 +1,13 @@
 2006-08-07  Paul Eggert  <eggert@cs.ucla.edu>
 
+	* src/tar.c: Work around limitation imposed by gettext 0.15
+	by concatenating strings with "\v" after translation.
+	(doc): Remove, splitting into:
+	(doc0, doc1): New constants.
+	(argp): Don't use doc; just initialize to NULL.
+	(initialize_argp_doc): New function.
+	(decode_options): Use it.
+
 	* bootstrap: Redo po file retrieval to match Bison's method,
 	since the translation project changed its index format.
 	Don't use --assume-autoconf; it's now replaced

+ 23 - 3
src/tar.c

@@ -320,13 +320,16 @@ enum
 
 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\
-\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\
@@ -1859,12 +1862,27 @@ static struct argp argp = {
   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)
 {
@@ -1921,6 +1939,8 @@ decode_options (int argc, char **argv)
   owner_option = -1;
   group_option = -1;
 
+  initialize_argp_doc ();
+
   /* Convert old-style tar call by exploding option element and rearranging
      options accordingly.  */