Module: wine Branch: master Commit: be5bb18502cfb0dbd936a126b4b87807b1608372 URL: http://source.winehq.org/git/wine.git/?a=commit;h=be5bb18502cfb0dbd936a126b4...
Author: Michael Stefaniuc mstefani@redhat.de Date: Sat Dec 4 22:14:24 2010 +0100
ole32: Use an iface instead of a vtbl pointer in EnumOLEVERB.
---
dlls/ole32/ole2.c | 25 +++++++++++++++---------- 1 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c index ca4cd4c..d5fd2c2 100644 --- a/dlls/ole32/ole2.c +++ b/dlls/ole32/ole2.c @@ -812,13 +812,18 @@ static HRESULT EnumOLEVERB_Construct(HKEY hkeyVerb, ULONG index, IEnumOLEVERB **
typedef struct { - const IEnumOLEVERBVtbl *lpvtbl; + IEnumOLEVERB IEnumOLEVERB_iface; LONG ref;
HKEY hkeyVerb; ULONG index; } EnumOLEVERB;
+static inline EnumOLEVERB *impl_from_IEnumOLEVERB(IEnumOLEVERB *iface) +{ + return CONTAINING_RECORD(iface, EnumOLEVERB, IEnumOLEVERB_iface); +} + static HRESULT WINAPI EnumOLEVERB_QueryInterface( IEnumOLEVERB *iface, REFIID riid, void **ppv) { @@ -836,7 +841,7 @@ static HRESULT WINAPI EnumOLEVERB_QueryInterface( static ULONG WINAPI EnumOLEVERB_AddRef( IEnumOLEVERB *iface) { - EnumOLEVERB *This = (EnumOLEVERB *)iface; + EnumOLEVERB *This = impl_from_IEnumOLEVERB(iface); TRACE("()\n"); return InterlockedIncrement(&This->ref); } @@ -844,7 +849,7 @@ static ULONG WINAPI EnumOLEVERB_AddRef( static ULONG WINAPI EnumOLEVERB_Release( IEnumOLEVERB *iface) { - EnumOLEVERB *This = (EnumOLEVERB *)iface; + EnumOLEVERB *This = impl_from_IEnumOLEVERB(iface); LONG refs = InterlockedDecrement(&This->ref); TRACE("()\n"); if (!refs) @@ -859,7 +864,7 @@ static HRESULT WINAPI EnumOLEVERB_Next( IEnumOLEVERB *iface, ULONG celt, LPOLEVERB rgelt, ULONG *pceltFetched) { - EnumOLEVERB *This = (EnumOLEVERB *)iface; + EnumOLEVERB *This = impl_from_IEnumOLEVERB(iface); HRESULT hr = S_OK;
TRACE("(%d, %p, %p)\n", celt, rgelt, pceltFetched); @@ -946,7 +951,7 @@ static HRESULT WINAPI EnumOLEVERB_Next( static HRESULT WINAPI EnumOLEVERB_Skip( IEnumOLEVERB *iface, ULONG celt) { - EnumOLEVERB *This = (EnumOLEVERB *)iface; + EnumOLEVERB *This = impl_from_IEnumOLEVERB(iface);
TRACE("(%d)\n", celt);
@@ -957,7 +962,7 @@ static HRESULT WINAPI EnumOLEVERB_Skip( static HRESULT WINAPI EnumOLEVERB_Reset( IEnumOLEVERB *iface) { - EnumOLEVERB *This = (EnumOLEVERB *)iface; + EnumOLEVERB *This = impl_from_IEnumOLEVERB(iface);
TRACE("()\n");
@@ -969,7 +974,7 @@ static HRESULT WINAPI EnumOLEVERB_Clone( IEnumOLEVERB *iface, IEnumOLEVERB **ppenum) { - EnumOLEVERB *This = (EnumOLEVERB *)iface; + EnumOLEVERB *This = impl_from_IEnumOLEVERB(iface); HKEY hkeyVerb; TRACE("(%p)\n", ppenum); if (!DuplicateHandle(GetCurrentProcess(), This->hkeyVerb, GetCurrentProcess(), (HANDLE *)&hkeyVerb, 0, FALSE, DUPLICATE_SAME_ACCESS)) @@ -996,12 +1001,12 @@ static HRESULT EnumOLEVERB_Construct(HKEY hkeyVerb, ULONG index, IEnumOLEVERB ** RegCloseKey(hkeyVerb); return E_OUTOFMEMORY; } - This->lpvtbl = &EnumOLEVERB_VTable; + This->IEnumOLEVERB_iface.lpVtbl = &EnumOLEVERB_VTable; This->ref = 1; This->index = index; This->hkeyVerb = hkeyVerb; - *ppenum = (IEnumOLEVERB *)&This->lpvtbl; - return S_OK; + *ppenum = &This->IEnumOLEVERB_iface; + return S_OK; }
/***********************************************************************