diff options
Diffstat (limited to 'catgets/gencat.c')
-rw-r--r-- | catgets/gencat.c | 11 |
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 (¤t->mem_pool); obstack_blank (¤t->mem_pool, outlen); this_line = (char *) obstack_base (¤t->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; |