summaryrefslogtreecommitdiff
path: root/catgets
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-02-22 23:15:39 +0000
committerUlrich Drepper <drepper@redhat.com>2003-02-22 23:15:39 +0000
commit819c56e76de80b99e1c04516597518f278820048 (patch)
tree866cbdeae6cd0ef56c9d3463a806ab6b5b97c863 /catgets
parentd5ca9483e82fb574fb3bff9858321c2cb2df1be7 (diff)
downloadglibc-819c56e76de80b99e1c04516597518f278820048.tar.gz
Update.
* 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.
Diffstat (limited to 'catgets')
-rw-r--r--catgets/gencat.c41
1 files changed, 35 insertions, 6 deletions
diff --git a/catgets/gencat.c b/catgets/gencat.c
index ff535dec1d..175f1ffd09 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. */