1 --- fgetws.c.bsdnew 2009-11-30 16:15:32.000000000 -0800
2 +++ fgetws.c 2009-11-30 16:15:32.000000000 -0800
5 __FBSDID("$FreeBSD: src/lib/libc/stdio/fgetws.c,v 1.8 2009/11/25 04:45:45 wollman Exp $");
7 +#include "xlocale_private.h"
12 @@ -38,13 +40,18 @@ __FBSDID("$FreeBSD: src/lib/libc/stdio/f
16 -fgetws(wchar_t * __restrict ws, int n, FILE * __restrict fp)
17 +fgetws_l(wchar_t * __restrict ws, int n, FILE * __restrict fp, locale_t loc)
23 + struct __xlocale_st_runelocale *rl;
24 + size_t (*__mbsnrtowcs)(wchar_t * __restrict, const char ** __restrict, size_t, size_t, __darwin_mbstate_t * __restrict, locale_t);
26 + NORMALIZE_LOCALE(loc);
27 + rl = loc->__lc_ctype;
28 + __mbsnrtowcs = rl->__mbsnrtowcs;
32 @@ -58,11 +65,11 @@ fgetws(wchar_t * __restrict ws, int n, F
37 + src = (const char *)fp->_p;
38 nl = memchr(fp->_p, '\n', fp->_r);
39 nconv = __mbsnrtowcs(wsp, &src,
40 nl != NULL ? (nl - fp->_p + 1) : fp->_r,
41 - n - 1, &fp->_mbstate);
42 + n - 1, &fp->_mbstate, loc);
43 if (nconv == (size_t)-1)
44 /* Conversion error */
46 @@ -86,7 +93,7 @@ fgetws(wchar_t * __restrict ws, int n, F
50 - if (!__mbsinit(&fp->_mbstate))
51 + if (!rl->__mbsinit(&fp->_mbstate, loc))
52 /* Incomplete character */
55 @@ -98,3 +105,9 @@ error:
61 +fgetws(wchar_t * __restrict ws, int n, FILE * __restrict fp)
63 + return fgetws_l(ws, n, fp, __current_locale());