diff options
author | unknown <bar@bar.mysql.r18.ru> | 2003-09-22 11:11:36 +0500 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2003-09-22 11:11:36 +0500 |
commit | c8cf1e4eae76d6574be4516a6d53fe2af228de79 (patch) | |
tree | a1d98e6177658118fdb465426699d462b11aeaa3 /mysys/charset.c | |
parent | d2989680733c705f85f20add65ed635d96a8c82b (diff) | |
download | mariadb-git-c8cf1e4eae76d6574be4516a6d53fe2af228de79.tar.gz |
Bug 1350 fix
Diffstat (limited to 'mysys/charset.c')
-rw-r--r-- | mysys/charset.c | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/mysys/charset.c b/mysys/charset.c index e8406173b33..a485835b636 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -226,7 +226,6 @@ static my_bool create_fromuni(CHARSET_INFO *cs) static void simple_cs_copy_data(CHARSET_INFO *to, CHARSET_INFO *from) { to->number= from->number ? from->number : to->number; - to->state|= from->state; if (from->csname) to->csname= my_once_strdup(from->csname,MYF(MY_WME)); @@ -282,8 +281,6 @@ static int add_collation(CHARSET_INFO *cs) { if (!all_charsets[cs->number]) { - if (cs->state & MY_CS_COMPILED) - goto clear; if (!(all_charsets[cs->number]= (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),MYF(0)))) return MY_XML_ERROR; @@ -296,6 +293,8 @@ static int add_collation(CHARSET_INFO *cs) if (cs->binary_number == cs->number) cs->state |= MY_CS_BINSORT; + all_charsets[cs->number]->state|= cs->state; + if (!(all_charsets[cs->number]->state & MY_CS_COMPILED)) { simple_cs_init_functions(all_charsets[cs->number]); @@ -304,15 +303,14 @@ static int add_collation(CHARSET_INFO *cs) { all_charsets[cs->number]->state |= MY_CS_LOADED; } + all_charsets[cs->number]->state|= MY_CS_AVAILABLE; } else { CHARSET_INFO *dst= all_charsets[cs->number]; - dst->state |= cs->state; if (cs->comment) dst->comment= my_once_strdup(cs->comment,MYF(MY_WME)); } -clear: cs->number= 0; cs->primary_number= 0; cs->binary_number= 0; @@ -389,77 +387,79 @@ char *get_charsets_dir(char *buf) CHARSET_INFO *all_charsets[256]; CHARSET_INFO *default_charset_info = &my_charset_latin1; -#define MY_ADD_CHARSET(x) all_charsets[(x)->number]=(x) +static void add_compiled_collation(CHARSET_INFO *cs) +{ + all_charsets[cs->number]= cs; + cs->state|= MY_CS_AVAILABLE; +} static my_bool init_compiled_charsets(myf flags __attribute__((unused))) { CHARSET_INFO *cs; - MY_ADD_CHARSET(&my_charset_bin); + add_compiled_collation(&my_charset_bin); - MY_ADD_CHARSET(&my_charset_latin1); - MY_ADD_CHARSET(&my_charset_latin1_bin); - MY_ADD_CHARSET(&my_charset_latin1_german2_ci); + add_compiled_collation(&my_charset_latin1); + add_compiled_collation(&my_charset_latin1_bin); + add_compiled_collation(&my_charset_latin1_german2_ci); #ifdef HAVE_CHARSET_big5 - MY_ADD_CHARSET(&my_charset_big5_chinese_ci); - MY_ADD_CHARSET(&my_charset_big5_bin); + add_compiled_collation(&my_charset_big5_chinese_ci); + add_compiled_collation(&my_charset_big5_bin); #endif #ifdef HAVE_CHARSET_cp1250 - MY_ADD_CHARSET(&my_charset_cp1250_czech_ci); + add_compiled_collation(&my_charset_cp1250_czech_ci); #endif #ifdef HAVE_CHARSET_latin2 - MY_ADD_CHARSET(&my_charset_latin2_czech_ci); + add_compiled_collation(&my_charset_latin2_czech_ci); #endif #ifdef HAVE_CHARSET_euckr - MY_ADD_CHARSET(&my_charset_euckr_korean_ci); - MY_ADD_CHARSET(&my_charset_euckr_bin); + add_compiled_collation(&my_charset_euckr_korean_ci); + add_compiled_collation(&my_charset_euckr_bin); #endif #ifdef HAVE_CHARSET_gb2312 - MY_ADD_CHARSET(&my_charset_gb2312_chinese_ci); - MY_ADD_CHARSET(&my_charset_gb2312_bin); + add_compiled_collation(&my_charset_gb2312_chinese_ci); + add_compiled_collation(&my_charset_gb2312_bin); #endif #ifdef HAVE_CHARSET_gbk - MY_ADD_CHARSET(&my_charset_gbk_chinese_ci); - MY_ADD_CHARSET(&my_charset_gbk_bin); + add_compiled_collation(&my_charset_gbk_chinese_ci); + add_compiled_collation(&my_charset_gbk_bin); #endif #ifdef HAVE_CHARSET_sjis - MY_ADD_CHARSET(&my_charset_sjis_japanese_ci); - MY_ADD_CHARSET(&my_charset_sjis_bin); + add_compiled_collation(&my_charset_sjis_japanese_ci); + add_compiled_collation(&my_charset_sjis_bin); #endif #ifdef HAVE_CHARSET_tis620 - MY_ADD_CHARSET(&my_charset_tis620_thai_ci); - MY_ADD_CHARSET(&my_charset_tis620_bin); + add_compiled_collation(&my_charset_tis620_thai_ci); + add_compiled_collation(&my_charset_tis620_bin); #endif #ifdef HAVE_CHARSET_ucs2 - MY_ADD_CHARSET(&my_charset_ucs2_general_ci); - MY_ADD_CHARSET(&my_charset_ucs2_bin); + add_compiled_collation(&my_charset_ucs2_general_ci); + add_compiled_collation(&my_charset_ucs2_bin); #endif #ifdef HAVE_CHARSET_ujis - MY_ADD_CHARSET(&my_charset_ujis_japanese_ci); - MY_ADD_CHARSET(&my_charset_ujis_bin); + add_compiled_collation(&my_charset_ujis_japanese_ci); + add_compiled_collation(&my_charset_ujis_bin); #endif #ifdef HAVE_CHARSET_utf8 - MY_ADD_CHARSET(&my_charset_utf8_general_ci); - MY_ADD_CHARSET(&my_charset_utf8_bin); + add_compiled_collation(&my_charset_utf8_general_ci); + add_compiled_collation(&my_charset_utf8_bin); #endif /* Copy compiled charsets */ for (cs=compiled_charsets; cs->name; cs++) - { - all_charsets[cs->number]=cs; - } + add_compiled_collation(cs); return FALSE; } @@ -570,7 +570,7 @@ static CHARSET_INFO *get_internal_charset(uint cs_number, myf flags) cs= all_charsets[cs_number]; - if (cs && !(cs->state & (MY_CS_COMPILED | MY_CS_LOADED))) + if (cs && !(cs->state & MY_CS_COMPILED) && !(cs->state & MY_CS_LOADED)) { strxmov(get_charsets_dir(buf), cs->csname, ".xml", NullS); my_read_charset_file(buf,flags); |