wint_t btowc (int c) { mbstate_t mbs; int retval = 0; wchar_t pwc; unsigned char b; if (c == EOF) return WEOF; b = (unsigned char)c; /* Put mbs in initial state. */ memset (&mbs, '\0', sizeof (mbs)); _REENT_CHECK_MISC(_REENT); retval = __mbtowc (_REENT, &pwc, &b, 1, __locale_charset (), &mbs); if (retval != 0 && retval != 1) return WEOF; return (wint_t)pwc; }
int wctob (wint_t wc) { mbstate_t mbs; unsigned char pmb[MB_LEN_MAX]; if (wc == WEOF) return EOF; /* Put mbs in initial state. */ memset (&mbs, '\0', sizeof (mbs)); _REENT_CHECK_MISC(_REENT); return __wctomb (_REENT, (char *) pmb, wc, __locale_charset (), &mbs) == 1 ? (int) pmb[0] : EOF; }