1#include <errno.h>2#include <wchar.h>34#include "../libc.h"56#undef wcrtomb78size_t9wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps)10{11 int i, n;12 unsigned long c = wc;1314 if (!s)15 return 1;1617 if (c < 0x80) {18 *s = wc;19 return 1;20 }2122 if (!_validutf8(wc, &n)) {23 errno = EILSEQ;24 return -1;25 }26 n--;2728 *s = 0x80;29 for (i = 0; i < n; i++) {30 *s >>= 1;31 *s |= 0x80;3233 s[n-i] = 0x80 | (c & 0x3f);34 c >>= 6;35 }36 *s |= c;3738 return n+1;39}