applied patch from Lukas Schroeder for register callbacks modified patch
* tree.c : applied patch from Lukas Schroeder for register callbacks
* valid.c: modified patch from Lukas Schroeder to test
register callbacks with --chkregister
Daniel
diff --git a/tree.c b/tree.c
index bd78564..4134f59 100644
--- a/tree.c
+++ b/tree.c
@@ -447,6 +447,9 @@
}
}
}
+
+ if (xmlRegisterNodeDefaultValue)
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
return(cur);
}
@@ -1300,6 +1303,9 @@
cur->prev = prev;
}
}
+
+ if (xmlRegisterNodeDefaultValue)
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
return(cur);
}
@@ -1579,6 +1585,9 @@
cur->name = name;
cur->ns = ns;
+
+ if (xmlRegisterNodeDefaultValue)
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
return(cur);
}
@@ -3202,13 +3211,22 @@
if (parent != NULL) {
xmlNodePtr tmp;
+ /*
+ * this is a tricky part for the node register thing:
+ * in case ret does get coalesced in xmlAddChild
+ * the deregister-node callback is called; so we register ret now already
+ */
+ if (xmlRegisterNodeDefaultValue)
+ xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
+
tmp = xmlAddChild(parent, ret);
/* node could have coalesced */
if (tmp != ret)
return(tmp);
}
- if (!recursive) return(ret);
+ if (!recursive)
+ goto out;
if (node->nsDef != NULL)
ret->nsDef = xmlCopyNamespaceList(node->nsDef);
@@ -3255,6 +3273,11 @@
ret->children = xmlStaticCopyNodeList(node->children, doc, ret);
UPDATE_LAST_CHILD_AND_PARENT(ret)
}
+
+out:
+ /* if parent != NULL we already registered the node above */
+ if (parent == NULL && xmlRegisterNodeDefaultValue)
+ xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
return(ret);
}