size_t _mbrtowc_r (struct _reent *ptr, wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { int retval = 0; #ifdef _MB_CAPABLE if (ps == NULL) { _REENT_CHECK_MISC(ptr); ps = &(_REENT_MBRTOWC_STATE(ptr)); } #endif if (s == NULL) retval = __MBTOWC (ptr, NULL, "", 1, ps); else retval = __MBTOWC (ptr, pwc, s, n, ps); if (retval == -1) { ps->__count = 0; __errno_r(ptr) = EILSEQ; return (size_t)(-1); } else return (size_t)retval; }
#include <wchar.h> #include "local.h" int _DEFUN (mblen, (s, n), const char *s _AND size_t n) { #ifdef _MB_CAPABLE int retval = 0; struct _reent *reent = _REENT; mbstate_t *state; _REENT_CHECK_MISC(reent); state = &(_REENT_MBLEN_STATE(reent)); retval = __MBTOWC (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 */
#include "local.h" int mbtowc (wchar_t *__restrict pwc, const char *__restrict s, size_t n) { #ifdef _MB_CAPABLE int retval = 0; struct _reent *reent = _REENT; mbstate_t *ps; _REENT_CHECK_MISC(reent); ps = &(_REENT_MBTOWC_STATE(reent)); retval = __MBTOWC (reent, pwc, s, n, ps); if (retval < 0) { ps->__count = 0; return -1; } return retval; #else /* not _MB_CAPABLE */ if (s == NULL) return 0; if (n == 0) return -1; if (pwc) *pwc = (wchar_t) *s; return (*s != '\0');