From b2256675eaf9cf9fa239da93db4f205d97fc710c Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 19 Sep 2007 22:06:26 +0000 Subject: Begin implementation of DocumentType class Remove dom_document_set_doctype() -- dom_node_insert_before() (and thus _append_child()) can be used to achieve the same effect. DocumentType node is now a child of the Document node (as it should have been) rather than a hidden field. Make dom_node_destroy() aware of DocumentType nodes potentially having no owner. Make dom_node_finalise() aware of it, too. Make dom_node_get_owner_document() return NULL for Document nodes, as per the spec. Fix bug in dom_node_insert_before() -- previously it failed to catch attempts to insert a second root element. Make dom_node_insert_before() handle DocumentType nodes appropriately. Implement XML binding's dom_implementation_create_document_type() function. Fix XML binding's dom_implementation_create_document() implementation to cope with changed API relating to doctype insertion. Fix up XML parser wrapper to cater for new doctype insertion mechanism. Also sprinkle some NULL about for paranoia purposes. svn path=/trunk/dom/; revision=3551 --- bindings/xml/xmlparser.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'bindings/xml/xmlparser.c') diff --git a/bindings/xml/xmlparser.c b/bindings/xml/xmlparser.c index 93c2506..6f1516b 100644 --- a/bindings/xml/xmlparser.c +++ b/bindings/xml/xmlparser.c @@ -637,7 +637,7 @@ void xml_parser_add_node(xml_parser *parser, struct dom_node *parent, void xml_parser_add_element_node(xml_parser *parser, struct dom_node *parent, xmlNodePtr child) { - struct dom_element *el, *ins_el; + struct dom_element *el, *ins_el = NULL; xmlAttrPtr a; dom_exception err; @@ -896,7 +896,7 @@ cleanup: void xml_parser_add_text_node(xml_parser *parser, struct dom_node *parent, xmlNodePtr child) { - struct dom_text *text, *ins_text; + struct dom_text *text, *ins_text = NULL; struct dom_string *data; dom_exception err; @@ -957,7 +957,7 @@ void xml_parser_add_text_node(xml_parser *parser, struct dom_node *parent, void xml_parser_add_cdata_section(xml_parser *parser, struct dom_node *parent, xmlNodePtr child) { - struct dom_cdata_section *cdata, *ins_cdata; + struct dom_cdata_section *cdata, *ins_cdata = NULL; struct dom_string *data; dom_exception err; @@ -1018,7 +1018,7 @@ void xml_parser_add_cdata_section(xml_parser *parser, void xml_parser_add_entity_reference(xml_parser *parser, struct dom_node *parent, xmlNodePtr child) { - struct dom_entity_reference *entity, *ins_entity; + struct dom_entity_reference *entity, *ins_entity = NULL; struct dom_string *name; xmlNodePtr c; dom_exception err; @@ -1086,7 +1086,7 @@ void xml_parser_add_entity_reference(xml_parser *parser, void xml_parser_add_comment(xml_parser *parser, struct dom_node *parent, xmlNodePtr child) { - struct dom_comment *comment, *ins_comment; + struct dom_comment *comment, *ins_comment = NULL; struct dom_string *data; dom_exception err; @@ -1148,7 +1148,7 @@ void xml_parser_add_document_type(xml_parser *parser, struct dom_node *parent, xmlNodePtr child) { xmlDtdPtr dtd = (xmlDtdPtr) child; - struct dom_document_type *doctype; + struct dom_document_type *doctype, *ins_doctype = NULL; struct dom_string *qname, *public_id, *system_id; dom_exception err; @@ -1207,8 +1207,8 @@ void xml_parser_add_document_type(xml_parser *parser, dom_string_unref(qname); /* Add doctype to document */ - err = dom_document_set_doctype((struct dom_document *) parent, - doctype); + err = dom_node_append_child(parent, (struct dom_node *) doctype, + (struct dom_node **) &ins_doctype); if (err != DOM_NO_ERR) { dom_node_unref((struct dom_node *) doctype); parser->msg(XML_MSG_CRITICAL, parser->mctx, @@ -1216,6 +1216,10 @@ void xml_parser_add_document_type(xml_parser *parser, return; } + /* Not interested in inserted node */ + if (ins_doctype != NULL) + dom_node_unref((struct dom_node *) ins_doctype); + /* Link nodes together */ err = xml_parser_link_nodes(parser, (struct dom_node *) doctype, child); -- cgit v1.2.3