Module: wine Branch: master Commit: b80c71abe6de1a76a7a7d869ed11d06b6953755a URL: http://source.winehq.org/git/wine.git/?a=commit;h=b80c71abe6de1a76a7a7d869ed...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon May 7 15:36:03 2012 +0400
msxml3: Make ::put_data() use passed BSTR as general WCHAR buffer.
---
dlls/msxml3/cdata.c | 10 +--- dlls/msxml3/comment.c | 9 +--- dlls/msxml3/pi.c | 8 +-- dlls/msxml3/tests/domdoc.c | 118 ++++++++++++++++++++++++++++++++++++++++++++ dlls/msxml3/text.c | 9 +--- 5 files changed, 126 insertions(+), 28 deletions(-)
diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c index 63265bf..b07cd84 100644 --- a/dlls/msxml3/cdata.c +++ b/dlls/msxml3/cdata.c @@ -552,14 +552,8 @@ static HRESULT WINAPI domcdata_put_data( BSTR data) { domcdata *This = impl_from_IXMLDOMCDATASection( iface ); - VARIANT val; - - TRACE("(%p)->(%s)\n", This, debugstr_w(data) ); - - V_VT(&val) = VT_BSTR; - V_BSTR(&val) = data; - - return IXMLDOMCDATASection_put_nodeValue( iface, val ); + TRACE("(%p)->(%s)\n", This, debugstr_w(data)); + return node_set_content(&This->node, data); }
static HRESULT WINAPI domcdata_get_length( diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c index f1f94c6..3dab11b 100644 --- a/dlls/msxml3/comment.c +++ b/dlls/msxml3/comment.c @@ -554,13 +554,8 @@ static HRESULT WINAPI domcomment_put_data( BSTR data) { domcomment *This = impl_from_IXMLDOMComment( iface ); - VARIANT val; - - TRACE("(%p)->(%s)\n", This, debugstr_w(data) ); - - V_VT(&val) = VT_BSTR; - V_BSTR(&val) = data; - return node_put_value(&This->node, &val); + TRACE("(%p)->(%s)\n", This, debugstr_w(data)); + return node_set_content(&This->node, data); }
static HRESULT WINAPI domcomment_get_length( diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c index a6034bb..4d1910b 100644 --- a/dlls/msxml3/pi.c +++ b/dlls/msxml3/pi.c @@ -602,13 +602,12 @@ static HRESULT WINAPI dom_pi_put_data( BSTR data) { dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface ); - VARIANT val; BSTR target; HRESULT hr;
TRACE("(%p)->(%s)\n", This, debugstr_w(data) );
- /* Cannot set data to a PI node whose target is 'xml' */ + /* cannot set data to a PI node whose target is 'xml' */ hr = IXMLDOMProcessingInstruction_get_nodeName(iface, &target); if(hr == S_OK) { @@ -622,10 +621,7 @@ static HRESULT WINAPI dom_pi_put_data( SysFreeString(target); }
- V_VT(&val) = VT_BSTR; - V_BSTR(&val) = data; - - return IXMLDOMProcessingInstruction_put_nodeValue( iface, val ); + return node_set_content(&This->node, data); }
static const struct IXMLDOMProcessingInstructionVtbl dom_pi_vtbl = diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index d50a22e..09165c3 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -11675,6 +11675,123 @@ todo_wine free_bstrs(); }
+static DOMNodeType put_data_types[] = { + NODE_TEXT, + NODE_CDATA_SECTION, + NODE_PROCESSING_INSTRUCTION, + NODE_COMMENT, + NODE_INVALID +}; + +static void test_put_data(void) +{ + static const WCHAR test_data[] = {'t','e','s','t',' ','n','o','d','e',' ','d','a','t','a',0}; + WCHAR buff[100], *data; + IXMLDOMDocument *doc; + DOMNodeType *type; + BSTR get_data; + HRESULT hr; + + doc = create_document(&IID_IXMLDOMDocument); + if (!doc) return; + + memcpy(&buff[2], test_data, sizeof(test_data)); + /* just a big length */ + *(DWORD*)buff = 0xf0f0; + data = &buff[2]; + + type = put_data_types; + while (*type != NODE_INVALID) + { + IXMLDOMNode *node; + VARIANT v; + + V_VT(&v) = VT_I2; + V_I2(&v) = *type; + + hr = IXMLDOMDocument_createNode(doc, v, _bstr_("name"), NULL, &node); + EXPECT_HR(hr, S_OK); + + /* put_data() is interface-specific */ + switch (*type) + { + case NODE_TEXT: + { + IXMLDOMText *text; + + hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMText, (void**)&text); + EXPECT_HR(hr, S_OK); + hr = IXMLDOMText_put_data(text, data); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMText_get_data(text, &get_data); + EXPECT_HR(hr, S_OK); + + IXMLDOMText_Release(text); + break; + } + case NODE_CDATA_SECTION: + { + IXMLDOMCDATASection *cdata; + + hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMCDATASection, (void**)&cdata); + EXPECT_HR(hr, S_OK); + hr = IXMLDOMCDATASection_put_data(cdata, data); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMCDATASection_get_data(cdata, &get_data); + EXPECT_HR(hr, S_OK); + + IXMLDOMCDATASection_Release(cdata); + break; + } + case NODE_PROCESSING_INSTRUCTION: + { + IXMLDOMProcessingInstruction *pi; + + hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMProcessingInstruction, (void**)&pi); + EXPECT_HR(hr, S_OK); + hr = IXMLDOMProcessingInstruction_put_data(pi, data); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMProcessingInstruction_get_data(pi, &get_data); + EXPECT_HR(hr, S_OK); + + IXMLDOMProcessingInstruction_Release(pi); + break; + } + case NODE_COMMENT: + { + IXMLDOMComment *comment; + + hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMComment, (void**)&comment); + EXPECT_HR(hr, S_OK); + hr = IXMLDOMComment_put_data(comment, data); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMComment_get_data(comment, &get_data); + EXPECT_HR(hr, S_OK); + + IXMLDOMComment_Release(comment); + break; + } + default: + break; + } + + /* compare */ + ok(!lstrcmpW(data, get_data), "%d: got wrong data %s, expected %s\n", *type, wine_dbgstr_w(get_data), + wine_dbgstr_w(data)); + SysFreeString(get_data); + + IXMLDOMNode_Release(node); + type++; + } + + IXMLDOMDocument_Release(doc); + free_bstrs(); +} + START_TEST(domdoc) { IXMLDOMDocument *doc; @@ -11752,6 +11869,7 @@ START_TEST(domdoc) test_supporterrorinfo(); test_nodeValue(); test_get_namespaces(); + test_put_data();
test_xsltemplate();
diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c index 74de8e5..705afd0 100644 --- a/dlls/msxml3/text.c +++ b/dlls/msxml3/text.c @@ -608,13 +608,8 @@ static HRESULT WINAPI domtext_put_data( BSTR data) { domtext *This = impl_from_IXMLDOMText( iface ); - VARIANT val; - - TRACE("(%p)->(%s)\n", This, debugstr_w(data) ); - - V_VT(&val) = VT_BSTR; - V_BSTR(&val) = data; - return node_put_value(&This->node, &val); + TRACE("(%p)->(%s)\n", This, debugstr_w(data)); + return node_set_content(&This->node, data); }
static HRESULT WINAPI domtext_get_length(