diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-10-02 15:54:15 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-10-02 15:54:15 +0000 |
commit | 80e069e0b276a729ba26997a8684e4746e974cc9 (patch) | |
tree | 63e907ba6c0cff3923933f714c5fd91ecde08b8b /locale/programs/ld-collate.c | |
parent | 95bddc0c3bb35a234635f05ccdd88a442ead9a65 (diff) | |
download | glibc-80e069e0b276a729ba26997a8684e4746e974cc9.zip glibc-80e069e0b276a729ba26997a8684e4746e974cc9.tar.gz glibc-80e069e0b276a729ba26997a8684e4746e974cc9.tar.bz2 |
[BZ #645]
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.
Diffstat (limited to 'locale/programs/ld-collate.c')
-rw-r--r-- | locale/programs/ld-collate.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 1332660..d6c3de0 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -1545,9 +1545,10 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap) or in none. */ for (i = 0; i < nrules; ++i) 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) - != (collate->sections->rules[i] & sort_position))) + != (collate->current_section->rules[i] & sort_position))) { WITH_CUR_LOCALE (error (0, 0, _("\ %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, right after collate->current_section. */ - if (collate->current_section == NULL) - collate->current_section = sp; - else + if (collate->current_section != NULL) { sp->next = collate->current_section->next; 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. */ |