1 /* mbrtowc( wchar_t * pwc, const char * s, size_t n, mbstate_t * ps )
3 This file is part of the Public Domain C Library (PDCLib).
4 Permission is granted to use, modify, and / or redistribute at will.
12 #include "_PDCLIB_encoding.h"
13 #include "_PDCLIB_locale.h"
15 static size_t mbrtowc_l(
16 wchar_t *restrict pwc,
17 const char *restrict s,
19 mbstate_t *restrict ps,
30 if(ps->_PendState == _PendPrefix) {
31 res = _PDCLIB_mbrtocwc_l(pwc, &ps->_PendChar, 1, ps, l);
34 // Converted the NUL character
35 ps->_PendState = _PendClear;
39 // Successful conversion
44 // Illegal sequence. mbrtocwc has already set errno.
48 assert(!"Codec had buffered two characters");
53 // Incomplete character, continue
59 res = _PDCLIB_mbrtocwc_l(pwc, s, n, ps, l);
62 // Converted entirely from internal state
64 ps->_PendState = _PendPrefix;
72 wchar_t *restrict pwc,
73 const char *restrict s,
75 mbstate_t *restrict ps
79 return mbrtowc_l(pwc, s, n, ps ? ps : &st, _PDCLIB_threadlocale());
85 #include "_PDCLIB_test.h"
89 TESTCASE( NO_TESTDRIVER );