diff options
author | bar@mysql.com <> | 2006-04-11 17:12:29 +0500 |
---|---|---|
committer | bar@mysql.com <> | 2006-04-11 17:12:29 +0500 |
commit | 5c0e1d5e4d7a6190215202cb6e4d8e357f35810e (patch) | |
tree | 26c768f76eadac3ae63d3707af3d67b7de917c8f /strings | |
parent | 4000215401e4371afb79282c8b6a581d8002f752 (diff) | |
parent | 9bf1fb4c198f6a80dbee8d0ff3e2f279a415ba89 (diff) | |
download | mariadb-git-5c0e1d5e4d7a6190215202cb6e4d8e357f35810e.tar.gz |
Merge mysql.com:/usr/home/bar/mysql-5.1-new
into mysql.com:/usr/home/bar/mysql-5.1-new.b18285
Diffstat (limited to 'strings')
-rw-r--r-- | strings/xml.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/strings/xml.c b/strings/xml.c index 705da592257..4c09e85604d 100644 --- a/strings/xml.c +++ b/strings/xml.c @@ -30,6 +30,7 @@ #define MY_XML_TEXT 'T' #define MY_XML_QUESTION '?' #define MY_XML_EXCLAM '!' +#define MY_XML_CDATA 'D' typedef struct xml_attr_st { @@ -45,6 +46,7 @@ static const char *lex2str(int lex) case MY_XML_EOF: return "EOF"; case MY_XML_STRING: return "STRING"; case MY_XML_IDENT: return "IDENT"; + case MY_XML_CDATA: return "CDATA"; case MY_XML_EQ: return "'='"; case MY_XML_LT: return "'<'"; case MY_XML_GT: return "'>'"; @@ -90,6 +92,20 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) a->end=p->cur; lex=MY_XML_COMMENT; } + else if (!bcmp(p->cur, "<![CDATA[",9)) + { + p->cur+= 9; + for (; p->cur < p->end - 2 ; p->cur++) + { + if (p->cur[0] == ']' && p->cur[1] == ']' && p->cur[2] == '>') + { + p->cur+= 3; + a->end= p->cur; + break; + } + } + lex= MY_XML_CDATA; + } else if (strchr("?=/<>!",p->cur[0])) { p->cur++; @@ -215,7 +231,13 @@ int my_xml_parse(MY_XML_PARSER *p,const char *str, uint len) lex=my_xml_scan(p,&a); if (MY_XML_COMMENT == lex) + continue; + + if (lex == MY_XML_CDATA) { + a.beg+= 9; + a.end-= 3; + my_xml_value(p, a.beg, (uint) (a.end-a.beg)); continue; } |