wctrans.c.patch   [plain text]


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