Module: wine Branch: master Commit: 568b0d5c085a320f423b1bf4a77319ec038ead54 URL: http://source.winehq.org/git/wine.git/?a=commit;h=568b0d5c085a320f423b1bf4a7...
Author: Michael Stefaniuc mstefani@redhat.de Date: Sun Jan 16 21:32:07 2011 +0100
jscript: COM cleanup for the IServiceProvider iface.
---
dlls/jscript/jscript.c | 27 +++++++++++++-------------- dlls/jscript/jscript.h | 2 -- 2 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 84ce836..a17b456 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -154,27 +154,28 @@ static HRESULT set_ctx_site(JScript *This) }
typedef struct { - const IServiceProviderVtbl *lpIServiceProviderVtbl; + IServiceProvider IServiceProvider_iface;
LONG ref;
IServiceProvider *sp; } AXSite;
-#define SERVPROV(x) ((IServiceProvider*) &(x)->lpIServiceProviderVtbl) - -#define SERVPROV_THIS(iface) DEFINE_THIS(AXSite, IServiceProvider, iface) +static inline AXSite *impl_from_IServiceProvider(IServiceProvider *iface) +{ + return CONTAINING_RECORD(iface, AXSite, IServiceProvider_iface); +}
static HRESULT WINAPI AXSite_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv) { - AXSite *This = SERVPROV_THIS(iface); + AXSite *This = impl_from_IServiceProvider(iface);
if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); - *ppv = SERVPROV(This); + *ppv = &This->IServiceProvider_iface; }else if(IsEqualGUID(&IID_IServiceProvider, riid)) { TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv); - *ppv = SERVPROV(This); + *ppv = &This->IServiceProvider_iface; }else { TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); *ppv = NULL; @@ -187,7 +188,7 @@ static HRESULT WINAPI AXSite_QueryInterface(IServiceProvider *iface, REFIID riid
static ULONG WINAPI AXSite_AddRef(IServiceProvider *iface) { - AXSite *This = SERVPROV_THIS(iface); + AXSite *This = impl_from_IServiceProvider(iface); LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); @@ -197,7 +198,7 @@ static ULONG WINAPI AXSite_AddRef(IServiceProvider *iface)
static ULONG WINAPI AXSite_Release(IServiceProvider *iface) { - AXSite *This = SERVPROV_THIS(iface); + AXSite *This = impl_from_IServiceProvider(iface); LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); @@ -211,15 +212,13 @@ static ULONG WINAPI AXSite_Release(IServiceProvider *iface) static HRESULT WINAPI AXSite_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv) { - AXSite *This = SERVPROV_THIS(iface); + AXSite *This = impl_from_IServiceProvider(iface);
TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
return IServiceProvider_QueryService(This->sp, guidService, riid, ppv); }
-#undef SERVPROV_THIS - static IServiceProviderVtbl AXSiteVtbl = { AXSite_QueryInterface, AXSite_AddRef, @@ -245,11 +244,11 @@ IUnknown *create_ax_site(script_ctx_t *ctx) return NULL; }
- ret->lpIServiceProviderVtbl = &AXSiteVtbl; + ret->IServiceProvider_iface.lpVtbl = &AXSiteVtbl; ret->ref = 1; ret->sp = sp;
- return (IUnknown*)SERVPROV(ret); + return (IUnknown*)&ret->IServiceProvider_iface; }
static inline JScript *impl_from_IActiveScript(IActiveScript *iface) diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 06258d3..68c67ec 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -525,5 +525,3 @@ static inline LPWSTR heap_strdupW(LPCWSTR str)
return ret; } - -#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))