[PATCH 3/3] jscript: COM cleanup for the IServiceProvider iface. (Resend)
Michael Stefaniuc
mstefani at redhat.de
Sun Jan 16 14:32:07 CST 2011
---
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)))
--
1.7.3.4
More information about the wine-patches
mailing list