Lines Matching +full:8 +full:- +full:ch

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
6 * Copyright (c) 2002-2004 Tim J. Robbins
37 * PRC National Standard GB 18030-2000 encoding of Chinese text.
72 l->__mbrtowc = _GB18030_mbrtowc; in _GB18030_init()
73 l->__wcrtomb = _GB18030_wcrtomb; in _GB18030_init()
74 l->__mbsinit = _GB18030_mbsinit; in _GB18030_init()
75 l->__mbsnrtowcs = _GB18030_mbsnrtowcs; in _GB18030_init()
76 l->__wcsnrtombs = _GB18030_wcsnrtombs; in _GB18030_init()
77 l->runes = rl; in _GB18030_init()
78 l->__mb_cur_max = 4; in _GB18030_init()
79 l->__mb_sb_limit = 128; in _GB18030_init()
88 return (ps == NULL || ((const _GB18030State *)ps)->count == 0); in _GB18030_mbsinit()
97 int ch, len, ocount; in _GB18030_mbrtowc() local
102 if (gs->count < 0 || gs->count > sizeof(gs->bytes)) { in _GB18030_mbrtowc()
104 return ((size_t)-1); in _GB18030_mbrtowc()
113 ncopy = MIN(MIN(n, MB_CUR_MAX), sizeof(gs->bytes) - gs->count); in _GB18030_mbrtowc()
114 memcpy(gs->bytes + gs->count, s, ncopy); in _GB18030_mbrtowc()
115 ocount = gs->count; in _GB18030_mbrtowc()
116 gs->count += ncopy; in _GB18030_mbrtowc()
117 s = (char *)gs->bytes; in _GB18030_mbrtowc()
118 n = gs->count; in _GB18030_mbrtowc()
122 return ((size_t)-2); in _GB18030_mbrtowc()
125 * Single byte: [00-7f] in _GB18030_mbrtowc()
126 * Two byte: [81-fe][40-7e,80-fe] in _GB18030_mbrtowc()
127 * Four byte: [81-fe][30-39][81-fe][30-39] in _GB18030_mbrtowc()
129 ch = (unsigned char)*s++; in _GB18030_mbrtowc()
130 if (ch <= 0x7f) { in _GB18030_mbrtowc()
132 wch = ch; in _GB18030_mbrtowc()
133 } else if (ch >= 0x81 && ch <= 0xfe) { in _GB18030_mbrtowc()
134 wch = ch; in _GB18030_mbrtowc()
136 return ((size_t)-2); in _GB18030_mbrtowc()
137 ch = (unsigned char)*s++; in _GB18030_mbrtowc()
138 if ((ch >= 0x40 && ch <= 0x7e) || (ch >= 0x80 && ch <= 0xfe)) { in _GB18030_mbrtowc()
139 wch = (wch << 8) | ch; in _GB18030_mbrtowc()
141 } else if (ch >= 0x30 && ch <= 0x39) { in _GB18030_mbrtowc()
145 * cast to wint_t on 32-bit twos-complement machines. in _GB18030_mbrtowc()
147 wch = ((wch & 0x7f) << 8) | ch; in _GB18030_mbrtowc()
149 return ((size_t)-2); in _GB18030_mbrtowc()
150 ch = (unsigned char)*s++; in _GB18030_mbrtowc()
151 if (ch < 0x81 || ch > 0xfe) in _GB18030_mbrtowc()
153 wch = (wch << 8) | ch; in _GB18030_mbrtowc()
155 return ((size_t)-2); in _GB18030_mbrtowc()
156 ch = (unsigned char)*s++; in _GB18030_mbrtowc()
157 if (ch < 0x30 || ch > 0x39) in _GB18030_mbrtowc()
159 wch = (wch << 8) | ch; in _GB18030_mbrtowc()
168 gs->count = 0; in _GB18030_mbrtowc()
169 return (wch == L'\0' ? 0 : len - ocount); in _GB18030_mbrtowc()
172 return ((size_t)-1); in _GB18030_mbrtowc()
184 if (gs->count != 0) { in _GB18030_wcrtomb()
186 return ((size_t)-1); in _GB18030_wcrtomb()
190 /* Reset to initial shift state (no-op) */ in _GB18030_wcrtomb()
205 c = (wc >> 8) & 0xff; in _GB18030_wcrtomb()
217 c = (wc >> 8) & 0xff; in _GB18030_wcrtomb()
235 return ((size_t)-1); in _GB18030_wcrtomb()