From db76d9433c8b71eb3677ff5ca5b94e084e73e468 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 25 Jan 2000 01:00:37 +0000 Subject: Update. * locale/programs/ld-collate.c (collate_output): Also handle IGNOREd characters in the simple way when generating the multibyte table. * locale/programs/ld-ctype.c (allocate_arrays): Move codeset_name handling to ... (ctype_finish): ...here. Check for missing codeset name. --- locale/programs/ld-collate.c | 15 +++++++++++++-- locale/programs/ld-ctype.c | 16 +++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) (limited to 'locale/programs') diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 226bf23b4a..eb0c55ee63 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -2000,7 +2000,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, for (ch = 1; ch < 256; ++ch) if (collate->mbheads[ch]->mbnext == NULL - && collate->mbheads[ch]->nmbs == 1) + && collate->mbheads[ch]->nmbs <= 1) { tablemb[ch] = output_weight (&weightpool, collate, collate->mbheads[ch]); @@ -2025,6 +2025,9 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, struct element_t *runp = collate->mbheads[ch]; struct element_t *lastp; + assert ((obstack_object_size (&extrapool) + & (__alignof__ (int32_t) - 1)) == 0); + tablemb[ch] = -obstack_object_size (&extrapool); do @@ -2081,6 +2084,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, /* Now walk backward from here to the beginning. */ curp = runp; + assert (runp->nmbs <= 256); obstack_1grow_fast (&extrapool, curp->nmbs - 1); for (i = 1; i < curp->nmbs; ++i) obstack_1grow_fast (&extrapool, curp->mbs[i]); @@ -2125,13 +2129,17 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, added = ((sizeof (int32_t) + 1 + runp->nmbs - 1 + __alignof__ (int32_t) - 1) & ~(__alignof__ (int32_t) - 1)); + assert ((obstack_object_size (&extrapool) + & (__alignof__ (int32_t) - 1)) == 0); obstack_make_room (&extrapool, added); if (sizeof (int32_t) == sizeof (int)) obstack_int_grow_fast (&extrapool, weightidx); else obstack_grow (&extrapool, &weightidx, sizeof (int32_t)); + assert (runp->nmbs <= 256); obstack_1grow_fast (&extrapool, runp->nmbs - 1); + for (i = 1; i < runp->nmbs; ++i) obstack_1grow_fast (&extrapool, runp->mbs[i]); } @@ -2147,11 +2155,14 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, } while (runp != NULL); + assert ((obstack_object_size (&extrapool) + & (__alignof__ (int32_t) - 1)) == 0); + /* If the final entry in the list is not a single character we add an UNDEFINED entry here. */ if (lastp->nmbs != 1) { - int added = ((sizeof (int32_t) + 1 + 1 + __alignof__ (int32_t)) + int added = ((sizeof (int32_t) + 1 + 1 + __alignof__ (int32_t) - 1) & ~(__alignof__ (int32_t) - 1)); obstack_make_room (&extrapool, added); diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c index 3ffe9ea5bd..7b2f7c113d 100644 --- a/locale/programs/ld-ctype.c +++ b/locale/programs/ld-ctype.c @@ -379,6 +379,17 @@ ctype_finish (struct localedef_t *locale, struct charmap_t *charmap) ctype->repertoire = repertoire_read (repertoire_name); } + /* We need the name of the currently used 8-bit character set to + make correct conversion between this 8-bit representation and the + ISO 10646 character set used internally for wide characters. */ + ctype->codeset_name = charmap->code_set_name; + if (ctype->codeset_name == NULL) + { + if (! be_quiet) + error (0, 0, "no character set name specified in charmap"); + ctype->codeset_name = "//UNKNOWN//"; + } + /* Set default value for classes not specified. */ set_class_defaults (ctype, charmap, ctype->repertoire); @@ -3304,11 +3315,6 @@ Computing table size for character classes might take a while..."), /* Set MB_CUR_MAX. */ ctype->mb_cur_max = charmap->mb_cur_max; - /* We need the name of the currently used 8-bit character set to - make correct conversion between this 8-bit representation and the - ISO 10646 character set used internally for wide characters. */ - ctype->codeset_name = charmap->code_set_name; - /* Now determine the table for the transliteration information. XXX It is not yet clear to me whether it is worth implementing a -- cgit v1.2.3