#include #include #include size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, size_t n, mbstate_t *restrict st) { const wchar_t *ws = *wcs; size_t cnt = 0; if (!dst) n=0; while (ws && wn) { char tmp[MB_LEN_MAX]; size_t l = wcrtomb(nn) break; memcpy(dst, tmp, l); } dst += l; n -= l; } if (!*ws) { ws = 0; break; } ws++; wn--; cnt += l; } if (dst) *wcs = ws; return cnt; }