size_t n;
{
char const *e;
wchar_t wc;
int cnt = 0;
if (!pwcs || !s)
if (!s)
return (-1);
while (n-- > 0) {
for (;;) {
*pwcs = sgetrune(s, MB_LEN_MAX, &e);
wc = sgetrune(s, MB_LEN_MAX, &e);
if (*pwcs == _INVALID_RUNE)
if (wc == _INVALID_RUNE)
if (*pwcs++ == 0)
if (pwcs) {
if (n-- <= 0)
break;
*pwcs++ = wc;
}
if (wc == 0)
s = e;
++cnt;
char *e;
int cnt, nb;
if (!pwcs || !s || n > INT_MAX)
if (!pwcs || n > INT_MAX)
nb = n;
cnt = 0;
while (nb > 0) {
if (*pwcs == 0) {
*s = 0;
if (s)
if (!sputrune(*pwcs++, s, nb, &e))
if (!(nb = sputrune(*pwcs++, s, nb, &e)))
return (-1); /* encoding error */
if (!e) /* too long */
return (cnt);
cnt += e - s;
cnt += nb;
nb -= e - s;
n -= nb;
if (s) {
if (n <= 0)