aboutsummaryrefslogtreecommitdiff
path: root/locale
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-08-23 07:44:35 +0000
committerUlrich Drepper <drepper@redhat.com>2000-08-23 07:44:35 +0000
commitc9f79e0878de5978b3468b7540302c52a12f3392 (patch)
tree3c11896a249ccf59f15925895ee27e71f7ad0ed2 /locale
parentfb4dfa0c81812d64197d65f8c0c7e57467e09280 (diff)
downloadglibc-c9f79e0878de5978b3468b7540302c52a12f3392.zip
glibc-c9f79e0878de5978b3468b7540302c52a12f3392.tar.gz
glibc-c9f79e0878de5978b3468b7540302c52a12f3392.tar.bz2
(ctype_read): Allow more than one default_missing character being specified, pick the first representable.
Diffstat (limited to 'locale')
-rw-r--r--locale/programs/ld-ctype.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
index f411eac..8904bca 100644
--- a/locale/programs/ld-ctype.c
+++ b/locale/programs/ld-ctype.c
@@ -2688,29 +2688,51 @@ with character code range values one must use the absolute ellipsis `...'"));
{
uint32_t *wstr;
- /* We expect a single character or string as the
- argument. */
- now = lr_token (ldfile, charmap, NULL);
- wstr = read_widestring (ldfile, now, charmap, repertoire);
-
- if (wstr != NULL)
+ while (1)
{
- if (ctype->default_missing != NULL)
+ /* We expect a single character or string as the
+ argument. */
+ now = lr_token (ldfile, charmap, NULL);
+ wstr = read_widestring (ldfile, now, charmap,
+ repertoire);
+
+ if (wstr != NULL)
{
- lr_error (ldfile, _("\
+ if (ctype->default_missing != NULL)
+ {
+ lr_error (ldfile, _("\
%s: duplicate `default_missing' definition"), "LC_CTYPE");
- error_at_line (0, 0, ctype->default_missing_file,
- ctype->default_missing_lineno,
- _("previous definition was here"));
+ error_at_line (0, 0, ctype->default_missing_file,
+ ctype->default_missing_lineno,
+ _("\
+previous definition was here"));
+ }
+ else
+ {
+ ctype->default_missing = wstr;
+ ctype->default_missing_file = ldfile->fname;
+ ctype->default_missing_lineno = ldfile->lineno;
+ }
+ lr_ignore_rest (ldfile, 1);
+ break;
}
- else
+ else if (wstr == (uint32_t *) -1l)
+ /* This was an syntax error. */
+ break;
+
+ /* Maybe there is another replacement we can use. */
+ now = lr_token (ldfile, charmap, NULL);
+ if (now->tok == tok_eol || now->tok == tok_eof)
{
- ctype->default_missing = wstr;
- ctype->default_missing_file = ldfile->fname;
- ctype->default_missing_lineno = ldfile->lineno;
+ /* Nothing found. We tell the user. */
+ lr_error (ldfile, _("\
+%s: no representable `default_missing' definition found"), LC_CTYPE);
+ break;
}
+ if (now->tok != tok_semicolon)
+ goto translit_syntax;
}
- lr_ignore_rest (ldfile, 1);
+
continue;
}
else if (now->tok == tok_translit_ignore)