about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--locale/langinfo.h14
-rw-r--r--locale/programs/ld-collate.c12
-rw-r--r--locale/programs/ld-ctype.c10
-rw-r--r--localedata/ChangeLog2
-rw-r--r--localedata/tst-langinfo.c2
-rw-r--r--stdio-common/vfprintf.c4
-rw-r--r--string/strcoll.c11
8 files changed, 58 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a5945bef9..fc9b8b6756 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2000-07-29  Ulrich Drepper  <drepper@redhat.com>
+
+	* 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  <kettenis@gnu.org>
+
+	* stdio-common/vfprintf.c: Move inclusion of _i18n_number.h
+	outside USE_IN_LIBIO block.
+
 2000-07-26  Philip Blundell  <philb@gnu.org>
 
 	* 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  <drepper@redhat.com>
 
+	* 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 <stdio.h>
@@ -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 <drepper@cygnus.com>, 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);