about summary refs log tree commit diff
path: root/catgets
diff options
context:
space:
mode:
Diffstat (limited to 'catgets')
-rw-r--r--catgets/gencat.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/catgets/gencat.c b/catgets/gencat.c
index 60af70b52b..6d9cd4c1d9 100644
--- a/catgets/gencat.c
+++ b/catgets/gencat.c
@@ -649,6 +649,7 @@ duplicated message identifier"));
 	      size_t outlen;
 	      struct message_list *newp;
 	      size_t line_len = strlen (line) + 1;
+	      size_t ident_len = 0;
 
 	      /* We need the conversion.  */
 	      if (cd_towc == (iconv_t) -1
@@ -699,6 +700,9 @@ invalid character: message ignored"));
 	      normalize_line (fname, start_line, cd_towc, wbuf,
 			      current->quote_char, escape_char);
 
+	      if (ident)
+		ident_len = line - this_line;
+
 	      /* Now the string is free of escape sequences.  Convert it
 		 back into a multibyte character string.  First free the
 		 memory allocated for the original string.  */
@@ -714,7 +718,8 @@ invalid character: message ignored"));
 	      outlen = obstack_room (&current->mem_pool);
 	      obstack_blank (&current->mem_pool, outlen);
 	      this_line = (char *) obstack_base (&current->mem_pool);
-	      outbuf = this_line;
+	      outbuf = this_line + ident_len;
+	      outlen -= ident_len;
 
 	      /* Flush the state.  */
 	      iconv (cd_tomb, NULL, NULL, NULL, NULL);
@@ -734,9 +739,9 @@ invalid character: message ignored"));
 
 	      newp = (struct message_list *) xmalloc (sizeof (*newp));
 	      newp->number = message_number;
-	      newp->message = line;
+	      newp->message = line + ident_len;
 	      /* Remember symbolic name; is NULL if no is given.  */
-	      newp->symbol = ident;
+	      newp->symbol = ident ? line : NULL;
 	      /* Remember where we found the character.  */
 	      newp->fname = fname;
 	      newp->line = start_line;