Simplify IXMLDOMElement_get_tagName(), add null check.
Nikolay Sivov
bunglehead at gmail.com
Fri Feb 19 09:06:17 CST 2010
---
dlls/msxml3/element.c | 28 ++++++++++------------------
dlls/msxml3/tests/domdoc.c | 3 +++
2 files changed, 13 insertions(+), 18 deletions(-)
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 0154770..b6caf73 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -489,32 +489,24 @@ static HRESULT WINAPI domelem_get_tagName(
{
domelem *This = impl_from_IXMLDOMElement( iface );
xmlNodePtr element;
- DWORD len;
- DWORD offset = 0;
- LPWSTR str;
+ const xmlChar *prefix;
+ xmlChar *qname;
TRACE("(%p)->(%p)\n", This, p );
+ if (!p) return E_INVALIDARG;
+
element = get_element( This );
if ( !element )
return E_FAIL;
- len = MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->name, -1, NULL, 0 );
- if (element->ns)
- len += MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->ns->prefix, -1, NULL, 0 );
- str = heap_alloc( len * sizeof (WCHAR) );
- if ( !str )
- return E_OUTOFMEMORY;
- if (element->ns)
- {
- offset = MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->ns->prefix, -1, str, len );
- str[offset - 1] = ':';
- }
- MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->name, -1, str + offset, len - offset );
- *p = SysAllocString( str );
- heap_free( str );
+ prefix = element->ns ? element->ns->prefix : NULL;
+ qname = xmlBuildQName(element->name, prefix, NULL, 0);
- return S_OK;
+ *p = bstr_from_xmlChar(qname);
+ if (qname != element->name) xmlFree(qname);
+
+ return *p ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI domelem_getAttribute(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index e2de5df..929a35f 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -639,6 +639,9 @@ static void test_domdoc( void )
r = IXMLDOMElement_QueryInterface( element, &IID_IObjectIdentity, (LPVOID*)&ident );
ok( r == E_NOINTERFACE, "ret %08x\n", r);
+ r = IXMLDOMElement_get_tagName( element, NULL );
+ ok( r == E_INVALIDARG, "ret %08x\n", r);
+
/* check if the tag is correct */
r = IXMLDOMElement_get_tagName( element, &tag );
ok( r == S_OK, "couldn't get tag name\n");
--
1.5.6.5
--=-+qOcNNngT5/F5Mvxy29N--
More information about the wine-patches
mailing list