ole32: COM cleanup for the IEnumSTATSTG iface.
Michael Stefaniuc
mstefani at redhat.de
Mon Jan 3 18:58:16 CST 2011
---
dlls/ole32/storage32.c | 34 +++++++++++++++++++---------------
1 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index 8cf3f02..fa9c06f 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -296,8 +296,7 @@ extern const IPropertySetStorageVtbl IPropertySetStorage_Vtbl;
*/
struct IEnumSTATSTGImpl
{
- const IEnumSTATSTGVtbl *lpVtbl; /* Needs to be the first item in the struct
- * since we want to cast this in an IEnumSTATSTG pointer */
+ IEnumSTATSTG IEnumSTATSTG_iface;
LONG ref; /* Reference count */
StorageBaseImpl* parentStorage; /* Reference to the parent storage */
@@ -306,6 +305,11 @@ struct IEnumSTATSTGImpl
WCHAR name[DIRENTRY_NAME_MAX_LEN]; /* The most recent name visited */
};
+static inline IEnumSTATSTGImpl *impl_from_IEnumSTATSTG(IEnumSTATSTG *iface)
+{
+ return CONTAINING_RECORD(iface, IEnumSTATSTGImpl, IEnumSTATSTG_iface);
+}
+
static IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(StorageBaseImpl* This, DirRef storageDirEntry);
static void IEnumSTATSTGImpl_Destroy(IEnumSTATSTGImpl* This);
@@ -711,7 +715,7 @@ static HRESULT WINAPI StorageBaseImpl_EnumElements(
if (newEnum!=0)
{
- *ppenum = (IEnumSTATSTG*)newEnum;
+ *ppenum = &newEnum->IEnumSTATSTG_iface;
IEnumSTATSTG_AddRef(*ppenum);
@@ -5292,7 +5296,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_QueryInterface(
REFIID riid,
void** ppvObject)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
if (ppvObject==0)
return E_INVALIDARG;
@@ -5303,7 +5307,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_QueryInterface(
IsEqualGUID(&IID_IEnumSTATSTG, riid))
{
*ppvObject = This;
- IEnumSTATSTG_AddRef((IEnumSTATSTG*)This);
+ IEnumSTATSTG_AddRef(&This->IEnumSTATSTG_iface);
return S_OK;
}
@@ -5313,14 +5317,14 @@ static HRESULT WINAPI IEnumSTATSTGImpl_QueryInterface(
static ULONG WINAPI IEnumSTATSTGImpl_AddRef(
IEnumSTATSTG* iface)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
return InterlockedIncrement(&This->ref);
}
static ULONG WINAPI IEnumSTATSTGImpl_Release(
IEnumSTATSTG* iface)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
ULONG newRef;
@@ -5385,7 +5389,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Next(
STATSTG* rgelt,
ULONG* pceltFetched)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
DirEntry currentEntry;
STATSTG* currentReturnStruct = rgelt;
@@ -5452,9 +5456,9 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Skip(
IEnumSTATSTG* iface,
ULONG celt)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
- ULONG objectFetched = 0;
+ ULONG objectFetched = 0;
DirRef currentSearchNode;
HRESULT hr=S_OK;
@@ -5480,7 +5484,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Skip(
static HRESULT WINAPI IEnumSTATSTGImpl_Reset(
IEnumSTATSTG* iface)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
if (This->parentStorage->reverted)
return STG_E_REVERTED;
@@ -5494,7 +5498,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Clone(
IEnumSTATSTG* iface,
IEnumSTATSTG** ppenum)
{
- IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+ IEnumSTATSTGImpl* const This = impl_from_IEnumSTATSTG(iface);
IEnumSTATSTGImpl* newClone;
@@ -5517,7 +5521,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Clone(
*/
memcpy(newClone->name, This->name, sizeof(newClone->name));
- *ppenum = (IEnumSTATSTG*)newClone;
+ *ppenum = &newClone->IEnumSTATSTG_iface;
/*
* Don't forget to nail down a reference to the clone before
@@ -5559,7 +5563,7 @@ static IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(
/*
* Set-up the virtual function table and reference count.
*/
- newEnumeration->lpVtbl = &IEnumSTATSTGImpl_Vtbl;
+ newEnumeration->IEnumSTATSTG_iface.lpVtbl = &IEnumSTATSTGImpl_Vtbl;
newEnumeration->ref = 0;
/*
@@ -5574,7 +5578,7 @@ static IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(
/*
* Make sure the current node of the iterator is the first one.
*/
- IEnumSTATSTGImpl_Reset((IEnumSTATSTG*)newEnumeration);
+ IEnumSTATSTGImpl_Reset(&newEnumeration->IEnumSTATSTG_iface);
}
return newEnumeration;
--
1.7.3.4
More information about the wine-patches
mailing list