Jacek Caban : mshtml: Pass HTMLDOMNode pointer to its destructor.

Alexandre Julliard julliard at winehq.org
Thu Oct 4 06:21:08 CDT 2007


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct  4 02:07:59 2007 +0200

mshtml: Pass HTMLDOMNode pointer to its destructor.

---

 dlls/mshtml/htmlelem.c       |   28 ++++++++++++++--------------
 dlls/mshtml/htmlnode.c       |    2 +-
 dlls/mshtml/mshtml_private.h |    5 +++--
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 609a64d..f646084 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -58,7 +58,7 @@ static void elem_vector_add(elem_vector *buf, HTMLElement *elem)
 
 #define HTMLELEM_THIS(iface) DEFINE_THIS(HTMLElement, HTMLElement, iface)
 
-#define HTMLELEM_NODE_THIS(node)  ((HTMLElement *) node)
+#define HTMLELEM_NODE_THIS(iface) DEFINE_THIS2(HTMLElement, node, iface)
 
 static HRESULT WINAPI HTMLElement_QueryInterface(IHTMLElement *iface,
                                                  REFIID riid, void **ppv)
@@ -1140,19 +1140,6 @@ static HRESULT WINAPI HTMLElement_get_all(IHTMLElement *iface, IDispatch **p)
     return HTMLElementCollection_Create((IUnknown*)HTMLELEM(This), buf.buf, buf.len, p);
 }
 
-static void HTMLElement_destructor(IUnknown *iface)
-{
-    HTMLElement *This = HTMLELEM_THIS(iface);
-
-    if(This->destructor)
-        This->destructor(This->impl);
-
-    if(This->nselem)
-        nsIDOMHTMLElement_Release(This->nselem);
-
-    mshtml_free(This);
-}
-
 #undef HTMLELEM_THIS
 
 static const IHTMLElementVtbl HTMLElementVtbl = {
@@ -1278,6 +1265,19 @@ HRESULT HTMLElement_QI(HTMLElement *This, REFIID riid, void **ppv)
     return HTMLDOMNode_QI(&This->node, riid, ppv);
 }
 
+static void HTMLElement_destructor(HTMLDOMNode *iface)
+{
+    HTMLElement *This = HTMLELEM_NODE_THIS(iface);
+
+    if(This->destructor)
+        This->destructor(This->impl);
+
+    if(This->nselem)
+        nsIDOMHTMLElement_Release(This->nselem);
+
+    mshtml_free(This);
+}
+
 HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode)
 {
     nsIDOMHTMLElement *nselem;
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 51837ce..0e2c127 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -395,7 +395,7 @@ void release_nodes(HTMLDocument *This)
         next = iter->next;
         nsIDOMNode_Release(iter->nsnode);
         if(iter->destructor)
-            iter->destructor(iter->impl.unk);
+            iter->destructor(iter);
         else
             mshtml_free(iter);
     }
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 3db047f..2a6c15c 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -253,7 +253,7 @@ struct BSCallback {
 struct HTMLDOMNode {
     const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl;
 
-    void (*destructor)(IUnknown*);
+    void (*destructor)(HTMLDOMNode*);
 
     union {
         IUnknown *unk;
@@ -335,7 +335,8 @@ typedef struct {
 
 #define HTMLTEXTCONT(x)  ((IHTMLTextContainer*)           &(x)->lpHTMLTextContainerVtbl)
 
-#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
+#define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc)))
+#define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface)
 
 HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);
 HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**);




More information about the wine-cvs mailing list