[PATCH 2/2] jscript: COM cleanup for the IServiceProvider iface.

Michael Stefaniuc mstefani at redhat.de
Sun Jan 16 10:53:14 CST 2011


---
DEFINE_THIS is no more!


 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 0fe28cb..58c4475 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 a8216d9..db0e1db 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -510,5 +510,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