MySQL 8.3.0
Source Code Documentation
xml.cc File Reference
#include <cstdint>
#include <cstdio>
#include <cstring>
#include <limits>
#include "my_xml.h"
#include "string_with_len.h"
#include "strings/str_alloc.h"

Classes

struct  MY_XML_ATTR
 

Macros

#define MY_XML_UNKNOWN   'U'
 
#define MY_XML_EOF   'E'
 
#define MY_XML_STRING   'S'
 
#define MY_XML_IDENT   'I'
 
#define MY_XML_EQ   '='
 
#define MY_XML_LT   '<'
 
#define MY_XML_GT   '>'
 
#define MY_XML_SLASH   '/'
 
#define MY_XML_COMMENT   'C'
 
#define MY_XML_TEXT   'T'
 
#define MY_XML_QUESTION   '?'
 
#define MY_XML_EXCLAM   '!'
 
#define MY_XML_CDATA   'D'
 
#define MY_XML_ID0   0x01 /* Identifier initial character */
 
#define MY_XML_ID1   0x02 /* Identifier medial character */
 
#define MY_XML_SPC   0x08 /* Spacing character */
 
#define my_xml_is_space(c)   (my_xml_ctype[(uint8_t)(c)] & MY_XML_SPC)
 
#define my_xml_is_id0(c)   (my_xml_ctype[(uint8_t)(c)] & MY_XML_ID0)
 
#define my_xml_is_id1(c)   (my_xml_ctype[(uint8_t)(c)] & MY_XML_ID1)
 

Functions

static const char * lex2str (int lex)
 
static void my_xml_norm_text (MY_XML_ATTR *a)
 
static bool my_xml_parser_prefix_cmp (MY_XML_PARSER *p, const char *s, size_t slen)
 
static int my_xml_scan (MY_XML_PARSER *p, MY_XML_ATTR *a)
 
static int my_xml_value (MY_XML_PARSER *st, const char *str, size_t len)
 
static int my_xml_attr_ensure_space (MY_XML_PARSER *st, size_t len)
 Ensure the attr buffer is wide enough to hold the new value. More...
 
static void my_xml_attr_rewind (MY_XML_PARSER *p)
 rewind the attr buffer to initial state More...
 
static int my_xml_enter (MY_XML_PARSER *st, const char *str, size_t len)
 
static void mstr (char *s, const char *src, size_t l1, size_t l2)
 
static int my_xml_leave (MY_XML_PARSER *p, const char *str, size_t slen)
 
int my_xml_parse (MY_XML_PARSER *p, const char *str, size_t len)
 
void my_xml_parser_create (MY_XML_PARSER *p)
 
void my_xml_parser_free (MY_XML_PARSER *p)
 
void my_xml_set_value_handler (MY_XML_PARSER *p, int(*action)(MY_XML_PARSER *p, const char *s, size_t l))
 
void my_xml_set_enter_handler (MY_XML_PARSER *p, int(*action)(MY_XML_PARSER *p, const char *s, size_t l))
 
void my_xml_set_leave_handler (MY_XML_PARSER *p, int(*action)(MY_XML_PARSER *p, const char *s, size_t l))
 
void my_xml_set_user_data (MY_XML_PARSER *p, void *user_data)
 
const char * my_xml_error_string (MY_XML_PARSER *p)
 
size_t my_xml_error_pos (MY_XML_PARSER *p)
 
unsigned my_xml_error_lineno (MY_XML_PARSER *st)
 

Variables

static char my_xml_ctype [256]
 

Macro Definition Documentation

◆ MY_XML_CDATA

#define MY_XML_CDATA   'D'

◆ MY_XML_COMMENT

#define MY_XML_COMMENT   'C'

◆ MY_XML_EOF

#define MY_XML_EOF   'E'

◆ MY_XML_EQ

#define MY_XML_EQ   '='

◆ MY_XML_EXCLAM

#define MY_XML_EXCLAM   '!'

◆ MY_XML_GT

#define MY_XML_GT   '>'

◆ MY_XML_ID0

#define MY_XML_ID0   0x01 /* Identifier initial character */

◆ MY_XML_ID1

#define MY_XML_ID1   0x02 /* Identifier medial character */

