Michael Stefaniuc : devenum: COM cleanup for IEnumMoniker.

Alexandre Julliard julliard at winehq.org
Tue Apr 3 12:17:38 CDT 2012


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Tue Apr  3 00:16:52 2012 +0200

devenum: COM cleanup for IEnumMoniker.

---

 dlls/devenum/devenum_private.h |    8 ----
 dlls/devenum/mediacatenum.c    |   70 ++++++++++++++++++++-------------------
 2 files changed, 36 insertions(+), 42 deletions(-)

diff --git a/dlls/devenum/devenum_private.h b/dlls/devenum/devenum_private.h
index 0c1800e..811c4b8 100644
--- a/dlls/devenum/devenum_private.h
+++ b/dlls/devenum/devenum_private.h
@@ -72,14 +72,6 @@ typedef struct
 
 typedef struct
 {
-    const IEnumMonikerVtbl *lpVtbl;
-    LONG ref;
-    DWORD index;
-    HKEY hkey;
-} EnumMonikerImpl;
-
-typedef struct
-{
     const IMonikerVtbl *lpVtbl;
     LONG ref;
     HKEY hkey;
diff --git a/dlls/devenum/mediacatenum.c b/dlls/devenum/mediacatenum.c
index 7b44c13..6a1cf2d 100644
--- a/dlls/devenum/mediacatenum.c
+++ b/dlls/devenum/mediacatenum.c
@@ -30,12 +30,19 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(devenum);
 
-static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(LPENUMMONIKER iface);
 static ULONG WINAPI DEVENUM_IMediaCatMoniker_AddRef(LPMONIKER iface);
 static ULONG WINAPI DEVENUM_IPropertyBag_AddRef(LPPROPERTYBAG iface);
 
 typedef struct
 {
+    IEnumMoniker IEnumMoniker_iface;
+    LONG ref;
+    DWORD index;
+    HKEY hkey;
+} EnumMonikerImpl;
+
+typedef struct
+{
     IPropertyBag IPropertyBag_iface;
     LONG ref;
     HKEY hkey;
@@ -706,54 +713,48 @@ MediaCatMoniker * DEVENUM_IMediaCatMoniker_Construct(void)
     return pMoniker;
 }
 
-/**********************************************************************
- * DEVENUM_IEnumMoniker_QueryInterface (also IUnknown)
- */
-static HRESULT WINAPI DEVENUM_IEnumMoniker_QueryInterface(
-    LPENUMMONIKER iface,
-    REFIID riid,
-    LPVOID *ppvObj)
+static inline EnumMonikerImpl *impl_from_IEnumMoniker(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    return CONTAINING_RECORD(iface, EnumMonikerImpl, IEnumMoniker_iface);
+}
 
-    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppvObj);
+static HRESULT WINAPI DEVENUM_IEnumMoniker_QueryInterface(IEnumMoniker *iface, REFIID riid,
+        void **ppv)
+{
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppv);
 
-    if (This == NULL || ppvObj == NULL) return E_POINTER;
+    if (!ppv)
+        return E_POINTER;
 
     if (IsEqualGUID(riid, &IID_IUnknown) ||
         IsEqualGUID(riid, &IID_IEnumMoniker))
     {
-        *ppvObj = iface;
-        DEVENUM_IEnumMoniker_AddRef(iface);
+        *ppv = iface;
+        IEnumMoniker_AddRef(iface);
         return S_OK;
     }
 
     FIXME("- no interface IID: %s\n", debugstr_guid(riid));
+    *ppv = NULL;
     return E_NOINTERFACE;
 }
 
-/**********************************************************************
- * DEVENUM_IEnumMoniker_AddRef (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(LPENUMMONIKER iface)
+static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     ULONG ref = InterlockedIncrement(&This->ref);
 
-    TRACE("(%p)->() AddRef from %d\n", iface, ref - 1);
+    TRACE("(%p) ref=%d\n", This, ref);
 
     return ref;
 }
 
-/**********************************************************************
- * DEVENUM_IEnumMoniker_Release (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IEnumMoniker_Release(LPENUMMONIKER iface)
+static ULONG WINAPI DEVENUM_IEnumMoniker_Release(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     ULONG ref = InterlockedDecrement(&This->ref);
 
-    TRACE("(%p)->() Release from %d\n", iface, ref + 1);
+    TRACE("(%p) ref=%d\n", This, ref);
 
     if (!ref)
     {
@@ -765,13 +766,14 @@ static ULONG WINAPI DEVENUM_IEnumMoniker_Release(LPENUMMONIKER iface)
     return ref;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt, IMoniker ** rgelt, ULONG * pceltFetched)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(IEnumMoniker *iface, ULONG celt, IMoniker **rgelt,
+        ULONG *pceltFetched)
 {
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     WCHAR buffer[MAX_PATH + 1];
     LONG res;
     ULONG fetched = 0;
     MediaCatMoniker * pMoniker;
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
 
     TRACE("(%p)->(%d, %p, %p)\n", iface, celt, rgelt, pceltFetched);
 
@@ -808,9 +810,9 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt,
         return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(LPENUMMONIKER iface, ULONG celt)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(IEnumMoniker *iface, ULONG celt)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     DWORD subKeys;
 
     TRACE("(%p)->(%d)\n", iface, celt);
@@ -831,9 +833,9 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(LPENUMMONIKER iface, ULONG celt)
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(LPENUMMONIKER iface)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
 
     TRACE("(%p)->()\n", iface);
 
@@ -842,7 +844,7 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(LPENUMMONIKER iface)
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Clone(LPENUMMONIKER iface, IEnumMoniker ** ppenum)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Clone(IEnumMoniker *iface, IEnumMoniker **ppenum)
 {
     FIXME("(%p)->(%p): stub\n", iface, ppenum);
 
@@ -869,12 +871,12 @@ HRESULT DEVENUM_IEnumMoniker_Construct(HKEY hkey, IEnumMoniker ** ppEnumMoniker)
     if (!pEnumMoniker)
         return E_OUTOFMEMORY;
 
-    pEnumMoniker->lpVtbl = &IEnumMoniker_Vtbl;
+    pEnumMoniker->IEnumMoniker_iface.lpVtbl = &IEnumMoniker_Vtbl;
     pEnumMoniker->ref = 1;
     pEnumMoniker->index = 0;
     pEnumMoniker->hkey = hkey;
 
-    *ppEnumMoniker = (IEnumMoniker *)pEnumMoniker;
+    *ppEnumMoniker = &pEnumMoniker->IEnumMoniker_iface;
 
     DEVENUM_LockModule();
 




More information about the wine-cvs mailing list