summaryrefslogtreecommitdiff
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);
+ }
}