31#include "libmbfl/config.h"
57#ifndef HAVE_STRCASECMP
59#define strcasecmp stricmp
151static const int8_t mbfl_encoding_ptr_list_after_hashing[] = {
250static unsigned int mbfl_name2encoding_perfect_hash(
const char *str,
size_t len)
252 static const unsigned char asso_values[] =
254 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
255 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
256 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
257 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
258 109, 109, 109, 109, 109, 1, 109, 109, 1, 19,
259 0, 16, 13, 3, 7, 35, 1, 20, 109, 109,
260 109, 109, 109, 109, 109, 16, 1, 0, 44, 6,
261 26, 53, 8, 0, 25, 32, 13, 12, 1, 0,
262 25, 0, 32, 18, 51, 3, 109, 15, 109, 109,
263 1, 109, 109, 109, 109, 109, 109, 16, 1, 0,
264 44, 6, 26, 53, 8, 0, 25, 32, 13, 12,
265 1, 0, 25, 0, 32, 18, 51, 3, 109, 15,
266 109, 109, 1, 109, 109, 109, 109, 109, 109, 109,
267 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
268 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
269 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
270 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
271 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
272 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
273 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
274 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
275 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
276 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
277 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
278 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
279 109, 109, 109, 109, 109, 109
281 unsigned int hval =
len;
286 hval += asso_values[(
unsigned char)str[6]];
289 hval += asso_values[(
unsigned char)str[5]];
292 hval += asso_values[(
unsigned char)str[4]];
296 hval += asso_values[(
unsigned char)str[2]];
300 hval += asso_values[(
unsigned char)str[0]];
303 return hval + asso_values[(
unsigned char)str[
len - 1]];
306#define NAME_HASH_MIN_NAME_LENGTH 2
307#define NAME_HASH_MAX_NAME_LENGTH 23
322 size_t name_length =
strlen((*encoding)->name);
324 fprintf(stderr,
"name length is not satisfying bound check: %zu %s\n", name_length, (*encoding)->name);
327 unsigned int key = mbfl_name2encoding_perfect_hash((*encoding)->name, name_length);
328 if (mbfl_encoding_ptr_list[mbfl_encoding_ptr_list_after_hashing[
key]] != *
encoding) {
329 fprintf(stderr,
"mbfl_name2encoding_perfect_hash: key %u %s mismatch\n",
key, (*encoding)->name);
337 unsigned int key = mbfl_name2encoding_perfect_hash(
name, name_len);
338 if (
key <
sizeof(mbfl_encoding_ptr_list_after_hashing) /
sizeof(mbfl_encoding_ptr_list_after_hashing[0])) {
339 int8_t
offset = mbfl_encoding_ptr_list_after_hashing[
key];
351 if ((*encoding)->mime_name) {
352 if (
strncasecmp((*encoding)->mime_name,
name, name_len) == 0 && (*encoding)->mime_name[name_len] ==
'\0') {
360 if ((*encoding)->aliases) {
361 for (
const char **alias = (*encoding)->aliases; *alias; alias++) {
362 if (
strncasecmp(
name, *alias, name_len) == 0 && (*alias)[name_len] ==
'\0') {
377 if ((*encoding)->no_encoding == no_encoding) {
393 return mbfl_encoding_ptr_list;
fprintf($stream, string $format, mixed ... $values)
const mbfl_encoding mbfl_encoding_7bit
const mbfl_encoding mbfl_encoding_8bit
const mbfl_encoding mbfl_encoding_base64
const mbfl_encoding mbfl_encoding_hz
const mbfl_encoding mbfl_encoding_sjis
const mbfl_encoding mbfl_encoding_sjiswin
const mbfl_encoding mbfl_encoding_cp932
const mbfl_encoding mbfl_encoding_uhc
const mbfl_encoding mbfl_encoding_euc_kr
const mbfl_encoding mbfl_encoding_cp50221
const mbfl_encoding mbfl_encoding_gb18030_2022
const mbfl_encoding mbfl_encoding_sjis2004
const mbfl_encoding mbfl_encoding_sjis_docomo
const mbfl_encoding mbfl_encoding_euc_cn
const mbfl_encoding mbfl_encoding_cp50220
const mbfl_encoding mbfl_encoding_big5
const mbfl_encoding mbfl_encoding_cp50222
const mbfl_encoding mbfl_encoding_2022jpms
const mbfl_encoding mbfl_encoding_cp51932
const mbfl_encoding mbfl_encoding_2022jp_2004
const mbfl_encoding mbfl_encoding_sjis_sb
const mbfl_encoding mbfl_encoding_cp936
const mbfl_encoding mbfl_encoding_gb18030
const mbfl_encoding mbfl_encoding_eucjp2004
const mbfl_encoding mbfl_encoding_jis
const mbfl_encoding mbfl_encoding_2022jp
const mbfl_encoding mbfl_encoding_2022jp_kddi
const mbfl_encoding mbfl_encoding_eucjp_win
const mbfl_encoding mbfl_encoding_euc_tw
const mbfl_encoding mbfl_encoding_cp950
const mbfl_encoding mbfl_encoding_euc_jp
const mbfl_encoding mbfl_encoding_sjis_kddi
const mbfl_encoding mbfl_encoding_2022kr
const mbfl_encoding mbfl_encoding_sjis_mac
const mbfl_encoding mbfl_encoding_html_ent
const mbfl_encoding mbfl_encoding_qprint
const mbfl_encoding mbfl_encoding_8859_10
const mbfl_encoding mbfl_encoding_8859_6
const mbfl_encoding mbfl_encoding_8859_16
const mbfl_encoding mbfl_encoding_8859_8
const mbfl_encoding mbfl_encoding_8859_2
const mbfl_encoding mbfl_encoding_8859_5
const mbfl_encoding mbfl_encoding_cp850
const mbfl_encoding mbfl_encoding_8859_13
const mbfl_encoding mbfl_encoding_8859_4
const mbfl_encoding mbfl_encoding_cp1252
const mbfl_encoding mbfl_encoding_8859_7
const mbfl_encoding mbfl_encoding_armscii8
const mbfl_encoding mbfl_encoding_koi8u
const mbfl_encoding mbfl_encoding_cp1251
const mbfl_encoding mbfl_encoding_8859_1
const mbfl_encoding mbfl_encoding_koi8r
const mbfl_encoding mbfl_encoding_8859_15
const mbfl_encoding mbfl_encoding_cp866
const mbfl_encoding mbfl_encoding_8859_3
const mbfl_encoding mbfl_encoding_ascii
const mbfl_encoding mbfl_encoding_cp1254
const mbfl_encoding mbfl_encoding_8859_14
const mbfl_encoding mbfl_encoding_8859_9
const mbfl_encoding mbfl_encoding_ucs2
const mbfl_encoding mbfl_encoding_ucs2be
const mbfl_encoding mbfl_encoding_ucs2le
const mbfl_encoding mbfl_encoding_ucs4be
const mbfl_encoding mbfl_encoding_ucs4
const mbfl_encoding mbfl_encoding_ucs4le
const mbfl_encoding mbfl_encoding_utf16be
const mbfl_encoding mbfl_encoding_utf16le
const mbfl_encoding mbfl_encoding_utf16
const mbfl_encoding mbfl_encoding_utf32be
const mbfl_encoding mbfl_encoding_utf32
const mbfl_encoding mbfl_encoding_utf32le
const mbfl_encoding mbfl_encoding_utf7
const mbfl_encoding mbfl_encoding_utf7imap
const mbfl_encoding mbfl_encoding_utf8_kddi_b
const mbfl_encoding mbfl_encoding_utf8_sb
const mbfl_encoding mbfl_encoding_utf8_kddi_a
const mbfl_encoding mbfl_encoding_utf8
const mbfl_encoding mbfl_encoding_utf8_docomo
const mbfl_encoding mbfl_encoding_uuencode
const mbfl_encoding ** mbfl_get_supported_encodings(void)
const mbfl_encoding * mbfl_name2encoding_ex(const char *name, size_t name_len)
const mbfl_encoding * mbfl_name2encoding(const char *name)
#define NAME_HASH_MIN_NAME_LENGTH
const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
const char * mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding)
const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
unsigned char key[REFLECTION_KEY_LEN]
xmlCharEncodingHandlerPtr encoding
#define strncasecmp(s1, s2, n)