int mbtowc(wchar_t *pwc, const char *s, size_t n) { #ifdef MB_CAPABLE static int state; return _mbtowc_r(_REENT, pwc, s, n, &state); #else /* not MB_CAPABLE */ if (s == NULL) return 0; if (n == 0) return -1; if (pwc) *pwc = (wchar_t)*s; return (*s != '\0'); #endif /* not MB_CAPABLE */ }
wint_t btowc (int c) { mbstate_t mbs; int retval = 0; wchar_t pwc; unsigned char b; b = (unsigned char)c; /* Put mbs in initial state. */ memset (&mbs, '\0', sizeof (mbs)); _REENT_CHECK_MISC(_REENT); retval = _mbtowc_r (_REENT, &pwc, &b, 1, &mbs); if (c == EOF || retval != 1) return WEOF; else return (wint_t)pwc; }
#include <newlib.h> #include <stdlib.h> #include <wchar.h> int _DEFUN (mblen, (s, n), const char *s _AND size_t n) { #ifdef _MB_CAPABLE int retval = 0; mbstate_t *state; _REENT_CHECK_MISC(_REENT); state = &(_REENT_MBLEN_STATE(_REENT)); retval = _mbtowc_r (_REENT, NULL, s, n, state); if (retval < 0) { state->__count = 0; return -1; } else return retval; #else /* not _MB_CAPABLE */ if (s == NULL || *s == '\0') return 0; if (n == 0) return -1; return 1; #endif /* not _MB_CAPABLE */
<<_mblen_r>> requires no supporting OS subroutines. */ #include <stdlib.h> #include <wchar.h> int _DEFUN (_mblen_r, (r, s, n, state), struct _reent *r _AND const char *s _AND size_t n _AND mbstate_t *state) { #ifdef MB_CAPABLE int retval; retval = _mbtowc_r (r, NULL, s, n, state); if (retval < 0) { state->__count = 0; return -1; } return retval; #else /* not MB_CAPABLE */ if (s == NULL || *s == '\0') return 0; if (n == 0) return -1; return 1; #endif /* not MB_CAPABLE */