1#include <uchar.h>
2#include <wchar.h>
3
4size_t mbrtoc32(char32_t* restrict pc32, const char* restrict s, size_t n, mbstate_t* restrict ps) {
5    static unsigned internal_state;
6    if (!ps)
7        ps = (void*)&internal_state;
8    if (!s)
9        return mbrtoc32(0, "", 1, ps);
10    wchar_t wc;
11    size_t ret = mbrtowc(&wc, s, n, ps);
12    if (ret <= 4 && pc32)
13        *pc32 = wc;
14    return ret;
15}
16