31#ifndef MBFL_ENCODING_H
32#define MBFL_ENCODING_H
149typedef zend_string* (*mb_cut_fn)(
unsigned char *str,
size_t from,
size_t len,
unsigned char *
end);
153#define MBSTRING_MIN_WCHAR_BUFSIZE 5
155static inline void mb_convert_buf_init(
mb_convert_buf *
buf,
size_t initsize, uint32_t repl_char,
unsigned int err_mode)
157 buf->state =
buf->errors = 0;
160 buf->limit =
buf->out + initsize;
161 buf->replacement_char = repl_char;
162 buf->error_mode = err_mode;
165#define MB_CONVERT_BUF_ENSURE(buf, out, limit, needed) \
166 ZEND_ASSERT(out <= limit); \
167 if ((size_t)(limit - out) < (needed)) { \
168 size_t oldsize = limit - (unsigned char*)ZSTR_VAL((buf)->str); \
169 size_t newsize = oldsize + MAX(oldsize >> 1, needed); \
170 zend_string *newstr = erealloc((buf)->str, _ZSTR_STRUCT_SIZE(newsize)); \
171 out = (unsigned char*)ZSTR_VAL(newstr) + (out - (unsigned char*)ZSTR_VAL((buf)->str)); \
172 limit = (unsigned char*)ZSTR_VAL(newstr) + newsize; \
173 (buf)->str = newstr; \
176#define MB_CONVERT_BUF_STORE(buf, _out, _limit) (buf)->out = _out; (buf)->limit = _limit
178#define MB_CONVERT_BUF_LOAD(buf, _out, _limit) _out = (buf)->out; _limit = (buf)->limit
180#define MB_CONVERT_ERROR(buf, out, limit, bad_cp, conv_fn) \
181 MB_CONVERT_BUF_STORE(buf, out, limit); \
182 mb_illegal_output(bad_cp, conv_fn, buf); \
183 MB_CONVERT_BUF_LOAD(buf, out, limit)
185static inline unsigned char* mb_convert_buf_add(
unsigned char *
out,
char c)
191static inline unsigned char* mb_convert_buf_add2(
unsigned char *
out,
char c1,
char c2)
198static inline unsigned char* mb_convert_buf_add3(
unsigned char *
out,
char c1,
char c2,
char c3)
206static inline unsigned char* mb_convert_buf_add4(
unsigned char *
out,
char c1,
char c2,
char c3,
char c4)
215static inline unsigned char* mb_convert_buf_appends(
unsigned char *
out,
const char *
s)
223static inline unsigned char* mb_convert_buf_appendn(
unsigned char *
out,
const char *
s,
size_t n)
zend_ffi_ctype_name_buf buf
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8
const mbfl_encoding mbfl_encoding_utf8
MBFLAPI const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
@ mbfl_no_encoding_8859_9
@ mbfl_no_encoding_2022jp_kddi
@ mbfl_no_encoding_utf16be
@ mbfl_no_encoding_ucs2le
@ mbfl_no_encoding_2022jp
@ mbfl_no_encoding_cp50220
@ mbfl_no_encoding_8859_2
@ mbfl_no_encoding_8859_15
@ mbfl_no_encoding_eucjp2004
@ mbfl_no_encoding_gb18030
@ mbfl_no_encoding_utf8_kddi_a
@ mbfl_no_encoding_charset_min
@ mbfl_no_encoding_cp50222
@ mbfl_no_encoding_invalid
@ mbfl_no_encoding_cp51932
@ mbfl_no_encoding_sjis_docomo
@ mbfl_no_encoding_euc_kr
@ mbfl_no_encoding_8859_13
@ mbfl_no_encoding_euc_cn
@ mbfl_no_encoding_utf8_docomo
@ mbfl_no_encoding_utf7imap
@ mbfl_no_encoding_utf32be
@ mbfl_no_encoding_ucs4le
@ mbfl_no_encoding_8859_8
@ mbfl_no_encoding_2022kr
@ mbfl_no_encoding_utf8_kddi_b
@ mbfl_no_encoding_html_ent
@ mbfl_no_encoding_euc_tw
@ mbfl_no_encoding_2022jpms
@ mbfl_no_encoding_8859_4
@ mbfl_no_encoding_cp50221
@ mbfl_no_encoding_8859_16
@ mbfl_no_encoding_euc_jp
@ mbfl_no_encoding_sjiswin
@ mbfl_no_encoding_base64
@ mbfl_no_encoding_8859_5
@ mbfl_no_encoding_sjis2004
@ mbfl_no_encoding_gb18030_2022
@ mbfl_no_encoding_cp1252
@ mbfl_no_encoding_8859_1
@ mbfl_no_encoding_8859_7
@ mbfl_no_encoding_ucs4be
@ mbfl_no_encoding_utf32le
@ mbfl_no_encoding_armscii8
@ mbfl_no_encoding_sjis_kddi
@ mbfl_no_encoding_cp1251
@ mbfl_no_encoding_charset_max
@ mbfl_no_encoding_qprint
@ mbfl_no_encoding_sjis_mac
@ mbfl_no_encoding_uuencode
@ mbfl_no_encoding_utf16le
@ mbfl_no_encoding_8859_3
@ mbfl_no_encoding_8859_6
@ mbfl_no_encoding_8859_14
@ mbfl_no_encoding_ucs2be
@ mbfl_no_encoding_2022jp_2004
@ mbfl_no_encoding_utf8_sb
@ mbfl_no_encoding_8859_10
@ mbfl_no_encoding_eucjp_win
@ mbfl_no_encoding_sjis_sb
@ mbfl_no_encoding_cp1254
size_t(* mb_to_wchar_fn)(unsigned char **in, size_t *in_len, uint32_t *out, size_t out_len, unsigned int *state)
MBFLAPI const mbfl_encoding * mbfl_name2encoding_ex(const char *name, size_t name_len)
zend_string *(* mb_cut_fn)(unsigned char *str, size_t from, size_t len, unsigned char *end)
MBFLAPI const char * mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding)
MBFLAPI const mbfl_encoding ** mbfl_get_supported_encodings(void)
MBFLAPI const mbfl_encoding * mbfl_name2encoding(const char *name)
void(* mb_from_wchar_fn)(uint32_t *in, size_t in_len, mb_convert_buf *out, bool end)
bool(* mb_check_fn)(unsigned char *in, size_t in_len)
MBFLAPI const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
unsigned const char * end
xmlCharEncodingHandlerPtr encoding
uint32_t replacement_char
enum mbfl_no_encoding from
int(* filter_flush)(struct _mbfl_convert_filter *filter)
int(* filter_function)(int c, struct _mbfl_convert_filter *filter)
void(* filter_ctor)(struct _mbfl_convert_filter *filter)
void(* filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest)
void(* filter_dtor)(struct _mbfl_convert_filter *filter)
const unsigned char * mblen_table
const struct mbfl_convert_vtbl * output_filter
enum mbfl_no_encoding no_encoding
mb_from_wchar_fn from_wchar
const struct mbfl_convert_vtbl * input_filter
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
struct _zend_string zend_string
#define _ZSTR_STRUCT_SIZE(len)
#define GC_SET_REFCOUNT(p, rc)
#define IS_STR_VALID_UTF8
#define GC_ADD_FLAGS(p, flags)