diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | catgets/gencat.c | 41 |
2 files changed, 42 insertions, 6 deletions
@@ -13,6 +13,13 @@ 2003-02-22 Ulrich Drepper <drepper@redhat.com> + * catgets/gencat.c (read_input_file): Collision between + auto-assigned numbers and user-defined nubmers is not fatal. + Handle it. + Patch by Michael M. Lampkin <michael.lampkin@ieee.org>. + + * catgets/gencat.c (main): Return 1 if messages have been printed. + * iconv/iconv_prog.c (main): Unify messages. * stdlib/strtod.c (INTERNAL): Remove bogus clearing of second word diff --git a/catgets/gencat.c b/catgets/gencat.c index ff535de..175f1ff 100644 --- a/catgets/gencat.c +++ b/catgets/gencat.c @@ -197,7 +197,7 @@ main (int argc, char *argv[]) if (result != NULL) write_out (result, output_name, header_name); - return EXIT_SUCCESS; + return error_message_count != 0; } @@ -613,11 +613,40 @@ this is the first definition")); { /* Oh, oh. There is already a message with this number in the message set. */ - error_at_line (0, 0, fname, start_line, - gettext ("duplicated message number")); - error_at_line (0, 0, runp->fname, runp->line, - gettext ("this is the first definition")); - message_number = 0; + if (runp->symbol == NULL) + { + /* The existing message had its number specified + by the user. Fatal collision type uh, oh. */ + error_at_line (0, 0, fname, start_line, + gettext ("duplicated message number")); + error_at_line (0, 0, runp->fname, runp->line, + gettext ("this is the first definition")); + message_number = 0; + } + else + { + /* Collision was with number auto-assigned to a + symbolic. Change existing symbolic number + and move to end the list (if not already there). */ + runp->number = ++current->current_set->last_message; + + if (runp->next != NULL) + { + struct message_list *endp; + + if (lastp == NULL) + current->current_set->messages=runp->next; + else + lastp->next=runp->next; + + endp = runp->next; + while (endp->next != NULL) + endp = endp->next; + + endp->next = runp; + runp->next = NULL; + } + } } ident = NULL; /* We don't have a symbol. */ |