From 6270a46ded3a0ce8d832704da0ccdd96749aec23 Mon Sep 17 00:00:00 2001 From: Jacek Caban <jacek@codeweavers.com> Date: Thu, 4 Oct 2007 02:07:59 +0200 Subject: [PATCH] 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 609a64d8bb1..f6460841ef0 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 51837ceb453..0e2c127f792 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 3db047fd25a..2a6c15c1e21 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**); -- GitLab