Module: wine Branch: master Commit: b7ac3bde6810757aae100eb451835be1aa541fcb URL: http://source.winehq.org/git/wine.git/?a=commit;h=b7ac3bde6810757aae100eb451...
Author: Michael Karcher wine@mkarcher.dialup.fu-berlin.de Date: Sat Oct 11 23:58:11 2008 +0200
msxml3: IXMLDOMNode_put_nodeValue: Use variant coercion.
---
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 ); }