Jacek Caban : msxml3: Don't use xmlnode' s IXMLDOMNode iface in get_nodeValue implementations.
Alexandre Julliard
julliard at winehq.org
Mon Sep 6 13:53:10 CDT 2010
Module: wine
Branch: master
Commit: 6ce537baacd6a78ceb8165238941eef9c65e8f8a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6ce537baacd6a78ceb8165238941eef9c65e8f8a
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sat Sep 4 17:56:45 2010 +0200
msxml3: Don't use xmlnode's IXMLDOMNode iface in get_nodeValue implementations.
---
dlls/msxml3/attribute.c | 14 ++++++--
dlls/msxml3/cdata.c | 7 +++-
dlls/msxml3/comment.c | 7 +++-
dlls/msxml3/docfrag.c | 11 ++++++-
dlls/msxml3/domdoc.c | 10 ++++++-
dlls/msxml3/element.c | 12 ++++++-
dlls/msxml3/entityref.c | 11 ++++++-
dlls/msxml3/msxml_private.h | 1 +
dlls/msxml3/node.c | 65 ++++++++++++++++---------------------------
dlls/msxml3/pi.c | 7 +++-
dlls/msxml3/text.c | 24 ++++++++-------
11 files changed, 100 insertions(+), 69 deletions(-)
diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c
index 30a05cd..2e06512 100644
--- a/dlls/msxml3/attribute.c
+++ b/dlls/msxml3/attribute.c
@@ -190,10 +190,13 @@ static HRESULT WINAPI domattr_get_nodeName(
static HRESULT WINAPI domattr_get_nodeValue(
IXMLDOMAttribute *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
domattr *This = impl_from_IXMLDOMAttribute( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ return node_get_content(&This->node, value);
}
static HRESULT WINAPI domattr_put_nodeValue(
@@ -487,10 +490,13 @@ static HRESULT WINAPI domattr_get_name(
static HRESULT WINAPI domattr_get_value(
IXMLDOMAttribute *iface,
- VARIANT *var1)
+ VARIANT *value)
{
domattr *This = impl_from_IXMLDOMAttribute( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ return node_get_content(&This->node, value);
}
static HRESULT WINAPI domattr_put_value(
diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c
index 903f36f..b29a6cd 100644
--- a/dlls/msxml3/cdata.c
+++ b/dlls/msxml3/cdata.c
@@ -201,10 +201,13 @@ static HRESULT WINAPI domcdata_get_nodeName(
static HRESULT WINAPI domcdata_get_nodeValue(
IXMLDOMCDATASection *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ return node_get_content(&This->node, value);
}
static HRESULT WINAPI domcdata_put_nodeValue(
diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c
index 513ce0c..3649daf 100644
--- a/dlls/msxml3/comment.c
+++ b/dlls/msxml3/comment.c
@@ -194,10 +194,13 @@ static HRESULT WINAPI domcomment_get_nodeName(
static HRESULT WINAPI domcomment_get_nodeValue(
IXMLDOMComment *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ return node_get_content(&This->node, value);
}
static HRESULT WINAPI domcomment_put_nodeValue(
diff --git a/dlls/msxml3/docfrag.c b/dlls/msxml3/docfrag.c
index 5264d96..fb6308e 100644
--- a/dlls/msxml3/docfrag.c
+++ b/dlls/msxml3/docfrag.c
@@ -194,10 +194,17 @@ static HRESULT WINAPI domfrag_get_nodeName(
static HRESULT WINAPI domfrag_get_nodeValue(
IXMLDOMDocumentFragment *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
domfrag *This = impl_from_IXMLDOMDocumentFragment( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ FIXME("(%p)->(%p)\n", This, value);
+
+ if(!value)
+ return E_INVALIDARG;
+
+ V_VT(value) = VT_NULL;
+ return S_FALSE;
}
static HRESULT WINAPI domfrag_put_nodeValue(
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 6046c1e..d591afa 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -700,7 +700,15 @@ static HRESULT WINAPI domdoc_get_nodeValue(
VARIANT* value )
{
domdoc *This = impl_from_IXMLDOMDocument3( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), value );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ if(!value)
+ return E_INVALIDARG;
+
+ V_VT(value) = VT_NULL;
+ V_BSTR(value) = NULL; /* tests show that we should do this */
+ return S_FALSE;
}
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 4e5522c..0e8559a 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -202,10 +202,18 @@ static HRESULT WINAPI domelem_get_nodeName(
static HRESULT WINAPI domelem_get_nodeValue(
IXMLDOMElement *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
domelem *This = impl_from_IXMLDOMElement( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ if(!value)
+ return E_INVALIDARG;
+
+ V_VT(value) = VT_NULL;
+ V_BSTR(value) = NULL; /* tests show that we should do this */
+ return S_FALSE;
}
static HRESULT WINAPI domelem_put_nodeValue(
diff --git a/dlls/msxml3/entityref.c b/dlls/msxml3/entityref.c
index db7d162..a779d92 100644
--- a/dlls/msxml3/entityref.c
+++ b/dlls/msxml3/entityref.c
@@ -190,10 +190,17 @@ static HRESULT WINAPI entityref_get_nodeName(
static HRESULT WINAPI entityref_get_nodeValue(
IXMLDOMEntityReference *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
entityref *This = impl_from_IXMLDOMEntityReference( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ FIXME("(%p)->(%p)\n", This, value);
+
+ if(!value)
+ return E_INVALIDARG;
+
+ V_VT(value) = VT_NULL;
+ return S_FALSE;
}
static HRESULT WINAPI entityref_put_nodeValue(
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index b249d90..3fc9666 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -160,6 +160,7 @@ extern BOOL node_query_interface(xmlnode*,REFIID,void**);
extern xmlnode *get_node_obj(IXMLDOMNode*);
extern HRESULT node_get_nodeName(xmlnode*,BSTR*);
+extern HRESULT node_get_content(xmlnode*,VARIANT*);
extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **document);
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index f057a95..905ae41 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -198,52 +198,28 @@ static HRESULT WINAPI xmlnode_get_nodeName(
return E_NOTIMPL;
}
-static HRESULT WINAPI xmlnode_get_nodeValue(
- IXMLDOMNode *iface,
- VARIANT* value)
+HRESULT node_get_content(xmlnode *This, VARIANT *value)
{
- xmlnode *This = impl_from_IXMLDOMNode( iface );
- HRESULT r = S_FALSE;
-
- TRACE("(%p)->(%p)\n", This, value);
+ xmlChar *content;
if(!value)
return E_INVALIDARG;
- V_BSTR(value) = NULL;
- V_VT(value) = VT_NULL;
-
- switch ( This->node->type )
- {
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- case XML_ATTRIBUTE_NODE:
- {
- xmlChar *content = xmlNodeGetContent(This->node);
- V_VT(value) = VT_BSTR;
- V_BSTR(value) = bstr_from_xmlChar( content );
- xmlFree(content);
- r = S_OK;
- break;
- }
- case XML_TEXT_NODE:
- V_VT(value) = VT_BSTR;
- V_BSTR(value) = bstr_from_xmlChar( This->node->content );
- r = S_OK;
- break;
- case XML_ELEMENT_NODE:
- case XML_DOCUMENT_NODE:
- /* these seem to return NULL */
- break;
+ content = xmlNodeGetContent(This->node);
+ V_VT(value) = VT_BSTR;
+ V_BSTR(value) = bstr_from_xmlChar( content );
+ xmlFree(content);
- default:
- FIXME("node %p type %d\n", This, This->node->type);
- }
-
- TRACE("%p returned %s\n", This, debugstr_w( V_BSTR(value) ) );
+ TRACE("%p returned %s\n", This, debugstr_w(V_BSTR(value)));
+ return S_OK;
+}
- return r;
+static HRESULT WINAPI xmlnode_get_nodeValue(
+ IXMLDOMNode *iface,
+ VARIANT* value)
+{
+ ERR("Should not be called\n");
+ return E_NOTIMPL;
}
static HRESULT WINAPI xmlnode_put_nodeValue(
@@ -1821,10 +1797,17 @@ static HRESULT WINAPI unknode_get_nodeName(
static HRESULT WINAPI unknode_get_nodeValue(
IXMLDOMNode *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
unknode *This = impl_from_unkIXMLDOMNode( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ FIXME("(%p)->(%p)\n", This, value);
+
+ if(!value)
+ return E_INVALIDARG;
+
+ V_VT(value) = VT_NULL;
+ return S_FALSE;
}
static HRESULT WINAPI unknode_put_nodeValue(
diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c
index aeb296e..518fa66 100644
--- a/dlls/msxml3/pi.c
+++ b/dlls/msxml3/pi.c
@@ -191,10 +191,13 @@ static HRESULT WINAPI dom_pi_get_nodeName(
static HRESULT WINAPI dom_pi_get_nodeValue(
IXMLDOMProcessingInstruction *iface,
- VARIANT* var1 )
+ VARIANT* value)
{
dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ return node_get_content(&This->node, value);
}
static HRESULT WINAPI dom_pi_put_nodeValue(
diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c
index ccfc36e..07f9de5 100644
--- a/dlls/msxml3/text.c
+++ b/dlls/msxml3/text.c
@@ -202,10 +202,18 @@ static HRESULT WINAPI domtext_get_nodeName(
static HRESULT WINAPI domtext_get_nodeValue(
IXMLDOMText *iface,
- VARIANT* var1 )
+ VARIANT* value )
{
domtext *This = impl_from_IXMLDOMText( iface );
- return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
+
+ TRACE("(%p)->(%p)\n", This, value);
+
+ if(!value)
+ return E_INVALIDARG;
+
+ V_VT(value) = VT_BSTR;
+ V_BSTR(value) = bstr_from_xmlChar(This->node.node->content);
+ return S_OK;
}
static HRESULT WINAPI domtext_put_nodeValue(
@@ -487,19 +495,13 @@ static HRESULT WINAPI domtext_get_data(
IXMLDOMText *iface,
BSTR *p)
{
- HRESULT hr;
- VARIANT vRet;
+ domtext *This = impl_from_IXMLDOMText( iface );
if(!p)
return E_INVALIDARG;
- hr = IXMLDOMNode_get_nodeValue( iface, &vRet );
- if(hr == S_OK)
- {
- *p = V_BSTR(&vRet);
- }
-
- return hr;
+ *p = bstr_from_xmlChar(This->node.node->content);
+ return S_OK;
}
static HRESULT WINAPI domtext_put_data(
More information about the wine-cvs
mailing list