summaryrefslogtreecommitdiff
path: root/mysys/charset.c
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-09-22 11:11:36 +0500
committerunknown <bar@bar.mysql.r18.ru>2003-09-22 11:11:36 +0500
commitc8cf1e4eae76d6574be4516a6d53fe2af228de79 (patch)
treea1d98e6177658118fdb465426699d462b11aeaa3 /mysys/charset.c
parentd2989680733c705f85f20add65ed635d96a8c82b (diff)
downloadmariadb-git-c8cf1e4eae76d6574be4516a6d53fe2af228de79.tar.gz
Bug 1350 fix
Diffstat (limited to 'mysys/charset.c')
-rw-r--r--mysys/charset.c68
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);