aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--catgets/gencat.c41
2 files changed, 42 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 9390307..2acce14 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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. */