Nikolay Sivov : msdmo: Cleanup IEnumDMO creation code.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 15 11:37:24 CDT 2014


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Oct 15 08:26:08 2014 +0400

msdmo: Cleanup IEnumDMO creation code.

---

 dlls/msdmo/dmoreg.c | 134 ++++++++++++++++++++++++++--------------------------
 1 file changed, 68 insertions(+), 66 deletions(-)

diff --git a/dlls/msdmo/dmoreg.c b/dlls/msdmo/dmoreg.c
index e0c0719..f271da6 100644
--- a/dlls/msdmo/dmoreg.c
+++ b/dlls/msdmo/dmoreg.c
@@ -352,79 +352,88 @@ static BOOL IEnumDMOImpl_Destructor(IEnumDMOImpl* This)
 /**************************************************************************
  *  IEnumDMO_Constructor
  */
-static IEnumDMO * IEnumDMO_Constructor(
+static HRESULT IEnumDMO_Constructor(
     REFGUID guidCategory,
     DWORD dwFlags,
     DWORD cInTypes,
     const DMO_PARTIAL_MEDIATYPE *pInTypes,
     DWORD cOutTypes,
-    const DMO_PARTIAL_MEDIATYPE *pOutTypes)
+    const DMO_PARTIAL_MEDIATYPE *pOutTypes,
+    IEnumDMO **obj)
 {
-    UINT size;
     IEnumDMOImpl* lpedmo;
-    BOOL ret = FALSE;
+    HRESULT hr = S_OK;
+    UINT size;
+
+    *obj = NULL;
 
     lpedmo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumDMOImpl));
+    if (!lpedmo)
+        return E_OUTOFMEMORY;
 
-    if (lpedmo)
-    {
-        lpedmo->ref = 1;
-        lpedmo->IEnumDMO_iface.lpVtbl = &edmovt;
-        lpedmo->index = -1;
-	lpedmo->guidCategory = guidCategory;
-	lpedmo->dwFlags = dwFlags;
+    lpedmo->IEnumDMO_iface.lpVtbl = &edmovt;
+    lpedmo->ref = 1;
+    lpedmo->index = -1;
+    lpedmo->guidCategory = guidCategory;
+    lpedmo->dwFlags = dwFlags;
 
-        if (cInTypes > 0)
+    if (cInTypes > 0)
+    {
+        size = cInTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
+        lpedmo->pInTypes = HeapAlloc(GetProcessHeap(), 0, size);
+        if (!lpedmo->pInTypes)
         {
-            size = cInTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
-            lpedmo->pInTypes = HeapAlloc(GetProcessHeap(), 0, size);
-            if (!lpedmo->pInTypes)
-                goto lerr;
-            memcpy(lpedmo->pInTypes, pInTypes, size);
-            lpedmo->cInTypes = cInTypes;
+            hr = E_OUTOFMEMORY;
+            goto lerr;
         }
+        memcpy(lpedmo->pInTypes, pInTypes, size);
+        lpedmo->cInTypes = cInTypes;
+    }
 
-        if (cOutTypes > 0)
+    if (cOutTypes > 0)
+    {
+        size = cOutTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
+        lpedmo->pOutTypes = HeapAlloc(GetProcessHeap(), 0, size);
+        if (!lpedmo->pOutTypes)
         {
-            size = cOutTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
-            lpedmo->pOutTypes = HeapAlloc(GetProcessHeap(), 0, size);
-            if (!lpedmo->pOutTypes)
-                goto lerr;
-            memcpy(lpedmo->pOutTypes, pOutTypes, size);
-            lpedmo->cOutTypes = cOutTypes;
+            hr = E_OUTOFMEMORY;
+            goto lerr;
         }
+        memcpy(lpedmo->pOutTypes, pOutTypes, size);
+        lpedmo->cOutTypes = cOutTypes;
+    }
 
-        /* If not filtering by category enum from media objects root */
-        if (IsEqualGUID(guidCategory, &GUID_NULL))
-        {
-            if (ERROR_SUCCESS == RegOpenKeyExW(HKEY_CLASSES_ROOT, szDMORootKey, 
-                0, KEY_READ, &lpedmo->hkey))
-                ret = TRUE;
-        }
-        else
-        {
-            WCHAR szguid[64];
-            WCHAR szKey[MAX_PATH];
-
-            wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories, 
-                GUIDToString(szguid, guidCategory));
-            if (ERROR_SUCCESS == RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 
-                0, KEY_READ, &lpedmo->hkey))
-                ret = TRUE;
-        }
+    /* If not filtering by category enum from media objects root */
+    if (IsEqualGUID(guidCategory, &GUID_NULL))
+    {
+        if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, szDMORootKey, 0, KEY_READ, &lpedmo->hkey))
+            hr = E_FAIL;
+    }
+    else
+    {
+        WCHAR szguid[64];
+        WCHAR szKey[MAX_PATH];
 
-lerr:
-        if(!ret)
-        {
-            IEnumDMOImpl_Destructor(lpedmo);
-            HeapFree(GetProcessHeap(),0,lpedmo);
-            lpedmo = NULL;
-        }
+        wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories,
+            GUIDToString(szguid, guidCategory));
+        if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &lpedmo->hkey))
+            hr = E_FAIL;
     }
 
-    TRACE("returning %p\n", lpedmo);
+lerr:
 
-    return (IEnumDMO*)lpedmo;
+    if (FAILED(hr))
+    {
+        IEnumDMOImpl_Destructor(lpedmo);
+        HeapFree(GetProcessHeap(), 0, lpedmo);
+    }
+    else
+    {
+        TRACE("returning %p\n", lpedmo);
+        *obj = &lpedmo->IEnumDMO_iface;
+    }
+
+    return hr;
 }
 
 
@@ -446,14 +455,13 @@ static HRESULT WINAPI IEnumDMO_fnQueryInterface(
     REFIID riid,
     LPVOID *ppvObj)
 {
-    IEnumDMOImpl *This = impl_from_IEnumDMO(iface);
-
     *ppvObj = NULL;
 
-    if(IsEqualIID(riid, &IID_IUnknown))
-        *ppvObj = This;
-    else if(IsEqualIID(riid, &IID_IEnumDMO))
-        *ppvObj = This;
+    if (IsEqualIID(riid, &IID_IEnumDMO) ||
+        IsEqualIID(riid, &IID_IUnknown))
+    {
+        *ppvObj = iface;
+    }
 
     if(*ppvObj)
     {
@@ -689,17 +697,11 @@ HRESULT WINAPI DMOEnum(
     const DMO_PARTIAL_MEDIATYPE *pOutTypes,
     IEnumDMO **ppEnum)
 {
-    HRESULT hres = E_FAIL;
-
     TRACE("guidCategory=%p dwFlags=0x%08x cInTypes=%d cOutTypes=%d\n",
         guidCategory, dwFlags, cInTypes, cOutTypes);
 
-    *ppEnum = IEnumDMO_Constructor(guidCategory, dwFlags, cInTypes,
-        pInTypes, cOutTypes, pOutTypes);
-    if (*ppEnum)
-        hres = S_OK;
-
-    return hres;
+    return IEnumDMO_Constructor(guidCategory, dwFlags, cInTypes,
+        pInTypes, cOutTypes, pOutTypes, ppEnum);
 }
 
 




More information about the wine-cvs mailing list