Module: wine Branch: master Commit: 6d20b3f96a8b70045403e133c3ee9f93cc12e609 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d20b3f96a8b70045403e133c3...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Oct 13 15:11:32 2010 +0200
msxml3: Don't use xmlnode's IXMLDOMNode iface in replaceChild implementations.
---
dlls/msxml3/attribute.c | 5 ++++- dlls/msxml3/cdata.c | 5 ++++- dlls/msxml3/comment.c | 5 ++++- dlls/msxml3/docfrag.c | 6 +++++- dlls/msxml3/domdoc.c | 5 ++++- dlls/msxml3/element.c | 5 ++++- dlls/msxml3/entityref.c | 5 ++++- dlls/msxml3/msxml_private.h | 1 + dlls/msxml3/node.c | 35 +++++++++++++++++++++-------------- dlls/msxml3/pi.c | 5 ++++- dlls/msxml3/text.c | 5 ++++- 11 files changed, 59 insertions(+), 23 deletions(-)
diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c index adf7eda..15c84a6 100644 --- a/dlls/msxml3/attribute.c +++ b/dlls/msxml3/attribute.c @@ -318,7 +318,10 @@ static HRESULT WINAPI domattr_replaceChild( IXMLDOMNode** outOldNode) { domattr *This = impl_from_IXMLDOMAttribute( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p) needs tests\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI domattr_removeChild( diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c index d09326c..b87bbe1 100644 --- a/dlls/msxml3/cdata.c +++ b/dlls/msxml3/cdata.c @@ -329,7 +329,10 @@ static HRESULT WINAPI domcdata_replaceChild( IXMLDOMNode** outOldNode) { domcdata *This = impl_from_IXMLDOMCDATASection( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p) needs tests\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI domcdata_removeChild( diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c index d6a40f1..0f2b61a 100644 --- a/dlls/msxml3/comment.c +++ b/dlls/msxml3/comment.c @@ -322,7 +322,10 @@ static HRESULT WINAPI domcomment_replaceChild( IXMLDOMNode** outOldNode) { domcomment *This = impl_from_IXMLDOMComment( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p) needs tests\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI domcomment_removeChild( diff --git a/dlls/msxml3/docfrag.c b/dlls/msxml3/docfrag.c index 4a108ec..99f8e81 100644 --- a/dlls/msxml3/docfrag.c +++ b/dlls/msxml3/docfrag.c @@ -325,7 +325,11 @@ static HRESULT WINAPI domfrag_replaceChild( IXMLDOMNode** outOldNode) { domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + TRACE("(%p)->(%p %p %p)\n", This, newNode, oldNode, outOldNode); + + /* TODO: test */ + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI domfrag_removeChild( diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index 1ca1746..9d3f61f 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -1029,7 +1029,10 @@ static HRESULT WINAPI domdoc_replaceChild( IXMLDOMNode** outOldChild) { domdoc *This = impl_from_IXMLDOMDocument3( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newChild, oldChild, outOldChild ); + + TRACE("(%p)->(%p %p %p)\n", This, newChild, oldChild, outOldChild); + + return node_replace_child(&This->node, newChild, oldChild, outOldChild); }
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c index a5f4a55..16651e8 100644 --- a/dlls/msxml3/element.c +++ b/dlls/msxml3/element.c @@ -334,7 +334,10 @@ static HRESULT WINAPI domelem_replaceChild( IXMLDOMNode** outOldNode) { domelem *This = impl_from_IXMLDOMElement( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + TRACE("(%p)->(%p %p %p)\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI domelem_removeChild( diff --git a/dlls/msxml3/entityref.c b/dlls/msxml3/entityref.c index 794bb5e..cc2aa1d 100644 --- a/dlls/msxml3/entityref.c +++ b/dlls/msxml3/entityref.c @@ -320,7 +320,10 @@ static HRESULT WINAPI entityref_replaceChild( IXMLDOMNode** outOldNode) { entityref *This = impl_from_IXMLDOMEntityReference( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p) needs test\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI entityref_removeChild( diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h index 6d97e96..0fa1f45 100644 --- a/dlls/msxml3/msxml_private.h +++ b/dlls/msxml3/msxml_private.h @@ -169,6 +169,7 @@ extern HRESULT node_get_last_child(xmlnode*,IXMLDOMNode**); extern HRESULT node_get_previous_sibling(xmlnode*,IXMLDOMNode**); extern HRESULT node_get_next_sibling(xmlnode*,IXMLDOMNode**); extern HRESULT node_insert_before(xmlnode*,IXMLDOMNode*,const VARIANT*,IXMLDOMNode**); +extern HRESULT node_replace_child(xmlnode*,IXMLDOMNode*,IXMLDOMNode*,IXMLDOMNode**);
extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **document); diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index d466780..8a92fe6 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -450,26 +450,20 @@ static HRESULT WINAPI xmlnode_insertBefore( return E_NOTIMPL; }
-static HRESULT WINAPI xmlnode_replaceChild( - IXMLDOMNode *iface, - IXMLDOMNode* newChild, - IXMLDOMNode* oldChild, - IXMLDOMNode** outOldChild) +HRESULT node_replace_child(xmlnode *This, IXMLDOMNode *newChild, IXMLDOMNode *oldChild, + IXMLDOMNode **ret) { - xmlnode *This = impl_from_IXMLDOMNode( iface ); xmlnode *old_child, *new_child; xmlDocPtr leaving_doc; xmlNode *my_ancestor;
- TRACE("(%p)->(%p %p %p)\n", This, newChild, oldChild, outOldChild); - /* Do not believe any documentation telling that newChild == NULL means removal. It does certainly *not* apply to msxml3! */ if(!newChild || !oldChild) return E_INVALIDARG;
- if(outOldChild) - *outOldChild = NULL; + if(ret) + *ret = NULL;
old_child = get_node_obj(oldChild); if(!old_child) { @@ -479,7 +473,7 @@ static HRESULT WINAPI xmlnode_replaceChild(
if(old_child->node->parent != This->node) { - WARN("childNode %p is not a child of %p\n", oldChild, iface); + WARN("childNode %p is not a child of %p\n", oldChild, This); return E_INVALIDARG; }
@@ -511,15 +505,25 @@ static HRESULT WINAPI xmlnode_replaceChild(
xmldoc_add_orphan(old_child->node->doc, old_child->node);
- if(outOldChild) + if(ret) { IXMLDOMNode_AddRef(oldChild); - *outOldChild = oldChild; + *ret = oldChild; }
return S_OK; }
+static HRESULT WINAPI xmlnode_replaceChild( + IXMLDOMNode *iface, + IXMLDOMNode* newChild, + IXMLDOMNode* oldChild, + IXMLDOMNode** outOldChild) +{ + ERR("Should not be called\n"); + return E_NOTIMPL; +} + static HRESULT WINAPI xmlnode_removeChild( IXMLDOMNode *iface, IXMLDOMNode* childNode, @@ -1852,7 +1856,10 @@ static HRESULT WINAPI unknode_replaceChild( IXMLDOMNode** outOldNode) { unknode *This = impl_from_unkIXMLDOMNode( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p)\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI unknode_removeChild( diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c index 9d6a995..2d33d80 100644 --- a/dlls/msxml3/pi.c +++ b/dlls/msxml3/pi.c @@ -336,7 +336,10 @@ static HRESULT WINAPI dom_pi_replaceChild( IXMLDOMNode** outOldNode) { dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p) needs test\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI dom_pi_removeChild( diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c index a890d4a..be61376 100644 --- a/dlls/msxml3/text.c +++ b/dlls/msxml3/text.c @@ -335,7 +335,10 @@ static HRESULT WINAPI domtext_replaceChild( IXMLDOMNode** outOldNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); + + FIXME("(%p)->(%p %p %p) needs test\n", This, newNode, oldNode, outOldNode); + + return node_replace_child(&This->node, newNode, oldNode, outOldNode); }
static HRESULT WINAPI domtext_removeChild(