4 size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s, size_t n, mbstate_t *restrict ps)
6 unsigned *pending = (unsigned *)ps;
8 if (!s) return mbrtoc16(0, "", 1, ps);
10 /* mbrtowc states for partial UTF-8 characters have the high bit set;
11 * we use nonzero states without high bit for pending surrogates. */
12 if ((int)*pending > 0) {
13 if (pc16) *pc16 = *pending;
19 size_t ret = mbrtowc(&wc, s, n, ps);
22 *pending = (wc & 0x3ff) + 0xdc00;
23 wc = 0xd7c0 + (wc >> 10);