5 size_t c16rtomb(char *restrict s
, char16_t c16
, mbstate_t *restrict ps
)
7 static unsigned internal_state
;
8 if (!ps
) ps
= (void *)&internal_state
;
9 unsigned *x
= (unsigned *)ps
;
17 if (!*x
&& c16
- 0xd800u
< 0x400) {
18 *x
= c16
- 0xd7c0 << 10;
23 if (c16
- 0xdc00u
>= 0x400) goto ilseq
;
24 else wc
= *x
+ c16
- 0xdc00;
29 return wcrtomb(s
, wc
, 0);