summaryrefslogtreecommitdiff
path: root/bindings/xml/xmlparser.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2007-09-19 22:06:26 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2007-09-19 22:06:26 +0000
commit016dd743cf77b2536015e4e9594716dfdc81d02d (patch)
treef03cc1aae39835468e3e581aa46dcb0e9bc0ff17 /bindings/xml/xmlparser.c
parent802104d9b0f45c55f16326b755f2b1612eb4ef87 (diff)
downloadlibdom-016dd743cf77b2536015e4e9594716dfdc81d02d.tar.gz
libdom-016dd743cf77b2536015e4e9594716dfdc81d02d.tar.bz2
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
Diffstat (limited to 'bindings/xml/xmlparser.c')
-rw-r--r--bindings/xml/xmlparser.c20
1 files changed, 12 insertions, 8 deletions
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);