Michael Stefaniuc : jscript: COM cleanup for the IServiceProvider iface.

Alexandre Julliard julliard at winehq.org
Mon Jan 17 10:59:46 CST 2011


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

Author: Michael Stefaniuc <mstefani at 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)))




More information about the wine-cvs mailing list