* locale/programs/ld-collate.c: Implement "copy" in LC_COLLATE.
This commit is contained in:
Ulrich Drepper 1999-12-11 07:25:44 +00:00
parent 6bfd664721
commit d980842cab
2 changed files with 23 additions and 6 deletions

View File

@ -1,5 +1,7 @@
1999-12-10 Ulrich Drepper <drepper@cygnus.com> 1999-12-10 Ulrich Drepper <drepper@cygnus.com>
* locale/programs/ld-collate.c: Implement "copy" in LC_COLLATE.
* locale/programs/ld-collate.c (collate_read): Add handling of * locale/programs/ld-collate.c (collate_read): Add handling of
reorder-after. reorder-after.

View File

@ -714,15 +714,19 @@ insert_value (struct linereader *ldfile, struct token *arg,
static void static void
collate_startup (struct linereader *ldfile, struct localedef_t *locale, collate_startup (struct linereader *ldfile, struct localedef_t *locale,
int ignore_content) struct localedef_t *copy_locale, int ignore_content)
{ {
if (!ignore_content) if (!ignore_content)
{ {
struct locale_collate_t *collate; struct locale_collate_t *collate;
if (copy_locale == NULL)
collate = locale->categories[LC_COLLATE].collate = collate = locale->categories[LC_COLLATE].collate =
(struct locale_collate_t *) xcalloc (1, (struct locale_collate_t *) xcalloc (1,
sizeof (struct locale_collate_t)); sizeof (struct locale_collate_t));
else
collate = locale->categories[LC_COLLATE].collate =
copy_locale->categories[LC_COLLATE].collate;
/* Init the various data structures. */ /* Init the various data structures. */
init_hash (&collate->elem_table, 100); init_hash (&collate->elem_table, 100);
@ -763,6 +767,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
enum token_t nowtok; enum token_t nowtok;
int state = 0; int state = 0;
int was_ellipsis = 0; int was_ellipsis = 0;
struct localedef_t *copy_locale = NULL;
/* Get the repertoire we have to use. */ /* Get the repertoire we have to use. */
if (repertoire_name != NULL) if (repertoire_name != NULL)
@ -786,6 +791,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
{ {
SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE"); SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
skip_category:
do do
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL);
while (now->tok != tok_eof && now->tok != tok_end); while (now->tok != tok_eof && now->tok != tok_end);
@ -805,7 +811,16 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
return; return;
} }
/* XXX Use the name */ /* Get the locale definition. */
copy_locale = find_locale (LC_COLLATE, now->val.str.startmb,
repertoire_name, charmap);
if ((copy_locale->avail & COLLATE_LOCALE) == 0)
{
/* Not yet loaded. So do it now. */
if (locfile_read (copy_locale, charmap) != 0)
goto skip_category;
}
lr_ignore_rest (ldfile, 1); lr_ignore_rest (ldfile, 1);
now = lr_token (ldfile, charmap, NULL); now = lr_token (ldfile, charmap, NULL);
@ -813,7 +828,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
} }
/* Prepare the data structures. */ /* Prepare the data structures. */
collate_startup (ldfile, result, ignore_content); collate_startup (ldfile, result, copy_locale, ignore_content);
collate = result->categories[LC_COLLATE].collate; collate = result->categories[LC_COLLATE].collate;
while (1) while (1)