Last change
on this file since 473 was 389, checked in by coas-nagasima, 5 years ago |
ビルドが通るよう更新
|
-
Property svn:eol-style
set to
native
-
Property svn:mime-type
set to
text/x-csrc;charset=UTF-8
|
File size:
726 bytes
|
Line | |
---|
1 | #include <uchar.h>
|
---|
2 | #include <wchar.h>
|
---|
3 |
|
---|
4 | size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s, size_t n, mbstate_t *restrict ps)
|
---|
5 | {
|
---|
6 | static unsigned internal_state;
|
---|
7 | if (!ps) ps = (void *)&internal_state;
|
---|
8 | unsigned *pending = (unsigned *)ps;
|
---|
9 |
|
---|
10 | if (!s) return mbrtoc16(0, "", 1, ps);
|
---|
11 |
|
---|
12 | /* mbrtowc states for partial UTF-8 characters have the high bit set;
|
---|
13 | * we use nonzero states without high bit for pending surrogates. */
|
---|
14 | if ((int)*pending > 0) {
|
---|
15 | if (pc16) *pc16 = *pending;
|
---|
16 | *pending = 0;
|
---|
17 | return -3;
|
---|
18 | }
|
---|
19 |
|
---|
20 | wchar_t wc;
|
---|
21 | size_t ret = mbrtowc(&wc, s, n, ps);
|
---|
22 | if (ret <= 4) {
|
---|
23 | if (wc >= 0x10000) {
|
---|
24 | *pending = (wc & 0x3ff) + 0xdc00;
|
---|
25 | wc = 0xd7c0 + (wc >> 10);
|
---|
26 | }
|
---|
27 | if (pc16) *pc16 = wc;
|
---|
28 | }
|
---|
29 | return ret;
|
---|
30 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.