◆ MY_XML_IDENT

#define MY_XML_IDENT   'I'

◆ my_xml_is_id0

#define my_xml_is_id0 (   c)    (my_xml_ctype[(uint8_t)(c)] & MY_XML_ID0)

◆ my_xml_is_id1

#define my_xml_is_id1 (   c)    (my_xml_ctype[(uint8_t)(c)] & MY_XML_ID1)

◆ my_xml_is_space

#define my_xml_is_space (   c)    (my_xml_ctype[(uint8_t)(c)] & MY_XML_SPC)

◆ MY_XML_LT

#define MY_XML_LT   '<'

◆ MY_XML_QUESTION

#define MY_XML_QUESTION   '?'

◆ MY_XML_SLASH

#define MY_XML_SLASH   '/'

◆ MY_XML_SPC

#define MY_XML_SPC   0x08 /* Spacing character */

◆ MY_XML_STRING

#define MY_XML_STRING   'S'

◆ MY_XML_TEXT

#define MY_XML_TEXT   'T'

◆ MY_XML_UNKNOWN

#define MY_XML_UNKNOWN   'U'

Function Documentation

◆ lex2str()

static const char * lex2str ( int  lex)
static

◆ mstr()

static void mstr ( char *  s,
const char *  src,
size_t  l1,
size_t  l2 
)
static

◆ my_xml_attr_ensure_space()

static int my_xml_attr_ensure_space ( MY_XML_PARSER st,
size_t  len 
)
static

Ensure the attr buffer is wide enough to hold the new value.

Expand and/or allocate dynamic buffer as needed to hold the concatenated path and the terminating zero.

Parameters
stthe parser instance
lenthe length of the attribute to be added
Returns
state
Return values
1failed
0success

◆ my_xml_attr_rewind()

static void my_xml_attr_rewind ( MY_XML_PARSER p)
static

rewind the attr buffer to initial state

◆ my_xml_enter()

static int my_xml_enter ( MY_XML_PARSER st,
const char *  str,
size_t  len 
)
static

◆ my_xml_error_lineno()

unsigned my_xml_error_lineno ( MY_XML_PARSER st)

◆ my_xml_error_pos()

size_t my_xml_error_pos ( MY_XML_PARSER p)

◆ my_xml_error_string()

const char * my_xml_error_string ( MY_XML_PARSER p)

◆ my_xml_leave()

static int my_xml_leave ( MY_XML_PARSER p,
const char *  str,
size_t  slen 
)
static

◆ my_xml_norm_text()

static void my_xml_norm_text ( MY_XML_ATTR a)
static

◆ my_xml_parse()

int my_xml_parse ( MY_XML_PARSER p,
const char *  str,
size_t  len 
)

◆ my_xml_parser_create()

void my_xml_parser_create ( MY_XML_PARSER p)

◆ my_xml_parser_free()

void my_xml_parser_free ( MY_XML_PARSER p)

◆ my_xml_parser_prefix_cmp()

static bool my_xml_parser_prefix_cmp ( MY_XML_PARSER p,
const char *  s,
size_t  slen 
)
inlinestatic

◆ my_xml_scan()

static int my_xml_scan ( MY_XML_PARSER p,
MY_XML_ATTR a 
)
static

◆ my_xml_set_enter_handler()

void my_xml_set_enter_handler ( MY_XML_PARSER p,
int(*)(MY_XML_PARSER *p, const char *s, size_t l)  action 
)

◆ my_xml_set_leave_handler()

void my_xml_set_leave_handler ( MY_XML_PARSER p,
int(*)(MY_XML_PARSER *p, const char *s, size_t l)  action 
)

◆ my_xml_set_user_data()

void my_xml_set_user_data ( MY_XML_PARSER p,
void *  user_data 
)

◆ my_xml_set_value_handler()

void my_xml_set_value_handler ( MY_XML_PARSER p,
int(*)(MY_XML_PARSER *p, const char *s, size_t l)  action 
)

◆ my_xml_value()

static int my_xml_value ( MY_XML_PARSER st,
const char *  str,
size_t  len 
)
static

Variable Documentation

◆ my_xml_ctype

char my_xml_ctype[256]
static