Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
50989ef2
Commit
50989ef2
authored
Jan 14, 2003
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Charset loading has been moved to /string library
parent
5e88e699
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
238 additions
and
236 deletions
+238
-236
include/m_ctype.h
include/m_ctype.h
+9
-1
mysys/charset.c
mysys/charset.c
+6
-235
strings/ctype.c
strings/ctype.c
+223
-0
No files found.
include/m_ctype.h
View file @
50989ef2
...
...
@@ -27,6 +27,13 @@ extern "C" {
#endif
#define MY_CS_NAME_SIZE 32
#define MY_CS_CTYPE_TABLE_SIZE 257
#define MY_CS_TO_LOWER_TABLE_SIZE 256
#define MY_CS_TO_UPPER_TABLE_SIZE 256
#define MY_CS_SORT_ORDER_TABLE_SIZE 256
#define MY_CS_TO_UNI_TABLE_SIZE 256
#define CHARSET_DIR "charsets/"
#define my_wc_t ulong
...
...
@@ -145,7 +152,8 @@ extern CHARSET_INFO *default_charset_info;
extern
CHARSET_INFO
*
system_charset_info
;
extern
CHARSET_INFO
*
all_charsets
[
256
];
extern
my_bool
init_compiled_charsets
(
myf
flags
);
extern
my_bool
my_parse_charset_xml
(
const
char
*
bug
,
uint
len
,
int
(
*
add
)(
CHARSET_INFO
*
cs
));
/* declarations for simple charsets */
extern
int
my_strnxfrm_simple
(
CHARSET_INFO
*
,
uchar
*
,
uint
,
const
uchar
*
,
uint
);
...
...
mysys/charset.c
View file @
50989ef2
...
...
@@ -22,217 +22,6 @@
#include <my_xml.h>
#define CS_MAX_NM_LEN 32
#define CTYPE_TABLE_SIZE 257
#define TO_LOWER_TABLE_SIZE 256
#define TO_UPPER_TABLE_SIZE 256
#define SORT_ORDER_TABLE_SIZE 256
#define TO_UNI_TABLE_SIZE 256
static
char
*
mstr
(
char
*
str
,
const
char
*
src
,
uint
l1
,
uint
l2
)
{
l1
=
l1
<
l2
?
l1
:
l2
;
memcpy
(
str
,
src
,
l1
);
str
[
l1
]
=
'\0'
;
return
str
;
}
struct
my_cs_file_section_st
{
int
state
;
const
char
*
str
;
};
#define _CS_MISC 1
#define _CS_ID 2
#define _CS_CSNAME 3
#define _CS_FAMILY 4
#define _CS_ORDER 5
#define _CS_COLNAME 6
#define _CS_FLAG 7
#define _CS_CHARSET 8
#define _CS_COLLATION 9
#define _CS_UPPERMAP 10
#define _CS_LOWERMAP 11
#define _CS_UNIMAP 12
#define _CS_COLLMAP 13
#define _CS_CTYPEMAP 14
static
struct
my_cs_file_section_st
sec
[]
=
{
{
_CS_MISC
,
"xml"
},
{
_CS_MISC
,
"xml.version"
},
{
_CS_MISC
,
"xml.encoding"
},
{
_CS_MISC
,
"charsets"
},
{
_CS_MISC
,
"charsets.max-id"
},
{
_CS_MISC
,
"charsets.description"
},
{
_CS_CHARSET
,
"charsets.charset"
},
{
_CS_CSNAME
,
"charsets.charset.name"
},
{
_CS_FAMILY
,
"charsets.charset.family"
},
{
_CS_MISC
,
"charsets.charset.alias"
},
{
_CS_MISC
,
"charsets.charset.ctype"
},
{
_CS_CTYPEMAP
,
"charsets.charset.ctype.map"
},
{
_CS_MISC
,
"charsets.charset.upper"
},
{
_CS_UPPERMAP
,
"charsets.charset.upper.map"
},
{
_CS_MISC
,
"charsets.charset.lower"
},
{
_CS_LOWERMAP
,
"charsets.charset.lower.map"
},
{
_CS_MISC
,
"charsets.charset.unicode"
},
{
_CS_UNIMAP
,
"charsets.charset.unicode.map"
},
{
_CS_COLLATION
,
"charsets.charset.collation"
},
{
_CS_COLNAME
,
"charsets.charset.collation.name"
},
{
_CS_ID
,
"charsets.charset.collation.id"
},
{
_CS_ORDER
,
"charsets.charset.collation.order"
},
{
_CS_FLAG
,
"charsets.charset.collation.flag"
},
{
_CS_COLLMAP
,
"charsets.charset.collation.map"
},
{
0
,
NULL
}
};
static
struct
my_cs_file_section_st
*
cs_file_sec
(
const
char
*
attr
,
uint
len
)
{
struct
my_cs_file_section_st
*
s
;
for
(
s
=
sec
;
s
->
str
;
s
++
)
{
if
(
!
strncmp
(
attr
,
s
->
str
,
len
))
return
s
;
}
return
NULL
;
}
struct
my_cs_file_info
{
char
csname
[
CS_MAX_NM_LEN
];
char
name
[
CS_MAX_NM_LEN
];
uchar
ctype
[
CTYPE_TABLE_SIZE
];
uchar
to_lower
[
TO_LOWER_TABLE_SIZE
];
uchar
to_upper
[
TO_UPPER_TABLE_SIZE
];
uchar
sort_order
[
SORT_ORDER_TABLE_SIZE
];
uint16
tab_to_uni
[
TO_UNI_TABLE_SIZE
];
CHARSET_INFO
cs
;
myf
myflags
;
int
(
*
add_collation
)(
CHARSET_INFO
*
cs
);
};
static
int
fill_uchar
(
uchar
*
a
,
uint
size
,
const
char
*
str
,
uint
len
)
{
uint
i
=
0
;
const
char
*
s
,
*
b
,
*
e
=
str
+
len
;
for
(
s
=
str
;
s
<
e
;
i
++
)
{
for
(
;
(
s
<
e
)
&&
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
b
=
s
;
for
(
;
(
s
<
e
)
&&
!
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
if
(
s
==
b
||
i
>
size
)
break
;
a
[
i
]
=
my_strntoul
(
my_charset_latin1
,
b
,
s
-
b
,
NULL
,
16
);
}
return
0
;
}
static
int
fill_uint16
(
uint16
*
a
,
uint
size
,
const
char
*
str
,
uint
len
)
{
uint
i
=
0
;
const
char
*
s
,
*
b
,
*
e
=
str
+
len
;
for
(
s
=
str
;
s
<
e
;
i
++
)
{
for
(
;
(
s
<
e
)
&&
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
b
=
s
;
for
(
;
(
s
<
e
)
&&
!
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
if
(
s
==
b
||
i
>
size
)
break
;
a
[
i
]
=
my_strntol
(
my_charset_latin1
,
b
,
s
-
b
,
NULL
,
16
);
}
return
0
;
}
static
int
cs_enter
(
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
);
if
(
s
&&
(
s
->
state
==
_CS_CHARSET
))
{
bzero
(
&
i
->
cs
,
sizeof
(
i
->
cs
));
}
return
MY_XML_OK
;
}
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
;
int
rc
;
switch
(
state
){
case
_CS_COLLATION
:
rc
=
i
->
add_collation
?
i
->
add_collation
(
&
i
->
cs
)
:
MY_XML_OK
;
break
;
default:
rc
=
MY_XML_OK
;
}
return
rc
;
}
static
int
cs_value
(
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
;
int
state
=
(
s
=
cs_file_sec
(
st
->
attr
,
strlen
(
st
->
attr
)))
?
s
->
state
:
0
;
#ifndef DBUG_OFF
if
(
0
){
char
str
[
1024
];
mstr
(
str
,
attr
,
len
,
sizeof
(
str
)
-
1
);
printf
(
"VALUE %d %s='%s'
\n
"
,
state
,
st
->
attr
,
str
);
}
#endif
switch
(
state
)
{
case
_CS_ID
:
i
->
cs
.
number
=
my_strntoul
(
my_charset_latin1
,
attr
,
len
,(
char
**
)
NULL
,
0
);
break
;
case
_CS_COLNAME
:
i
->
cs
.
name
=
mstr
(
i
->
name
,
attr
,
len
,
CS_MAX_NM_LEN
-
1
);
break
;
case
_CS_CSNAME
:
i
->
cs
.
csname
=
mstr
(
i
->
csname
,
attr
,
len
,
CS_MAX_NM_LEN
-
1
);
break
;
case
_CS_FLAG
:
if
(
!
strncmp
(
"primary"
,
attr
,
len
))
i
->
cs
.
state
|=
MY_CS_PRIMARY
;
break
;
case
_CS_UPPERMAP
:
fill_uchar
(
i
->
to_upper
,
TO_UPPER_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
to_upper
=
i
->
to_upper
;
break
;
case
_CS_LOWERMAP
:
fill_uchar
(
i
->
to_lower
,
TO_LOWER_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
to_lower
=
i
->
to_lower
;
break
;
case
_CS_UNIMAP
:
fill_uint16
(
i
->
tab_to_uni
,
TO_UNI_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
tab_to_uni
=
i
->
tab_to_uni
;
break
;
case
_CS_COLLMAP
:
fill_uchar
(
i
->
sort_order
,
SORT_ORDER_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
sort_order
=
i
->
sort_order
;
break
;
case
_CS_CTYPEMAP
:
fill_uchar
(
i
->
ctype
,
CTYPE_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
ctype
=
i
->
ctype
;
break
;
}
return
MY_XML_OK
;
}
static
void
set_max_sort_char
(
CHARSET_INFO
*
cs
)
{
...
...
@@ -385,23 +174,23 @@ static void simple_cs_copy_data(CHARSET_INFO *to, CHARSET_INFO *from)
if
(
from
->
ctype
)
to
->
ctype
=
(
uchar
*
)
my_once_memdup
((
char
*
)
from
->
ctype
,
CTYPE_TABLE_SIZE
,
MYF
(
MY_WME
));
MY_CS_
CTYPE_TABLE_SIZE
,
MYF
(
MY_WME
));
if
(
from
->
to_lower
)
to
->
to_lower
=
(
uchar
*
)
my_once_memdup
((
char
*
)
from
->
to_lower
,
TO_LOWER_TABLE_SIZE
,
MYF
(
MY_WME
));
MY_CS_
TO_LOWER_TABLE_SIZE
,
MYF
(
MY_WME
));
if
(
from
->
to_upper
)
to
->
to_upper
=
(
uchar
*
)
my_once_memdup
((
char
*
)
from
->
to_upper
,
TO_UPPER_TABLE_SIZE
,
MYF
(
MY_WME
));
MY_CS_
TO_UPPER_TABLE_SIZE
,
MYF
(
MY_WME
));
if
(
from
->
sort_order
)
{
to
->
sort_order
=
(
uchar
*
)
my_once_memdup
((
char
*
)
from
->
sort_order
,
SORT_ORDER_TABLE_SIZE
,
MY_CS_
SORT_ORDER_TABLE_SIZE
,
MYF
(
MY_WME
));
set_max_sort_char
(
to
);
}
if
(
from
->
tab_to_uni
)
{
uint
sz
=
TO_UNI_TABLE_SIZE
*
sizeof
(
uint16
);
uint
sz
=
MY_CS_
TO_UNI_TABLE_SIZE
*
sizeof
(
uint16
);
to
->
tab_to_uni
=
(
uint16
*
)
my_once_memdup
((
char
*
)
from
->
tab_to_uni
,
sz
,
MYF
(
MY_WME
));
create_fromuni
(
to
);
...
...
@@ -448,24 +237,6 @@ static int add_collation(CHARSET_INFO *cs)
}
static
my_bool
my_parse_charset_xml
(
const
char
*
buf
,
uint
len
)
{
MY_XML_PARSER
p
;
struct
my_cs_file_info
i
;
my_bool
rc
;
my_xml_parser_create
(
&
p
);
my_xml_set_enter_handler
(
&
p
,
cs_enter
);
my_xml_set_value_handler
(
&
p
,
cs_value
);
my_xml_set_leave_handler
(
&
p
,
cs_leave
);
i
.
add_collation
=
add_collation
;
my_xml_set_user_data
(
&
p
,(
void
*
)
&
i
);
rc
=
(
my_xml_parse
(
&
p
,
buf
,
len
)
==
MY_XML_OK
)
?
FALSE
:
TRUE
;
my_xml_parser_free
(
&
p
);
return
rc
;
}
#define MAX_BUF 1024*16
#define MY_CHARSET_INDEX "Index.xml"
...
...
@@ -490,7 +261,7 @@ static my_bool my_read_charset_file(const char *filename, myf myflags)
len
=
read
(
fd
,
buf
,
MAX_BUF
);
my_close
(
fd
,
myflags
);
if
(
my_parse_charset_xml
(
buf
,
len
))
if
(
my_parse_charset_xml
(
buf
,
len
,
add_collation
))
{
#ifdef NOT_YET
printf
(
"ERROR at line %d pos %d '%s'
\n
"
,
...
...
strings/ctype.c
View file @
50989ef2
...
...
@@ -16,6 +16,7 @@
#include <my_global.h>
#include <m_ctype.h>
#include <my_xml.h>
#ifndef SCO
#include <m_string.h>
#endif
...
...
@@ -3895,6 +3896,228 @@ static CHARSET_INFO compiled_charsets[] = {
};
static
char
*
mstr
(
char
*
str
,
const
char
*
src
,
uint
l1
,
uint
l2
)
{
l1
=
l1
<
l2
?
l1
:
l2
;
memcpy
(
str
,
src
,
l1
);
str
[
l1
]
=
'\0'
;
return
str
;
}
struct
my_cs_file_section_st
{
int
state
;
const
char
*
str
;
};
#define _CS_MISC 1
#define _CS_ID 2
#define _CS_CSNAME 3
#define _CS_FAMILY 4
#define _CS_ORDER 5
#define _CS_COLNAME 6
#define _CS_FLAG 7
#define _CS_CHARSET 8
#define _CS_COLLATION 9
#define _CS_UPPERMAP 10
#define _CS_LOWERMAP 11
#define _CS_UNIMAP 12
#define _CS_COLLMAP 13
#define _CS_CTYPEMAP 14
static
struct
my_cs_file_section_st
sec
[]
=
{
{
_CS_MISC
,
"xml"
},
{
_CS_MISC
,
"xml.version"
},
{
_CS_MISC
,
"xml.encoding"
},
{
_CS_MISC
,
"charsets"
},
{
_CS_MISC
,
"charsets.max-id"
},
{
_CS_MISC
,
"charsets.description"
},
{
_CS_CHARSET
,
"charsets.charset"
},
{
_CS_CSNAME
,
"charsets.charset.name"
},
{
_CS_FAMILY
,
"charsets.charset.family"
},
{
_CS_MISC
,
"charsets.charset.alias"
},
{
_CS_MISC
,
"charsets.charset.ctype"
},
{
_CS_CTYPEMAP
,
"charsets.charset.ctype.map"
},
{
_CS_MISC
,
"charsets.charset.upper"
},
{
_CS_UPPERMAP
,
"charsets.charset.upper.map"
},
{
_CS_MISC
,
"charsets.charset.lower"
},
{
_CS_LOWERMAP
,
"charsets.charset.lower.map"
},
{
_CS_MISC
,
"charsets.charset.unicode"
},
{
_CS_UNIMAP
,
"charsets.charset.unicode.map"
},
{
_CS_COLLATION
,
"charsets.charset.collation"
},
{
_CS_COLNAME
,
"charsets.charset.collation.name"
},
{
_CS_ID
,
"charsets.charset.collation.id"
},
{
_CS_ORDER
,
"charsets.charset.collation.order"
},
{
_CS_FLAG
,
"charsets.charset.collation.flag"
},
{
_CS_COLLMAP
,
"charsets.charset.collation.map"
},
{
0
,
NULL
}
};
static
struct
my_cs_file_section_st
*
cs_file_sec
(
const
char
*
attr
,
uint
len
)
{
struct
my_cs_file_section_st
*
s
;
for
(
s
=
sec
;
s
->
str
;
s
++
)
{
if
(
!
strncmp
(
attr
,
s
->
str
,
len
))
return
s
;
}
return
NULL
;
}
typedef
struct
my_cs_file_info
{
char
csname
[
MY_CS_NAME_SIZE
];
char
name
[
MY_CS_NAME_SIZE
];
uchar
ctype
[
MY_CS_CTYPE_TABLE_SIZE
];
uchar
to_lower
[
MY_CS_TO_LOWER_TABLE_SIZE
];
uchar
to_upper
[
MY_CS_TO_UPPER_TABLE_SIZE
];
uchar
sort_order
[
MY_CS_SORT_ORDER_TABLE_SIZE
];
uint16
tab_to_uni
[
MY_CS_TO_UNI_TABLE_SIZE
];
CHARSET_INFO
cs
;
int
(
*
add_collation
)(
CHARSET_INFO
*
cs
);
}
MY_CHARSET_LOADER
;
static
int
fill_uchar
(
uchar
*
a
,
uint
size
,
const
char
*
str
,
uint
len
)
{
uint
i
=
0
;
const
char
*
s
,
*
b
,
*
e
=
str
+
len
;
for
(
s
=
str
;
s
<
e
;
i
++
)
{
for
(
;
(
s
<
e
)
&&
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
b
=
s
;
for
(
;
(
s
<
e
)
&&
!
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
if
(
s
==
b
||
i
>
size
)
break
;
a
[
i
]
=
my_strntoul
(
my_charset_latin1
,
b
,
s
-
b
,
NULL
,
16
);
}
return
0
;
}
static
int
fill_uint16
(
uint16
*
a
,
uint
size
,
const
char
*
str
,
uint
len
)
{
uint
i
=
0
;
const
char
*
s
,
*
b
,
*
e
=
str
+
len
;
for
(
s
=
str
;
s
<
e
;
i
++
)
{
for
(
;
(
s
<
e
)
&&
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
b
=
s
;
for
(
;
(
s
<
e
)
&&
!
strchr
(
"
\t\r\n
"
,
s
[
0
]);
s
++
)
;
if
(
s
==
b
||
i
>
size
)
break
;
a
[
i
]
=
my_strntol
(
my_charset_latin1
,
b
,
s
-
b
,
NULL
,
16
);
}
return
0
;
}
static
int
cs_enter
(
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
);
if
(
s
&&
(
s
->
state
==
_CS_CHARSET
))
{
bzero
(
&
i
->
cs
,
sizeof
(
i
->
cs
));
}
return
MY_XML_OK
;
}
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
;
int
rc
;
switch
(
state
){
case
_CS_COLLATION
:
rc
=
i
->
add_collation
?
i
->
add_collation
(
&
i
->
cs
)
:
MY_XML_OK
;
break
;
default:
rc
=
MY_XML_OK
;
}
return
rc
;
}
static
int
cs_value
(
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
;
int
state
=
(
s
=
cs_file_sec
(
st
->
attr
,
strlen
(
st
->
attr
)))
?
s
->
state
:
0
;
#ifndef DBUG_OFF
if
(
0
){
char
str
[
1024
];
mstr
(
str
,
attr
,
len
,
sizeof
(
str
)
-
1
);
printf
(
"VALUE %d %s='%s'
\n
"
,
state
,
st
->
attr
,
str
);
}
#endif
switch
(
state
)
{
case
_CS_ID
:
i
->
cs
.
number
=
my_strntoul
(
my_charset_latin1
,
attr
,
len
,(
char
**
)
NULL
,
0
);
break
;
case
_CS_COLNAME
:
i
->
cs
.
name
=
mstr
(
i
->
name
,
attr
,
len
,
MY_CS_NAME_SIZE
-
1
);
break
;
case
_CS_CSNAME
:
i
->
cs
.
csname
=
mstr
(
i
->
csname
,
attr
,
len
,
MY_CS_NAME_SIZE
-
1
);
break
;
case
_CS_FLAG
:
if
(
!
strncmp
(
"primary"
,
attr
,
len
))
i
->
cs
.
state
|=
MY_CS_PRIMARY
;
break
;
case
_CS_UPPERMAP
:
fill_uchar
(
i
->
to_upper
,
MY_CS_TO_UPPER_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
to_upper
=
i
->
to_upper
;
break
;
case
_CS_LOWERMAP
:
fill_uchar
(
i
->
to_lower
,
MY_CS_TO_LOWER_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
to_lower
=
i
->
to_lower
;
break
;
case
_CS_UNIMAP
:
fill_uint16
(
i
->
tab_to_uni
,
MY_CS_TO_UNI_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
tab_to_uni
=
i
->
tab_to_uni
;
break
;
case
_CS_COLLMAP
:
fill_uchar
(
i
->
sort_order
,
MY_CS_SORT_ORDER_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
sort_order
=
i
->
sort_order
;
break
;
case
_CS_CTYPEMAP
:
fill_uchar
(
i
->
ctype
,
MY_CS_CTYPE_TABLE_SIZE
,
attr
,
len
);
i
->
cs
.
ctype
=
i
->
ctype
;
break
;
}
return
MY_XML_OK
;
}
my_bool
my_parse_charset_xml
(
const
char
*
buf
,
uint
len
,
int
(
*
add_collation
)(
CHARSET_INFO
*
cs
))
{
MY_XML_PARSER
p
;
struct
my_cs_file_info
i
;
my_bool
rc
;
my_xml_parser_create
(
&
p
);
my_xml_set_enter_handler
(
&
p
,
cs_enter
);
my_xml_set_value_handler
(
&
p
,
cs_value
);
my_xml_set_leave_handler
(
&
p
,
cs_leave
);
i
.
add_collation
=
add_collation
;
my_xml_set_user_data
(
&
p
,(
void
*
)
&
i
);
rc
=
(
my_xml_parse
(
&
p
,
buf
,
len
)
==
MY_XML_OK
)
?
FALSE
:
TRUE
;
my_xml_parser_free
(
&
p
);
return
rc
;
}
CHARSET_INFO
*
my_charset_latin1
=
&
compiled_charsets
[
0
];
CHARSET_INFO
*
all_charsets
[
256
];
CHARSET_INFO
*
default_charset_info
=
&
compiled_charsets
[
0
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment