utf8.c.patch   [plain text]


--- utf8.c.orig	Thu Nov 25 11:38:20 2004
+++ utf8.c	Fri Feb 18 15:40:44 2005
@@ -27,6 +27,8 @@
 #include <sys/param.h>
 __FBSDID("$FreeBSD: src/lib/libc/locale/utf8.c,v 1.11 2004/07/27 06:29:48 tjr Exp $");
 
+#include "xlocale_private.h"
+
 #include <errno.h>
 #include <limits.h>
 #include <runetype.h>
@@ -35,14 +37,16 @@
 #include <wchar.h>
 #include "mblocal.h"
 
-size_t	_UTF8_mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
-	    mbstate_t * __restrict);
-int	_UTF8_mbsinit(const mbstate_t *);
-size_t	_UTF8_mbsnrtowcs(wchar_t * __restrict, const char ** __restrict,
-	    size_t, size_t, mbstate_t * __restrict);
-size_t	_UTF8_wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
-size_t	_UTF8_wcsnrtombs(char * __restrict, const wchar_t ** __restrict,
-	    size_t, size_t, mbstate_t * __restrict);
+#define UTF8_MB_CUR_MAX		6
+
+static size_t	_UTF8_mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
+	    mbstate_t * __restrict, locale_t);
+static int	_UTF8_mbsinit(const mbstate_t *, locale_t);
+static size_t	_UTF8_mbsnrtowcs(wchar_t * __restrict, const char ** __restrict,
+	    size_t, size_t, mbstate_t * __restrict, locale_t);
+static size_t	_UTF8_wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict, locale_t);
+static size_t	_UTF8_wcsnrtombs(char * __restrict, const wchar_t ** __restrict,
+	    size_t, size_t, mbstate_t * __restrict, locale_t);
 
 typedef struct {
 	wchar_t	ch;
@@ -50,31 +54,30 @@
 	wchar_t	lbound;
 } _UTF8State;
 
-int
-_UTF8_init(_RuneLocale *rl)
+__private_extern__ int
+_UTF8_init(struct __xlocale_st_runelocale *xrl)
 {
 
-	__mbrtowc = _UTF8_mbrtowc;
-	__wcrtomb = _UTF8_wcrtomb;
-	__mbsinit = _UTF8_mbsinit;
-	__mbsnrtowcs = _UTF8_mbsnrtowcs;
-	__wcsnrtombs = _UTF8_wcsnrtombs;
-	_CurrentRuneLocale = rl;
-	__mb_cur_max = 6;
+	xrl->__mbrtowc = _UTF8_mbrtowc;
+	xrl->__wcrtomb = _UTF8_wcrtomb;
+	xrl->__mbsinit = _UTF8_mbsinit;
+	xrl->__mbsnrtowcs = _UTF8_mbsnrtowcs;
+	xrl->__wcsnrtombs = _UTF8_wcsnrtombs;
+	xrl->__mb_cur_max = UTF8_MB_CUR_MAX;
 
 	return (0);
 }
 
-int
-_UTF8_mbsinit(const mbstate_t *ps)
+static int
+_UTF8_mbsinit(const mbstate_t *ps, locale_t loc)
 {
 
 	return (ps == NULL || ((const _UTF8State *)ps)->want == 0);
 }
 
-size_t
+static size_t
 _UTF8_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n,
-    mbstate_t * __restrict ps)
+    mbstate_t * __restrict ps, locale_t loc)
 {
 	_UTF8State *us;
 	int ch, i, mask, want;
@@ -194,9 +197,9 @@
 	return (wch == L'\0' ? 0 : want);
 }
 
-size_t
+static size_t
 _UTF8_mbsnrtowcs(wchar_t * __restrict dst, const char ** __restrict src,
-    size_t nms, size_t len, mbstate_t * __restrict ps)
+    size_t nms, size_t len, mbstate_t * __restrict ps, locale_t loc)
 {
 	_UTF8State *us;
 	const char *s;
@@ -226,7 +229,7 @@
 				 * excluding NUL.
 				 */
 				nb = 1;
-			else if ((nb = _UTF8_mbrtowc(&wc, s, nms, ps)) ==
+			else if ((nb = _UTF8_mbrtowc(&wc, s, nms, ps, loc)) ==
 			    (size_t)-1)
 				/* Invalid sequence - mbrtowc() sets errno. */
 				return ((size_t)-1);
@@ -256,7 +259,7 @@
 			 */
 			*dst = (wchar_t)*s;
 			nb = 1;
-		} else if ((nb = _UTF8_mbrtowc(dst, s, nms, ps)) ==
+		} else if ((nb = _UTF8_mbrtowc(dst, s, nms, ps, loc)) ==
 		    (size_t)-1) {
 			*src = s;
 			return ((size_t)-1);
@@ -276,8 +279,8 @@
 	return (nchr);
 }
 
-size_t
-_UTF8_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps)
+static size_t
+_UTF8_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps, locale_t loc)
 {
 	_UTF8State *us;
 	unsigned char lead;
@@ -344,9 +347,9 @@
 	return (len);
 }
 
-size_t
+static size_t
 _UTF8_wcsnrtombs(char * __restrict dst, const wchar_t ** __restrict src,
-    size_t nwc, size_t len, mbstate_t * __restrict ps)
+    size_t nwc, size_t len, mbstate_t * __restrict ps, locale_t loc)
 {
 	_UTF8State *us;
 	char buf[MB_LEN_MAX];
@@ -369,7 +372,7 @@
 			if (0 <= *s && *s < 0x80)
 				/* Fast path for plain ASCII characters. */
 				nb = 1;
-			else if ((nb = _UTF8_wcrtomb(buf, *s, ps)) ==
+			else if ((nb = _UTF8_wcrtomb(buf, *s, ps, loc)) ==
 			    (size_t)-1)
 				/* Invalid character - wcrtomb() sets errno. */
 				return ((size_t)-1);
@@ -386,9 +389,9 @@
 			/* Fast path for plain ASCII characters. */
 			nb = 1;
 			*dst = *s;
-		} else if (len > (size_t)MB_CUR_MAX) {
+		} else if (len > (size_t)UTF8_MB_CUR_MAX) {
 			/* Enough space to translate in-place. */
-			if ((nb = (int)_UTF8_wcrtomb(dst, *s, ps)) < 0) {
+			if ((nb = (int)_UTF8_wcrtomb(dst, *s, ps, loc)) < 0) {
 				*src = s;
 				return ((size_t)-1);
 			}
@@ -396,7 +399,7 @@
 			/*
 			 * May not be enough space; use temp. buffer.
 			 */
-			if ((nb = (int)_UTF8_wcrtomb(buf, *s, ps)) < 0) {
+			if ((nb = (int)_UTF8_wcrtomb(buf, *s, ps, loc)) < 0) {
 				*src = s;
 				return ((size_t)-1);
 			}