summary refs log tree commit diff
path: root/wctype/wcextra_l.c
diff options
context:
space:
mode:
Diffstat (limited to 'wctype/wcextra_l.c')
-rw-r--r--wctype/wcextra_l.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/wctype/wcextra_l.c b/wctype/wcextra_l.c
index d326327954..8fc9c2733d 100644
--- a/wctype/wcextra_l.c
+++ b/wctype/wcextra_l.c
@@ -1,5 +1,5 @@
 /* Additional non standardized wide character classification functions.
-   Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -24,20 +24,32 @@
 
 #define USE_IN_EXTENDED_LOCALE_MODEL	1
 #include "cname-lookup.h"
+#include "wchar-lookup.h"
 
 
 int
 (__iswblank_l) (wint_t wc, __locale_t locale)
 {
-  const unsigned int *class32_b;
-  size_t idx;
-
-  idx = cname_lookup (wc, locale);
-  if (idx == ~((size_t) 0))
-    return 0;
-
-  class32_b = (uint32_t *)
-    locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS32)].string;
-
-  return class32_b[idx] & _ISwblank;
+  if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0)
+    {
+      /* Old locale format.  */
+      const uint32_t *class32_b;
+      size_t idx;
+
+      idx = cname_lookup (wc, locale);
+      if (idx == ~((size_t) 0))
+	return 0;
+
+      class32_b = (uint32_t *)
+	locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS32)].string;
+
+      return class32_b[idx] & _ISwbit (__ISwblank);
+    }
+  else
+    {
+      /* New locale format.  */
+      size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_OFFSET)].word + __ISwblank;
+      const char *desc = locale->__locales[LC_CTYPE]->values[i].string;
+      return wctype_table_lookup (desc, wc);
+    }
 }