aboutsummaryrefslogtreecommitdiff
path: root/locale
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-12-30 16:53:41 +0000
committerUlrich Drepper <drepper@redhat.com>1999-12-30 16:53:41 +0000
commita22cd12f5e3ea29c5c527efce55b50bc197d680b (patch)
treee15e35feeb1466f133d13b812290ebe6d734bda0 /locale
parent66ac0abe0341c5b3b1189c0ef9805ac931aecf6e (diff)
downloadglibc-a22cd12f5e3ea29c5c527efce55b50bc197d680b.zip
glibc-a22cd12f5e3ea29c5c527efce55b50bc197d680b.tar.gz
glibc-a22cd12f5e3ea29c5c527efce55b50bc197d680b.tar.bz2
Update.
1999-12-30 Ulrich Drepper <drepper@cygnus.com> * locale/programs/ld-collate.c (insert_value): Don't pass wide string to new_element if the wide char is not valid. (handle_ellipsis): Likewise. (collate_read): It's no problem if the string in the collating element definition cannot be represented as multibyte or wide char string.
Diffstat (limited to 'locale')
-rw-r--r--locale/programs/ld-collate.c59
1 files changed, 19 insertions, 40 deletions
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index ae132b4..65af8e6 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -876,7 +876,8 @@ insert_value (struct linereader *ldfile, struct token *arg,
/* We have to allocate an entry. */
elem = new_element (collate, seq != NULL ? seq->bytes : NULL,
- seq != NULL ? seq->nbytes : 0, wcs,
+ seq != NULL ? seq->nbytes : 0,
+ wc == ILLEGAL_CHAR_VALUE ? NULL : wcs,
arg->val.str.startmb, arg->val.str.lenmb, 1);
/* And add it to the table. */
@@ -1061,7 +1062,9 @@ sequence is not lower than that of the last character"), "LC_COLLATE");
uint32_t wcs[2] = { seq->ucs4, 0 };
/* We have to allocate an entry. */
- elem = new_element (collate, mbcnt, len, wcs, seq->name,
+ elem = new_element (collate, mbcnt, len,
+ seq->ucs4 == ILLEGAL_CHAR_VALUE
+ ? NULL : wcs, seq->name,
namelen, 1);
/* And add it to the table. */
@@ -1257,8 +1260,7 @@ order for `%.*s' already defined at %s:%zu"),
seq != NULL ? seq->bytes : NULL,
seq != NULL ? seq->nbytes : 0,
wc == ILLEGAL_CHAR_VALUE
- ? NULL : wcs,
- buf, lenfrom, 1);
+ ? NULL : wcs, buf, lenfrom, 1);
}
else
{
@@ -2561,45 +2563,22 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
if (arg->tok != tok_string)
goto err_label;
- if (!ignore_content)
+ if (!ignore_content && symbol != NULL)
{
- if (symbol == NULL)
- lr_error (ldfile, _("\
-%s: unknown character in collating element name"),
- "LC_COLLATE");
- if (arg->val.str.startmb == NULL)
- lr_error (ldfile, _("\
-%s: unknown character in collating element definition"),
- "LC_COLLATE");
- if (arg->val.str.startwc == NULL)
- lr_error (ldfile, _("\
-%s: unknown wide character in collating element definition"),
- "LC_COLLATE");
- else if (arg->val.str.lenwc < 2)
- lr_error (ldfile, _("\
-%s: substitution string in collating element definition must have at least two characters"),
- "LC_COLLATE");
-
- if (symbol != NULL)
- {
- /* The name is already defined. */
- if (check_duplicate (ldfile, collate, charmap,
- repertoire, symbol, symbol_len))
- goto col_elem_free;
+ /* The name is already defined. */
+ if (check_duplicate (ldfile, collate, charmap,
+ repertoire, symbol, symbol_len))
+ goto col_elem_free;
- if (insert_entry (&collate->elem_table,
- symbol, symbol_len,
- new_element (collate,
- arg->val.str.startmb,
- arg->val.str.lenmb - 1,
- arg->val.str.startwc,
- symbol, symbol_len, 0))
- < 0)
- lr_error (ldfile, _("\
+ if (insert_entry (&collate->elem_table,
+ symbol, symbol_len,
+ new_element (collate,
+ arg->val.str.startmb,
+ arg->val.str.lenmb - 1,
+ arg->val.str.startwc,
+ symbol, symbol_len, 0)) < 0)
+ lr_error (ldfile, _("\
error while adding collating element"));
- }
- else
- goto col_elem_free;
}
else
{