--- wctrans.c.orig 2004-11-25 11:38:20.000000000 -0800 +++ wctrans.c 2005-02-19 14:30:32.000000000 -0800 @@ -27,6 +27,8 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD: src/lib/libc/locale/wctrans.c,v 1.3 2003/11/01 08:20:58 tjr Exp $"); +#include "xlocale_private.h" + #include <errno.h> #include <string.h> #include <wctype.h> @@ -38,15 +40,16 @@ }; wint_t -towctrans(wint_t wc, wctrans_t desc) +towctrans_l(wint_t wc, wctrans_t desc, locale_t loc) { + NORMALIZE_LOCALE(loc); switch (desc) { case _WCT_TOLOWER: - wc = towlower(wc); + wc = towlower_l(wc, loc); break; case _WCT_TOUPPER: - wc = towupper(wc); + wc = towupper_l(wc, loc); break; case _WCT_ERROR: default: @@ -57,6 +60,12 @@ return (wc); } +wint_t +towctrans(wint_t wc, wctrans_t desc) +{ + return towctrans_l(wc, desc, __current_locale()); +} + wctrans_t wctrans(const char *charclass) { @@ -78,3 +87,14 @@ errno = EINVAL; return (ccls[i].trans); } + +/* + * The extended locale version just calls the regular version. If there + * is ever support for arbitrary per-locale translations, this need to + * be modified. + */ +wctrans_t +wctrans_l(const char *charclass, locale_t loc) +{ + return wctrans(charclass); +}