summaryrefslogtreecommitdiff
path: root/src/libspucmml
diff options
context:
space:
mode:
authorMatt Kraai <kraai@ftbfs.org>2009-10-15 22:01:24 +0100
committerMatt Kraai <kraai@ftbfs.org>2009-10-15 22:01:24 +0100
commit6efc8270ef8f75a842930a0f703cb3539f106d4b (patch)
tree441ef4577e24fe4dfef3ee823fbbf74f9920b2ab /src/libspucmml
parent93d452a4570cf3f4dd81c6c2cab66aa604f39e05 (diff)
downloadxine-lib-6efc8270ef8f75a842930a0f703cb3539f106d4b.tar.gz
xine-lib-6efc8270ef8f75a842930a0f703cb3539f106d4b.tar.bz2
Make the XML lexer and parser re-entrant
Diffstat (limited to 'src/libspucmml')
-rw-r--r--src/libspucmml/xine_cmml_decoder.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libspucmml/xine_cmml_decoder.c b/src/libspucmml/xine_cmml_decoder.c
index c3da1b0fd..9cd446988 100644
--- a/src/libspucmml/xine_cmml_decoder.c
+++ b/src/libspucmml/xine_cmml_decoder.c
@@ -239,6 +239,7 @@ static void spudec_decode_data (spu_decoder_t *this_gen, buf_element_t *buf) {
spucmml_decoder_t *this = (spucmml_decoder_t *) this_gen;
+ xml_parser_t *xml_parser;
xml_node_t *packet_xml_root;
char * anchor_text = NULL;
@@ -248,12 +249,15 @@ static void spudec_decode_data (spu_decoder_t *this_gen, buf_element_t *buf) {
/* parse the CMML */
- xml_parser_init (str, strlen (str), XML_PARSER_CASE_INSENSITIVE);
- if (xml_parser_build_tree(&packet_xml_root) != XML_PARSER_OK) {
+ xml_parser = xml_parser_init_r (str, strlen (str), XML_PARSER_CASE_INSENSITIVE);
+ if (xml_parser_build_tree_r(xml_parser, &packet_xml_root) != XML_PARSER_OK) {
lprintf ("warning: invalid XML packet detected in CMML track\n");
+ xml_parser_finalize_r(xml_parser);
return;
}
+ xml_parser_finalize_r(xml_parser);
+
if (strcasecmp(packet_xml_root->name, "head") == 0) {
/* found a <head>...</head> packet: need to parse the title */