#include #include #include "local.h" size_t _DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state), struct _reent *r _AND wchar_t *pwcs _AND const char *s _AND size_t n _AND mbstate_t *state) { size_t ret = 0; char *t = (char *)s; int bytes; if (!pwcs) n = (size_t) 1; /* Value doesn't matter as long as it's not 0. */ while (n > 0) { bytes = __mbtowc (r, pwcs, t, MB_CUR_MAX, __locale_charset (), state); if (bytes < 0) { state->__count = 0; return -1; } else if (bytes == 0) break; t += bytes; ++ret; if (pwcs) { ++pwcs; --n; } } return ret; }