Piotr Caban : msxml3: Added IXMLDOMElement_getAttributeNode implementation.

Alexandre Julliard julliard at winehq.org
Wed Jul 2 06:03:29 CDT 2008


Module: wine
Branch: master
Commit: c0661fdb90816ff5b19c86bb80709cec70896cad
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c0661fdb90816ff5b19c86bb80709cec70896cad

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Tue Jul  1 19:47:08 2008 +0200

msxml3: Added IXMLDOMElement_getAttributeNode implementation.

---

 dlls/msxml3/element.c      |   29 +++++++++++++++++++++++++++--
 dlls/msxml3/tests/domdoc.c |    4 ----
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 76af4c6..4b9bf6c 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -582,8 +582,33 @@ static HRESULT WINAPI domelem_getAttributeNode(
     IXMLDOMElement *iface,
     BSTR p, IXMLDOMAttribute** attributeNode )
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    domelem *This = impl_from_IXMLDOMElement( iface );
+    xmlChar *xml_name;
+    xmlNodePtr element;
+    xmlAttrPtr attr;
+    IUnknown *unk;
+    HRESULT hr = E_FAIL;
+
+    TRACE("(%p)->(%s %p)\n", This, debugstr_w(p), attributeNode);
+
+    element = get_element( This );
+    if ( !element )
+        return E_FAIL;
+
+    xml_name = xmlChar_from_wchar(p);
+
+    attr = xmlHasProp(element, xml_name);
+    if(attr) {
+        unk = create_attribute((xmlNodePtr)attr);
+        hr = IUnknown_QueryInterface(unk, &IID_IXMLDOMAttribute, (void**)attributeNode);
+        IUnknown_Release(unk);
+    }else {
+        *attributeNode = NULL;
+    }
+
+    HeapFree(GetProcessHeap(), 0, xml_name);
+
+    return hr;
 }
 
 static HRESULT WINAPI domelem_setAttributeNode(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 0479d80..d5c463d 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -939,10 +939,8 @@ static void test_domnode( void )
 
         attr = (IXMLDOMAttribute*)0xdeadbeef;
         r = IXMLDOMElement_getAttributeNode( element, str, &attr);
-        todo_wine {
         ok( r == E_FAIL, "getAttributeNode ret %08x\n", r );
         ok( attr == NULL, "getAttributeNode ret %p, expected NULL\n", attr );
-        }
         SysFreeString( str );
 
         str = SysAllocString( szdl );	
@@ -962,10 +960,8 @@ static void test_domnode( void )
 
         attr = NULL;
         r = IXMLDOMElement_getAttributeNode( element, str, &attr);
-        todo_wine {
         ok( r == S_OK, "GetAttributeNode ret %08x\n", r );
         ok( attr != NULL, "getAttributeNode returned NULL\n" );
-        }
         if(attr)
             IXMLDOMAttribute_Release(attr);
 




More information about the wine-cvs mailing list