[03/13] msxml3: IXMLDOMNode_put_nodeValue: Use variant coercion
Michael Karcher
wine at mkarcher.dialup.fu-berlin.de
Sat Oct 11 16:58:11 CDT 2008
Tests pass on Wine and XP SP3.
---
dlls/msxml3/node.c | 18 +++++++++++++++---
dlls/msxml3/tests/domdoc.c | 24 ++++++++++++++++++++++++
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 7056ca3..d7eb675 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -344,11 +344,22 @@ static HRESULT WINAPI xmlnode_put_nodeValue(
VARIANT value)
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- HRESULT hr = S_FALSE;
+ HRESULT hr;
xmlChar *str = NULL;
+ VARIANT string_value;
TRACE("%p type(%d)\n", This, This->node->type);
+ VariantInit(&string_value);
+ hr = VariantChangeType(&string_value, &value, 0, VT_BSTR);
+ if(FAILED(hr))
+ {
+ VariantClear(&string_value);
+ WARN("Couldn't convert to VT_BSTR\n");
+ return hr;
+ }
+
+ hr = S_FALSE;
/* Document, Document Fragment, Document Type, Element,
Entity, Entity Reference, Notation aren't supported. */
switch ( This->node->type )
@@ -359,8 +370,7 @@ static HRESULT WINAPI xmlnode_put_nodeValue(
case XML_PI_NODE:
case XML_TEXT_NODE:
{
- str = xmlChar_from_wchar((WCHAR*)V_BSTR(&value));
-
+ str = xmlChar_from_wchar((WCHAR*)V_BSTR(&string_value));
xmlNodeSetContent(This->node, str);
hr = S_OK;
break;
@@ -370,6 +380,8 @@ static HRESULT WINAPI xmlnode_put_nodeValue(
break;
}
+ VariantClear(&string_value);
+
return hr;
}
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index dda9fbb..fa82a8a 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -724,6 +724,30 @@ static void test_domdoc( void )
ok( !lstrcmpW( str, _bstr_("Begin This &is a Middle; test <>\\Append End") ), "incorrect get_text string\n");
SysFreeString(str);
+ /* test put_data */
+ V_VT(&var) = VT_BSTR;
+ V_BSTR(&var) = SysAllocString(szstr1);
+ r = IXMLDOMText_put_nodeValue(nodetext, var);
+ ok(r == S_OK, "ret %08x\n", r );
+ VariantClear(&var);
+
+ r = IXMLDOMText_get_text(nodetext, &str);
+ ok(r == S_OK, "ret %08x\n", r );
+ ok( !lstrcmpW( str, szstr1 ), "incorrect get_text string\n");
+ SysFreeString(str);
+
+ /* test put_data */
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = 99;
+ r = IXMLDOMText_put_nodeValue(nodetext, var);
+ ok(r == S_OK, "ret %08x\n", r );
+ VariantClear(&var);
+
+ r = IXMLDOMText_get_text(nodetext, &str);
+ ok(r == S_OK, "ret %08x\n", r );
+ ok( !lstrcmpW( str, _bstr_("99") ), "incorrect get_text string\n");
+ SysFreeString(str);
+
IXMLDOMText_Release( nodetext );
}
--
1.5.6.5
More information about the wine-patches
mailing list