From 782295137b513c45f83add72008b1bfbfde2502d Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 4 Jan 2003 14:12:20 +0400 Subject: Some changes to separate charset and collation terms --- mysys/charset.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'mysys/charset.c') diff --git a/mysys/charset.c b/mysys/charset.c index 3f650bbe14d..37dd484c58e 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -165,15 +165,24 @@ static int cs_leave(MY_XML_PARSER *st,const char *attr, uint len) { struct my_cs_file_info *i = (struct my_cs_file_info *)st->user_data; struct my_cs_file_section_st *s = cs_file_sec(attr,len); + int state = s ? s->state : 0; - if (s && (s->state == _CS_COLLATION) && !all_charsets[i->cs.number]) + if (state == _CS_COLLATION) { - if (!(all_charsets[i->cs.number]= + if (!all_charsets[i->cs.number]) + { + if (!(all_charsets[i->cs.number]= (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),i->myflags))) + { + return MY_XML_ERROR; + } + all_charsets[i->cs.number][0]=i->cs; + } + else { - return MY_XML_ERROR; + all_charsets[i->cs.number]->state |= i->cs.state; } - all_charsets[i->cs.number][0]=i->cs; + i->cs.state=0; } return MY_XML_OK; } @@ -203,6 +212,16 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len) ((char*)(i->cs.name))[len]='\0'; } break; + case _CS_NAME: + if ((i->cs.csname = (char*) my_once_alloc(len+1,i->myflags))) + { + memcpy((char*)i->cs.csname,attr,len); + ((char*)(i->cs.csname))[len]='\0'; + } + break; + case _CS_FLAG: + if (!strncmp("primary",attr,len)) + i->cs.state |= MY_CS_PRIMARY; } return MY_XML_OK; } -- cgit v1.2.1