diff --git a/ChangeLog b/ChangeLog index 1a5945bef9..fc9b8b6756 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2000-07-29 Ulrich Drepper + + * locale/langinfo.h: Add entries for extra tables in CTYPE data. + * locale/programs/ld-ctype.c: Adjust for this. + + * locale/programs/ld-collate.c: Add more alignment checks. + * locale/string/strcoll.c: Likewise. + +2000-07-30 Mark Kettenis + + * stdio-common/vfprintf.c: Move inclusion of _i18n_number.h + outside USE_IN_LIBIO block. + 2000-07-26 Philip Blundell * sysdeps/arm/dl-machine.h (fix_bad_pc24): New function. diff --git a/locale/langinfo.h b/locale/langinfo.h index 0062cda908..3db293bbda 100644 --- a/locale/langinfo.h +++ b/locale/langinfo.h @@ -327,6 +327,20 @@ enum _NL_CTYPE_TRANSLIT_DEFAULT_MISSING, _NL_CTYPE_TRANSLIT_IGNORE_LEN, _NL_CTYPE_TRANSLIT_IGNORE, + _NL_CTYPE_EXTRA_MAP_1, + _NL_CTYPE_EXTRA_MAP_2, + _NL_CTYPE_EXTRA_MAP_3, + _NL_CTYPE_EXTRA_MAP_4, + _NL_CTYPE_EXTRA_MAP_5, + _NL_CTYPE_EXTRA_MAP_6, + _NL_CTYPE_EXTRA_MAP_7, + _NL_CTYPE_EXTRA_MAP_8, + _NL_CTYPE_EXTRA_MAP_9, + _NL_CTYPE_EXTRA_MAP_10, + _NL_CTYPE_EXTRA_MAP_11, + _NL_CTYPE_EXTRA_MAP_12, + _NL_CTYPE_EXTRA_MAP_13, + _NL_CTYPE_EXTRA_MAP_14, _NL_NUM_LC_CTYPE, /* LC_MONETARY category: formatting of monetary quantities. diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 125356dadb..95c4dd4dfa 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -2300,14 +2300,16 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, more information here. */ assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_HASH_SIZE)); iov[2 + cnt].iov_base = &collate->plane_size; - iov[2 + cnt].iov_len = sizeof (collate->plane_size); + iov[2 + cnt].iov_len = sizeof (uint32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_HASH_LAYERS)); iov[2 + cnt].iov_base = &collate->plane_cnt; iov[2 + cnt].iov_len = sizeof (collate->plane_cnt); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; + assert (idx[cnt] % 4 == 0); ++cnt; /* Construct a table with the names. The size of the table is the same @@ -2324,6 +2326,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = names; iov[2 + cnt].iov_len = table_size * sizeof (uint32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; + assert (idx[cnt] % 4 == 0); ++cnt; /* Since we are using the sign of an integer to mark indirection the @@ -2511,6 +2514,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_len = table_size * sizeof (uint32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_WEIGHTWC)); @@ -2518,6 +2522,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = obstack_finish (&weightpool); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_EXTRAWC)); @@ -2526,6 +2531,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_INDIRECTWC)); @@ -2533,6 +2539,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = obstack_finish (&indirectpool); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); + assert (idx[cnt] % 4 == 0); ++cnt; @@ -2633,12 +2640,14 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = &elem_size; iov[2 + cnt].iov_len = sizeof (int32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_TABLEMB)); iov[2 + cnt].iov_base = elem_table; iov[2 + cnt].iov_len = elem_size * 2 * sizeof (int32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_EXTRAMB)); @@ -2656,6 +2665,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_COLLSEQWC)); iov[2 + cnt].iov_base = collate->wcseqorder; iov[2 + cnt].iov_len = table_size * sizeof (uint32_t); + assert (idx[cnt] % 4 == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE)); diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c index 1c1c492cb0..f3edd6cbc0 100644 --- a/locale/programs/ld-ctype.c +++ b/locale/programs/ld-ctype.c @@ -838,7 +838,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, { static const char nulbytes[4] = { 0, 0, 0, 0 }; struct locale_ctype_t *ctype = locale->categories[LC_CTYPE].ctype; - const size_t nelems = (_NL_ITEM_INDEX (_NL_NUM_LC_CTYPE) + const size_t nelems = (_NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1) + (oldstyle_tables ? (ctype->map_collection_nr - 2) : (ctype->nr_charclass + ctype->map_collection_nr))); @@ -866,7 +866,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, for (elem = 0; elem < nelems; ++elem) { - if (elem < _NL_ITEM_INDEX (_NL_NUM_LC_CTYPE)) + if (elem < _NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1)) switch (elem) { #define CTYPE_EMPTY(name) \ @@ -1155,7 +1155,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, /* Handle extra maps. */ if (oldstyle_tables) { - size_t nr = (elem - _NL_ITEM_INDEX (_NL_NUM_LC_CTYPE)) + 2; + size_t nr = (elem - _NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1)) + 2; iov[2 + elem + offset].iov_base = ctype->map32[nr]; iov[2 + elem + offset].iov_len = ((ctype->plane_size @@ -1166,7 +1166,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, } else { - size_t nr = elem - _NL_ITEM_INDEX (_NL_NUM_LC_CTYPE); + size_t nr = elem - _NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1); if (nr < ctype->nr_charclass) { iov[2 + elem + offset] = ctype->class_3level[nr]; @@ -4240,7 +4240,7 @@ Computing table size for character classes might take a while..."), } else { - ctype->class_offset = _NL_ITEM_INDEX (_NL_NUM_LC_CTYPE); + ctype->class_offset = _NL_ITEM_INDEX (_NL_CTYPE_EXTRA_MAP_1); ctype->map_offset = ctype->class_offset + ctype->nr_charclass; } diff --git a/localedata/ChangeLog b/localedata/ChangeLog index 6a7a476ce7..353191b980 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,5 +1,7 @@ 2000-07-29 Ulrich Drepper + * tst-langinfo.c (main): Fix esacape sequence handling. + * charmaps/EUC-TW: New file. * tst-digits.c: Add tests for wprintf. diff --git a/localedata/tst-langinfo.c b/localedata/tst-langinfo.c index b1179302d9..6d7250db9b 100644 --- a/localedata/tst-langinfo.c +++ b/localedata/tst-langinfo.c @@ -213,7 +213,7 @@ main (void) ++rp; if (*rp == '\0') break; - if (*rp >= '\0' && *rp <= 'p') + if (*rp >= '0' && *rp <= '9') { int val = *rp - '0'; if (rp[1] >= '0' && rp[1] <= '9') diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index 91179564fd..c67af60988 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -102,8 +102,6 @@ # undef EOF # define EOF WEOF # endif - -# include "_i18n_number.h" #else /* ! USE_IN_LIBIO */ /* This code is for use in the GNU C library. */ # include @@ -155,6 +153,8 @@ extern void __flockfile (FILE *); extern void __funlockfile (FILE *); #endif /* USE_IN_LIBIO */ +#include "_i18n_number.h" + /* Include the shared code for parsing the format string. */ #include "printf-parse.h" diff --git a/string/strcoll.c b/string/strcoll.c index 32d9124421..0df5752e50 100644 --- a/string/strcoll.c +++ b/string/strcoll.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Ulrich Drepper , 1995. @@ -143,6 +143,15 @@ STRCOLL (s1, s2, l) #endif use_malloc = 0; + assert (((uintptr_t) table) % sizeof (table[0]) == 0); + assert (((uintptr_t) weights) % sizeof (weights[0]) == 0); + assert (((uintptr_t) weights) % sizeof (weights[0]) == 0); + assert (((uintptr_t) extra) % sizeof (extra[0]) == 0); + assert (((uintptr_t) indirect) % sizeof (indirect[0]) == 0); +#ifdef WIDE_CHAR_VERSION + assert (((uintptr_t) names) % sizeof (names[0]) == 0); +#endif + /* We need this a few times. */ s1len = STRLEN (s1); s2len = STRLEN (s2);