Jacek Caban : msxml3: Don't use xmlnode' s IXMLDOMNode iface in replaceChild implementations.
Alexandre Julliard
julliard at winehq.org
Wed Oct 13 11:43:11 CDT 2010
Module: wine
Branch: master
Commit: 6d20b3f96a8b70045403e133c3ee9f93cc12e609
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d20b3f96a8b70045403e133c3ee9f93cc12e609
Author: Jacek Caban <jacek at 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(
More information about the wine-cvs
mailing list