Index: tree.c =================================================================== RCS file: /cvs/gnome/gnome-xml/tree.c,v retrieving revision 1.234 diff -u -r1.234 tree.c --- tree.c 1 Jan 2003 21:06:49 -0000 1.234 +++ tree.c 5 Jan 2003 17:28:33 -0000 @@ -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); }