Michael Stefaniuc : fusion: Use an iface instead of a vtbl pointer in IAssemblyEnumImpl.

Alexandre Julliard julliard at winehq.org
Sun Dec 5 12:10:06 CST 2010


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Sat Dec  4 22:13:29 2010 +0100

fusion: Use an iface instead of a vtbl pointer in IAssemblyEnumImpl.

---

 dlls/fusion/asmenum.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/dlls/fusion/asmenum.c b/dlls/fusion/asmenum.c
index d4ea905..99462ed 100644
--- a/dlls/fusion/asmenum.c
+++ b/dlls/fusion/asmenum.c
@@ -45,17 +45,22 @@ typedef struct _tagASMNAME
 
 typedef struct
 {
-    const IAssemblyEnumVtbl *lpIAssemblyEnumVtbl;
+    IAssemblyEnum IAssemblyEnum_iface;
 
     struct list assemblies;
     struct list *iter;
     LONG ref;
 } IAssemblyEnumImpl;
 
+static inline IAssemblyEnumImpl *impl_from_IAssemblyEnum(IAssemblyEnum *iface)
+{
+    return CONTAINING_RECORD(iface, IAssemblyEnumImpl, IAssemblyEnum_iface);
+}
+
 static HRESULT WINAPI IAssemblyEnumImpl_QueryInterface(IAssemblyEnum *iface,
                                                        REFIID riid, LPVOID *ppobj)
 {
-    IAssemblyEnumImpl *This = (IAssemblyEnumImpl *)iface;
+    IAssemblyEnumImpl *This = impl_from_IAssemblyEnum(iface);
 
     TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppobj);
 
@@ -75,7 +80,7 @@ static HRESULT WINAPI IAssemblyEnumImpl_QueryInterface(IAssemblyEnum *iface,
 
 static ULONG WINAPI IAssemblyEnumImpl_AddRef(IAssemblyEnum *iface)
 {
-    IAssemblyEnumImpl *This = (IAssemblyEnumImpl *)iface;
+    IAssemblyEnumImpl *This = impl_from_IAssemblyEnum(iface);
     ULONG refCount = InterlockedIncrement(&This->ref);
 
     TRACE("(%p)->(ref before = %u)\n", This, refCount - 1);
@@ -85,7 +90,7 @@ static ULONG WINAPI IAssemblyEnumImpl_AddRef(IAssemblyEnum *iface)
 
 static ULONG WINAPI IAssemblyEnumImpl_Release(IAssemblyEnum *iface)
 {
-    IAssemblyEnumImpl *This = (IAssemblyEnumImpl *)iface;
+    IAssemblyEnumImpl *This = impl_from_IAssemblyEnum(iface);
     ULONG refCount = InterlockedDecrement(&This->ref);
     struct list *item, *cursor;
 
@@ -113,7 +118,7 @@ static HRESULT WINAPI IAssemblyEnumImpl_GetNextAssembly(IAssemblyEnum *iface,
                                                         IAssemblyName **ppName,
                                                         DWORD dwFlags)
 {
-    IAssemblyEnumImpl *asmenum = (IAssemblyEnumImpl *)iface;
+    IAssemblyEnumImpl *asmenum = impl_from_IAssemblyEnum(iface);
     ASMNAME *asmname;
 
     TRACE("(%p, %p, %p, %d)\n", iface, pvReserved, ppName, dwFlags);
@@ -135,7 +140,7 @@ static HRESULT WINAPI IAssemblyEnumImpl_GetNextAssembly(IAssemblyEnum *iface,
 
 static HRESULT WINAPI IAssemblyEnumImpl_Reset(IAssemblyEnum *iface)
 {
-    IAssemblyEnumImpl *asmenum = (IAssemblyEnumImpl *)iface;
+    IAssemblyEnumImpl *asmenum = impl_from_IAssemblyEnum(iface);
 
     TRACE("(%p)\n", iface);
 
@@ -431,7 +436,7 @@ HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved,
     if (!asmenum)
         return E_OUTOFMEMORY;
 
-    asmenum->lpIAssemblyEnumVtbl = &AssemblyEnumVtbl;
+    asmenum->IAssemblyEnum_iface.lpVtbl = &AssemblyEnumVtbl;
     asmenum->ref = 1;
     list_init(&asmenum->assemblies);
 
@@ -446,7 +451,7 @@ HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved,
     }
 
     asmenum->iter = list_head(&asmenum->assemblies);
-    *pEnum = (IAssemblyEnum *)asmenum;
+    *pEnum = &asmenum->IAssemblyEnum_iface;
 
     return S_OK;
 }




More information about the wine-cvs mailing list