Jacek Caban : msxml3: Get rid of not used aggregation support in domelement .

Alexandre Julliard julliard at winehq.org
Mon Aug 24 10:08:12 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Aug 22 19:51:45 2009 +0200

msxml3: Get rid of not used aggregation support in domelement.

---

 dlls/msxml3/domdoc.c        |    2 +-
 dlls/msxml3/element.c       |  113 ++++++++++++++-----------------------------
 dlls/msxml3/msxml_private.h |    2 +-
 dlls/msxml3/node.c          |    2 +-
 4 files changed, 39 insertions(+), 80 deletions(-)

diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 84bd43c..2d54fe0 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -1043,7 +1043,7 @@ static HRESULT WINAPI domdoc_createElement(
     xmldoc_add_orphan(xmlnode->doc, xmlnode);
 
     TRACE("created xmlptr %p\n", xmlnode);
-    elem_unk = create_element(xmlnode, NULL);
+    elem_unk = create_element(xmlnode);
     HeapFree(GetProcessHeap(), 0, xml_name);
 
     hr = IUnknown_QueryInterface(elem_unk, &IID_IXMLDOMElement, (void **)element);
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 33db539..ce99ba9 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -41,8 +41,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
 typedef struct _domelem
 {
     const struct IXMLDOMElementVtbl *lpVtbl;
-    const struct IUnknownVtbl *lpInternalUnkVtbl;
-    IUnknown *pUnkOuter;
     LONG ref;
     xmlnode *node;
 } domelem;
@@ -52,11 +50,6 @@ static inline domelem *impl_from_IXMLDOMElement( IXMLDOMElement *iface )
     return (domelem *)((char*)iface - FIELD_OFFSET(domelem, lpVtbl));
 }
 
-static inline domelem *impl_from_InternalUnknown( IUnknown *iface )
-{
-    return (domelem *)((char*)iface - FIELD_OFFSET(domelem, lpInternalUnkVtbl));
-}
-
 static inline xmlNodePtr get_element( domelem *This )
 {
     return This->node->node;
@@ -68,23 +61,54 @@ static HRESULT WINAPI domelem_QueryInterface(
     void** ppvObject )
 {
     domelem *This = impl_from_IXMLDOMElement( iface );
+
     TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
 
-    return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObject);
+    if ( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
+         IsEqualGUID( riid, &IID_IDispatch ) ||
+         IsEqualGUID( riid, &IID_IUnknown ) )
+    {
+        *ppvObject = &This->lpVtbl;
+    }
+    else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) )
+    {
+        *ppvObject = IXMLDOMNode_from_impl(This->node);
+    }
+    else
+    {
+        FIXME("interface %s not implemented\n", debugstr_guid(riid));
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef( (IUnknown*)*ppvObject );
+    return S_OK;
 }
 
 static ULONG WINAPI domelem_AddRef(
     IXMLDOMElement *iface )
 {
     domelem *This = impl_from_IXMLDOMElement( iface );
-    return IUnknown_AddRef(This->pUnkOuter);
+    LONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    return ref;
 }
 
 static ULONG WINAPI domelem_Release(
     IXMLDOMElement *iface )
 {
     domelem *This = impl_from_IXMLDOMElement( iface );
-    return IUnknown_Release(This->pUnkOuter);
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    if(!ref) {
+        IXMLDOMNode_Release(IXMLDOMNode_from_impl(This->node));
+        heap_free(This);
+    }
+
+    return ref;
 }
 
 static HRESULT WINAPI domelem_GetTypeInfoCount(
@@ -727,66 +751,7 @@ static const struct IXMLDOMElementVtbl domelem_vtbl =
     domelem_normalize,
 };
 
-static HRESULT WINAPI Internal_QueryInterface(
-    IUnknown *iface,
-    REFIID riid,
-    void** ppvObject )
-{
-    domelem *This = impl_from_InternalUnknown( iface );
-    TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
-
-    if ( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
-         IsEqualGUID( riid, &IID_IDispatch ) ||
-         IsEqualGUID( riid, &IID_IUnknown ) )
-    {
-        *ppvObject = &This->lpVtbl;
-    }
-    else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) )
-    {
-        *ppvObject = IXMLDOMNode_from_impl(This->node);
-    }
-    else
-    {
-        FIXME("interface %s not implemented\n", debugstr_guid(riid));
-        return E_NOINTERFACE;
-    }
-
-    IUnknown_AddRef( (IUnknown*)*ppvObject );
-
-    return S_OK;
-}
-
-static ULONG WINAPI Internal_AddRef(
-    IUnknown *iface )
-{
-    domelem *This = impl_from_InternalUnknown( iface );
-    return InterlockedIncrement( &This->ref );
-}
-
-static ULONG WINAPI Internal_Release(
-    IUnknown *iface )
-{
-    domelem *This = impl_from_InternalUnknown( iface );
-    ULONG ref;
-
-    ref = InterlockedDecrement( &This->ref );
-    if ( ref == 0 )
-    {
-        IXMLDOMNode_Release( IXMLDOMNode_from_impl(This->node) );
-        HeapFree( GetProcessHeap(), 0, This );
-    }
-
-    return ref;
-}
-
-static const struct IUnknownVtbl internal_unk_vtbl =
-{
-    Internal_QueryInterface,
-    Internal_AddRef,
-    Internal_Release
-};
-
-IUnknown* create_element( xmlNodePtr element, IUnknown *pUnkOuter )
+IUnknown* create_element( xmlNodePtr element )
 {
     domelem *This;
 
@@ -796,12 +761,6 @@ IUnknown* create_element( xmlNodePtr element, IUnknown *pUnkOuter )
 
     This->lpVtbl = &domelem_vtbl;
     This->ref = 1;
-    This->lpInternalUnkVtbl = &internal_unk_vtbl;
-
-    if(pUnkOuter)
-        This->pUnkOuter = pUnkOuter; /* Don't take a ref on outer Unknown */
-    else
-        This->pUnkOuter = (IUnknown *)&This->lpInternalUnkVtbl;
 
     This->node = create_basic_node( element, (IUnknown*)&This->lpVtbl );
     if(!This->node)
@@ -810,7 +769,7 @@ IUnknown* create_element( xmlNodePtr element, IUnknown *pUnkOuter )
         return NULL;
     }
 
-    return (IUnknown*) &This->lpInternalUnkVtbl;
+    return (IUnknown*) &This->lpVtbl;
 }
 
 #endif
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index d09b380..18b44bd 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -39,7 +39,7 @@
 extern IUnknown         *create_domdoc( xmlNodePtr document );
 extern IUnknown         *create_xmldoc( void );
 extern IXMLDOMNode      *create_node( xmlNodePtr node );
-extern IUnknown         *create_element( xmlNodePtr element, IUnknown *pUnkOuter );
+extern IUnknown         *create_element( xmlNodePtr element );
 extern IUnknown         *create_attribute( xmlNodePtr attribute );
 extern IUnknown         *create_text( xmlNodePtr text );
 extern IUnknown         *create_pi( xmlNodePtr pi );
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 2876ef3..a7fa63f 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -1580,7 +1580,7 @@ IXMLDOMNode *create_node( xmlNodePtr node )
     switch(node->type)
     {
     case XML_ELEMENT_NODE:
-        pUnk = create_element( node, NULL );
+        pUnk = create_element( node );
         break;
     case XML_ATTRIBUTE_NODE:
         pUnk = create_attribute( node );




More information about the wine-cvs mailing list