1#include <string.h>2#include <limits.h>3#include <wchar.h>45#undef wcsrtombs67size_t8wcsrtombs(char *restrict dest, const wchar_t **restrict src,9 size_t len, mbstate_t *restrict ps)10{11 size_t cnt, n;12 wchar_t wc;13 char buf[MB_LEN_MAX];1415 for (n = 0; ; n += cnt) {16 wc = **src;17 cnt = wcrtomb(buf, wc, ps);18 if (cnt == (size_t) -1)19 return -1;2021 if (dest) {22 if (n+cnt > len)23 return n;24 memcpy(dest+n, buf, cnt);25 }26 *src += 1;2728 if (wc == L'\0')29 break;30 }31 *src = NULL;3233 return n;34}