2007-10-02  Ulrich Drepper  <drepper@redhat.com>
	[BZ #645]
	* locale/programs/ld-collate.c (collate_finish): Compare against last
	used section which is known to have rules defined.
	(collate_read): After order_start, correctly record order of sections
	and queue sections up.
This commit is contained in:
Ulrich Drepper 2007-10-02 15:54:15 +00:00
parent 95bddc0c3b
commit 80e069e0b2
2 changed files with 17 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2007-10-02 Ulrich Drepper <drepper@redhat.com>
[BZ #645]
* locale/programs/ld-collate.c (collate_finish): Compare against last
used section which is known to have rules defined.
(collate_read): After order_start, correctly record order of sections
and queue sections up.
2007-10-01 Ulrich Drepper <drepper@redhat.com> 2007-10-01 Ulrich Drepper <drepper@redhat.com>
[BZ #5071] [BZ #5071]

View File

@ -1545,9 +1545,10 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
or in none. */ or in none. */
for (i = 0; i < nrules; ++i) for (i = 0; i < nrules; ++i)
for (sect = collate->sections; sect != NULL; sect = sect->next) for (sect = collate->sections; sect != NULL; sect = sect->next)
if (sect->rules != NULL if (sect != collate->current_section
&& sect->rules != NULL
&& ((sect->rules[i] & sort_position) && ((sect->rules[i] & sort_position)
!= (collate->sections->rules[i] & sort_position))) != (collate->current_section->rules[i] & sort_position)))
{ {
WITH_CUR_LOCALE (error (0, 0, _("\ WITH_CUR_LOCALE (error (0, 0, _("\
%s: `position' must be used for a specific level in all sections or none"), %s: `position' must be used for a specific level in all sections or none"),
@ -3214,13 +3215,16 @@ error while adding equivalent collating symbol"));
{ {
/* Insert sp in the collate->sections list, /* Insert sp in the collate->sections list,
right after collate->current_section. */ right after collate->current_section. */
if (collate->current_section == NULL) if (collate->current_section != NULL)
collate->current_section = sp;
else
{ {
sp->next = collate->current_section->next; sp->next = collate->current_section->next;
collate->current_section->next = sp; collate->current_section->next = sp;
} }
else if (collate->sections == NULL)
/* This is the first section to be defined. */
collate->sections = sp;
collate->current_section = sp;
} }
/* Next should come the end of the line or a semicolon. */ /* Next should come the end of the line or a semicolon. */