summaryrefslogtreecommitdiff
path: root/wctype/towctrans_l.c
diff options
context:
space:
mode:
Diffstat (limited to 'wctype/towctrans_l.c')
-rw-r--r--wctype/towctrans_l.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/wctype/towctrans_l.c b/wctype/towctrans_l.c
index 09596b9685..e3624441ca 100644
--- a/wctype/towctrans_l.c
+++ b/wctype/towctrans_l.c
@@ -1,5 +1,5 @@
/* Map wide character using given mapping and locale.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -22,16 +22,31 @@
/* Define the lookup function. */
#define USE_IN_EXTENDED_LOCALE_MODEL 1
#include "cname-lookup.h"
+#include "wchar-lookup.h"
wint_t
__towctrans_l (wint_t wc, wctrans_t desc, __locale_t locale)
{
- size_t idx;
-
- idx = cname_lookup (wc, locale);
- if (idx == ~((size_t) 0))
- /* Character is not known. Default action is to simply return it. */
+ /* If the user passes in an invalid DESC valid (the one returned from
+ `__wctrans_l' in case of an error) simply return the value. */
+ if (desc == (wctrans_t) 0)
return wc;
- return (wint_t) desc[idx];
+ if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0)
+ {
+ /* Old locale format. */
+ size_t idx;
+
+ idx = cname_lookup (wc, locale);
+ if (idx == ~((size_t) 0))
+ /* Character is not known. Default action is to simply return it. */
+ return wc;
+
+ return (wint_t) desc[idx];
+ }
+ else
+ {
+ /* New locale format. */
+ return wctrans_table_lookup ((const char *) desc, wc);
+ }
}