Module: wine Branch: master Commit: 154c0828bfcc8a02320c66ae39099138706142c4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=154c0828bfcc8a02320c66ae39...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Sep 14 09:00:02 2010 +0400
msxml3: Fix IXMLDOMNode::get_prefix() for empty prefix.
---
dlls/msxml3/node.c | 16 ++++++------- dlls/msxml3/tests/domdoc.c | 51 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 11 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index e059d77..7e91292 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -1429,8 +1429,7 @@ static HRESULT WINAPI xmlnode_get_prefix( BSTR* prefixString) { xmlnode *This = impl_from_IXMLDOMNode( iface ); - HRESULT hr = S_FALSE; - xmlNsPtr *pNSList; + xmlNsPtr *ns;
TRACE("(%p)->(%p)\n", This, prefixString );
@@ -1439,16 +1438,15 @@ static HRESULT WINAPI xmlnode_get_prefix(
*prefixString = NULL;
- pNSList = xmlGetNsList(This->node->doc, This->node); - if(pNSList) + if ((ns = xmlGetNsList(This->node->doc, This->node))) { - *prefixString = bstr_from_xmlChar( pNSList[0]->prefix ); - - xmlFree(pNSList); - hr = S_OK; + if (ns[0]->prefix) *prefixString = bstr_from_xmlChar( ns[0]->prefix ); + xmlFree(ns); }
- return hr; + TRACE("prefix %s\n", debugstr_w(*prefixString)); + + return *prefixString ? S_OK : S_FALSE; }
static HRESULT WINAPI xmlnode_get_baseName( diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index f65eff7..176ff36 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -6103,8 +6103,8 @@ static void test_createNode(void) ok( hr == S_OK, "got 0x%08x\n", hr); prefix = (void*)0xdeadbeef; hr = IXMLDOMNode_get_prefix(node, &prefix); - todo_wine ok( hr == S_FALSE, "got 0x%08x\n", hr); - todo_wine ok(prefix == 0, "expected empty prefix, got %p\n", prefix); + ok( hr == S_FALSE, "got 0x%08x\n", hr); + ok(prefix == 0, "expected empty prefix, got %p\n", prefix);
hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMElement, (void**)&elem); ok( hr == S_OK, "got 0x%08x\n", hr); @@ -6118,6 +6118,7 @@ static void test_createNode(void) hr = IXMLDOMElement_get_namespaceURI(elem, &str); ok( hr == S_OK, "got 0x%08x\n", hr); ok( lstrcmpW(str, _bstr_("http://winehq.org/default")) == 0, "expected default namespace\n"); + SysFreeString(str);
IXMLDOMElement_Release(elem); IXMLDOMNode_Release(node); @@ -6126,6 +6127,51 @@ static void test_createNode(void) free_bstrs(); }
+static void test_get_prefix(void) +{ + IXMLDOMDocument *doc; + IXMLDOMElement *element; + HRESULT hr; + BSTR str; + + doc = create_document(&IID_IXMLDOMDocument); + if (!doc) return; + + /* no prefix */ + hr = IXMLDOMDocument_createElement(doc, _bstr_("elem"), &element); + ok( hr == S_OK, "got 0x%08x\n", hr); + + hr = IXMLDOMElement_get_prefix(element, NULL); + ok( hr == E_INVALIDARG, "got 0x%08x\n", hr); + + str = (void*)0xdeadbeef; + hr = IXMLDOMElement_get_prefix(element, &str); + ok( hr == S_FALSE, "got 0x%08x\n", hr); + ok( str == 0, "got %p\n", str); + + IXMLDOMElement_Release(element); + + /* with prefix */ + hr = IXMLDOMDocument_createElement(doc, _bstr_("a:elem"), &element); + ok( hr == S_OK, "got 0x%08x\n", hr); + + str = (void*)0xdeadbeef; + hr = IXMLDOMElement_get_prefix(element, &str); + ok( hr == S_OK, "got 0x%08x\n", hr); + ok( lstrcmpW(str, _bstr_("a")) == 0, "expected prefix "a"\n"); + SysFreeString(str); + + str = (void*)0xdeadbeef; + hr = IXMLDOMElement_get_namespaceURI(element, &str); + todo_wine ok( hr == S_FALSE, "got 0x%08x\n", hr); + todo_wine ok( str == 0, "got %p\n", str); + + IXMLDOMElement_Release(element); + + IXMLDOMDocument_Release(doc); + free_bstrs(); +} + START_TEST(domdoc) { IXMLDOMDocument *doc; @@ -6182,6 +6228,7 @@ START_TEST(domdoc) test_setAttributeNode(); test_put_dataType(); test_createNode(); + test_get_prefix();
CoUninitialize(); }