34static size_t mb_ucs2_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
35static size_t mb_ucs2be_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
37static size_t mb_ucs2le_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state);
40static const char *mbfl_encoding_ucs2_aliases[] = {
"ISO-10646-UCS-2",
"UCS2" ,
"UNICODE",
NULL};
46static const char *mbfl_encoding_ucs2be_aliases[] = {
"byte2be",
NULL};
47static const char *mbfl_encoding_ucs2le_aliases[] = {
"byte2le",
NULL};
53 mbfl_encoding_ucs2_aliases,
68 mbfl_encoding_ucs2be_aliases,
83 mbfl_encoding_ucs2le_aliases,
100 mbfl_filt_conv_ucs2_wchar_flush,
120 mbfl_filt_conv_ucs2_wchar_flush,
140 mbfl_filt_conv_ucs2_wchar_flush,
154#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
158 if (filter->
status == 0) {
160 filter->
cache = c & 0xFF;
163 int n = (filter->
cache << 8) | (c & 0xFF);
179 if (filter->
status == 0) {
181 filter->
cache = (c & 0xFF) << 8;
202 if (filter->
status == 0) {
204 filter->
cache = c & 0xFF;
241static size_t mb_ucs2_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
244 return mb_ucs2be_to_wchar(in, in_len,
buf, bufsize,
NULL);
246 return mb_ucs2le_to_wchar(in, in_len,
buf, bufsize,
NULL);
247 }
else if (*in_len >= 2) {
248 unsigned char *
p = *in;
249 unsigned char c1 = *
p++;
250 unsigned char c2 = *
p++;
251 uint32_t w = (c1 << 8) | c2;
258 return mb_ucs2le_to_wchar(in, in_len,
buf, bufsize,
NULL);
259 }
else if (w == 0xFEFF) {
267 return mb_ucs2be_to_wchar(in, in_len,
buf, bufsize,
NULL);
270static size_t mb_ucs2be_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
272 unsigned char *
p = *in, *e =
p + (*in_len & ~1);
273 uint32_t *
out =
buf, *limit =
buf + bufsize;
275 while (
p < e &&
out < limit) {
276 unsigned char c1 = *
p++;
277 unsigned char c2 = *
p++;
278 uint32_t w = (c1 << 8) | c2;
282 if (
p == e && (*in_len & 0x1) &&
out < limit) {
288 *in_len -= (
p - *in);
295 unsigned char *
out, *limit;
302 out = mb_convert_buf_add2(
out, (w >> 8) & 0xFF, w & 0xFF);
312static size_t mb_ucs2le_to_wchar(
unsigned char **in,
size_t *in_len, uint32_t *
buf,
size_t bufsize,
unsigned int *
state)
314 unsigned char *
p = *in, *e =
p + (*in_len & ~1);
315 uint32_t *
out =
buf, *limit =
buf + bufsize;
317 while (
p < e &&
out < limit) {
318 unsigned char c1 = *
p++;
319 unsigned char c2 = *
p++;
320 uint32_t w = (c2 << 8) | c1;
324 if (
p == e && (*in_len & 0x1) &&
out < limit) {
330 *in_len -= (
p - *in);
337 unsigned char *
out, *limit;
344 out = mb_convert_buf_add2(
out, w & 0xFF, (w >> 8) & 0xFF);
zend_ffi_ctype_name_buf buf
const mbfl_encoding mbfl_encoding_ucs2
const mbfl_encoding mbfl_encoding_ucs2be
const struct mbfl_convert_vtbl vtbl_ucs2_wchar
int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter)
const struct mbfl_convert_vtbl vtbl_wchar_ucs2le
int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter)
const mbfl_encoding mbfl_encoding_ucs2le
int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter)
int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter)
const struct mbfl_convert_vtbl vtbl_ucs2be_wchar
int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter)
const struct mbfl_convert_vtbl vtbl_ucs2le_wchar
const struct mbfl_convert_vtbl vtbl_wchar_ucs2
const struct mbfl_convert_vtbl vtbl_wchar_ucs2be
#define MBFL_WCSPLANE_UCS2MAX
#define MBFL_ENCTYPE_WCS2
int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter)
int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter)
struct _mbfl_convert_filter mbfl_convert_filter
@ mbfl_no_encoding_ucs2le
@ mbfl_no_encoding_ucs2be
#define MB_CONVERT_BUF_STORE(buf, _out, _limit)
#define MB_CONVERT_BUF_ENSURE(buf, out, limit, needed)
#define MB_CONVERT_ERROR(buf, out, limit, bad_cp, conv_fn)
#define MB_CONVERT_BUF_LOAD(buf, _out, _limit)
unsigned const char * end
output_function_t output_function
int(* filter_function)(int c, mbfl_convert_filter *filter)
flush_function_t flush_function