1 #include "stdio_impl.h"
2 #include "locale_impl.h"
6 static wint_t __fgetwc_unlocked_internal(FILE *f
)
14 /* Convert character from buffer if possible */
15 if (f
->rpos
< f
->rend
) {
16 l
= mbrtowc(&wc
, (void *)f
->rpos
, f
->rend
- f
->rpos
, &st
);
18 f
->rpos
+= l
+ !l
; /* l==0 means 1 byte, null */
27 /* Convert character byte-by-byte */
29 b
= c
= getc_unlocked(f
);
31 if (!mbsinit(&st
)) errno
= EILSEQ
;
34 l
= mbrtowc(&wc
, (void *)&b
, 1, &st
);
35 if (l
== -1) return WEOF
;
41 wint_t __fgetwc_unlocked(FILE *f
)
43 locale_t
*ploc
= &CURRENT_LOCALE
, loc
= *ploc
;
44 if (f
->mode
<= 0) fwide(f
, 1);
46 wchar_t wc
= __fgetwc_unlocked_internal(f
);
51 wint_t fgetwc(FILE *f
)
55 c
= __fgetwc_unlocked(f
);
60 weak_alias(__fgetwc_unlocked
, fgetwc_unlocked
);
61 weak_alias(__fgetwc_unlocked
, getwc_unlocked
);