aboutsummaryrefslogtreecommitdiff
path: root/locale/programs
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-09-27 16:47:01 +0000
committerUlrich Drepper <drepper@redhat.com>1999-09-27 16:47:01 +0000
commit508d9ff8ac32ca869ed0f5b4139db1e9d877a462 (patch)
tree3fa7de15b60503b33afd51b19992d187266cbab4 /locale/programs
parentdf0997401f21bdf6bac06b362d8bbce92394c534 (diff)
downloadglibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.tar
glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.tar.gz
glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.tar.bz2
glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.zip
Update.
* locale/programs/ld-collate.c (insert_value): Add hack to not crash in incomplete collate implementation.
Diffstat (limited to 'locale/programs')
-rw-r--r--locale/programs/ld-collate.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 070c65a2d8..fcfdc817a0 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -423,7 +423,7 @@ insert_value (struct linereader *ldfile, struct token *arg,
/* Try to find the character in the charmap. */
seq = charmap_find_value (charmap, arg->val.str.startmb, arg->val.str.lenmb);
- if (wc == ILLEGAL_CHAR_VALUE)
+ if (wc == ILLEGAL_CHAR_VALUE && seq == NULL)
{
/* It's no character, so look through the collation elements and
symbol list. */
@@ -435,17 +435,29 @@ insert_value (struct linereader *ldfile, struct token *arg,
/* It's a collation symbol. */
struct symbol_t *sym = (struct symbol_t *) result;
elem = sym->order;
+
+ if (elem == NULL)
+ elem = sym->order = new_element (collate, arg->val.str.startmb,
+ arg->val.str.startwc);
}
else if (find_entry (&collate->elem_table, arg->val.str.startmb,
- arg->val.str.lenmb, &result) != 0)
+ arg->val.str.lenmb, &elem) != 0)
/* It's also no collation element. Therefore ignore it. */
return;
}
+ else
+ {
+ /* Otherwise the symbols stands for an character. Make sure it is
+ not already in the table. */
+
+ }
- /* XXX elem must be defined. */
+ if (elem == NULL)
+ /* XXX HACK HACK HACK */
+ return;
/* Test whether this element is not already in the list. */
- if (elem->next != NULL)
+ if (elem->next != NULL || elem->next == collate->cursor)
{
lr_error (ldfile, _("order for `%.*s' already defined at %s:%Z"),
arg->val.str.startmb, arg->val.str.lenmb,