Lines Matching +full:4 +full:- +full:ch
3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
53 /* ----------------------------------------------------------------------
60 uint8_t ch[4]; member
86 #define _ENCODING_MB_CUR_MAX(_ei_) ((_ei_)->cur_max)
87 #define _ENCODING_MB_CUR_MIN(_ei_) ((_ei_)->cur_min)
119 chlenbak = psenc->chlen; in _citrus_UTF1632_mbrtowc_priv()
122 needlen = ((ei->mode & _MODE_UTF32) != 0 || chlenbak >= 2) ? 4 : 2; in _citrus_UTF1632_mbrtowc_priv()
127 psenc->ch[chlenbak++] = *s0++; in _citrus_UTF1632_mbrtowc_priv()
128 n--; in _citrus_UTF1632_mbrtowc_priv()
133 if ((ei->mode & _MODE_UTF32) == 0) { in _citrus_UTF1632_mbrtowc_priv()
135 if (psenc->ch[0] == 0xFE && psenc->ch[1] == 0xFF) { in _citrus_UTF1632_mbrtowc_priv()
136 psenc->current_endian = _ENDIAN_BIG; in _citrus_UTF1632_mbrtowc_priv()
139 } else if (psenc->ch[0] == 0xFF && psenc->ch[1] == 0xFE) { in _citrus_UTF1632_mbrtowc_priv()
140 psenc->current_endian = _ENDIAN_LITTLE; in _citrus_UTF1632_mbrtowc_priv()
146 if (psenc->ch[0] == 0x00 && psenc->ch[1] == 0x00 && in _citrus_UTF1632_mbrtowc_priv()
147 psenc->ch[2] == 0xFE && psenc->ch[3] == 0xFF) { in _citrus_UTF1632_mbrtowc_priv()
148 psenc->current_endian = _ENDIAN_BIG; in _citrus_UTF1632_mbrtowc_priv()
151 } else if (psenc->ch[0] == 0xFF && psenc->ch[1] == 0xFE && in _citrus_UTF1632_mbrtowc_priv()
152 psenc->ch[2] == 0x00 && psenc->ch[3] == 0x00) { in _citrus_UTF1632_mbrtowc_priv()
153 psenc->current_endian = _ENDIAN_LITTLE; in _citrus_UTF1632_mbrtowc_priv()
158 endian = ((ei->mode & _MODE_FORCE_ENDIAN) != 0 || in _citrus_UTF1632_mbrtowc_priv()
159 psenc->current_endian == _ENDIAN_UNKNOWN) ? ei->preffered_endian : in _citrus_UTF1632_mbrtowc_priv()
160 psenc->current_endian; in _citrus_UTF1632_mbrtowc_priv()
163 if ((ei->mode & _MODE_UTF32) == 0) { in _citrus_UTF1632_mbrtowc_priv()
168 wc = (psenc->ch[0] | in _citrus_UTF1632_mbrtowc_priv()
169 ((wchar_t)psenc->ch[1] << 8)); in _citrus_UTF1632_mbrtowc_priv()
172 wc = (psenc->ch[1] | in _citrus_UTF1632_mbrtowc_priv()
173 ((wchar_t)psenc->ch[0] << 8)); in _citrus_UTF1632_mbrtowc_priv()
180 needlen = 4; in _citrus_UTF1632_mbrtowc_priv()
185 wc -= 0xD800; /* wc : surrogate high (see above) */ in _citrus_UTF1632_mbrtowc_priv()
189 if (psenc->ch[3] < 0xDC || psenc->ch[3] > 0xDF) in _citrus_UTF1632_mbrtowc_priv()
191 wc |= psenc->ch[2]; in _citrus_UTF1632_mbrtowc_priv()
192 wc |= (wchar_t)(psenc->ch[3] & 3) << 8; in _citrus_UTF1632_mbrtowc_priv()
195 if (psenc->ch[2]<0xDC || psenc->ch[2]>0xDF) in _citrus_UTF1632_mbrtowc_priv()
197 wc |= psenc->ch[3]; in _citrus_UTF1632_mbrtowc_priv()
198 wc |= (wchar_t)(psenc->ch[2] & 3) << 8; in _citrus_UTF1632_mbrtowc_priv()
209 wc = (psenc->ch[0] | in _citrus_UTF1632_mbrtowc_priv()
210 ((wchar_t)psenc->ch[1] << 8) | in _citrus_UTF1632_mbrtowc_priv()
211 ((wchar_t)psenc->ch[2] << 16) | in _citrus_UTF1632_mbrtowc_priv()
212 ((wchar_t)psenc->ch[3] << 24)); in _citrus_UTF1632_mbrtowc_priv()
215 wc = (psenc->ch[3] | in _citrus_UTF1632_mbrtowc_priv()
216 ((wchar_t)psenc->ch[2] << 8) | in _citrus_UTF1632_mbrtowc_priv()
217 ((wchar_t)psenc->ch[1] << 16) | in _citrus_UTF1632_mbrtowc_priv()
218 ((wchar_t)psenc->ch[0] << 24)); in _citrus_UTF1632_mbrtowc_priv()
229 psenc->chlen = 0; in _citrus_UTF1632_mbrtowc_priv()
236 *nresult = (size_t)-1; in _citrus_UTF1632_mbrtowc_priv()
237 psenc->chlen = 0; in _citrus_UTF1632_mbrtowc_priv()
241 *nresult = (size_t)-2; in _citrus_UTF1632_mbrtowc_priv()
242 psenc->chlen = chlenbak; in _citrus_UTF1632_mbrtowc_priv()
252 static const char _bom[4] = { in _citrus_UTF1632_wcrtomb_priv()
259 if (psenc->current_endian == _ENDIAN_UNKNOWN) { in _citrus_UTF1632_wcrtomb_priv()
260 if ((ei->mode & _MODE_FORCE_ENDIAN) == 0) { in _citrus_UTF1632_wcrtomb_priv()
261 if (ei->mode & _MODE_UTF32) in _citrus_UTF1632_wcrtomb_priv()
262 cnt = 4; in _citrus_UTF1632_wcrtomb_priv()
270 s += cnt, n -= cnt; in _citrus_UTF1632_wcrtomb_priv()
272 psenc->current_endian = ei->preffered_endian; in _citrus_UTF1632_wcrtomb_priv()
276 if ((ei->mode & _MODE_UTF32)==0) { in _citrus_UTF1632_wcrtomb_priv()
282 if (n < 4) in _citrus_UTF1632_wcrtomb_priv()
284 cnt += 4; in _citrus_UTF1632_wcrtomb_priv()
285 wc -= 0x10000; in _citrus_UTF1632_wcrtomb_priv()
295 switch (psenc->current_endian) { in _citrus_UTF1632_wcrtomb_priv()
315 if (n < 4) in _citrus_UTF1632_wcrtomb_priv()
317 cnt += 4; in _citrus_UTF1632_wcrtomb_priv()
318 switch (psenc->current_endian) { in _citrus_UTF1632_wcrtomb_priv()
338 *nresult = (size_t)-1; in _citrus_UTF1632_wcrtomb_priv()
341 *nresult = (size_t)-1; in _citrus_UTF1632_wcrtomb_priv()
356 MATCH(big, ei->preffered_endian = _ENDIAN_BIG); in parse_variable()
360 MATCH(little, ei->preffered_endian = _ENDIAN_LITTLE); in parse_variable()
364 MATCH(internal, ei->preffered_endian = _ENDIAN_INTERNAL); in parse_variable()
368 MATCH(swapped, ei->preffered_endian = _ENDIAN_SWAPPED); in parse_variable()
372 MATCH(force, ei->mode |= _MODE_FORCE_ENDIAN); in parse_variable()
376 MATCH(utf32, ei->mode |= _MODE_UTF32); in parse_variable()
380 lenvar--; in parse_variable()
394 ei->cur_min = ((ei->mode&_MODE_UTF32) == 0) ? 2 : 4; in _citrus_UTF1632_encoding_module_init()
395 ei->cur_max = ((ei->mode&_MODE_UTF32) == 0) ? 6 : 8; in _citrus_UTF1632_encoding_module_init()
399 if (ei->preffered_endian == _ENDIAN_UNKNOWN) { in _citrus_UTF1632_encoding_module_init()
400 ei->preffered_endian = _ENDIAN_BIG; in _citrus_UTF1632_encoding_module_init()
445 *rstate = (psenc->chlen == 0) ? _STDENC_SDGEN_INITIAL : in _citrus_UTF1632_stdenc_get_state_desc_generic()
450 /* ----------------------------------------------------------------------