Nikolay Sivov : msdmo: Added a helper to duplicate partial media type arrays.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Apr 24 08:48:51 CDT 2015


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Apr 23 10:08:18 2015 +0300

msdmo: Added a helper to duplicate partial media type arrays.

---

 dlls/msdmo/dmoreg.c | 53 +++++++++++++++++++++++++----------------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

diff --git a/dlls/msdmo/dmoreg.c b/dlls/msdmo/dmoreg.c
index 7a81398..7ae01a1 100644
--- a/dlls/msdmo/dmoreg.c
+++ b/dlls/msdmo/dmoreg.c
@@ -360,6 +360,21 @@ HRESULT WINAPI DMOGetName(REFCLSID clsidDMO, WCHAR name[])
     return S_FALSE;
 }
 
+static HRESULT dup_partial_mediatype(const DMO_PARTIAL_MEDIATYPE *types, DWORD count, DMO_PARTIAL_MEDIATYPE **ret)
+{
+    *ret = NULL;
+
+    if (count == 0)
+        return S_OK;
+
+    *ret = HeapAlloc(GetProcessHeap(), 0, count*sizeof(*types));
+    if (!*ret)
+        return E_OUTOFMEMORY;
+
+    memcpy(*ret, types, count*sizeof(*types));
+    return S_OK;
+}
+
 /**************************************************************************
  *  IEnumDMO_Constructor
  */
@@ -373,8 +388,7 @@ static HRESULT IEnumDMO_Constructor(
     IEnumDMO **obj)
 {
     IEnumDMOImpl* lpedmo;
-    HRESULT hr = S_OK;
-    UINT size;
+    HRESULT hr;
     LONG ret;
 
     *obj = NULL;
@@ -388,32 +402,16 @@ static HRESULT IEnumDMO_Constructor(
     lpedmo->index = -1;
     lpedmo->category = *guidCategory;
     lpedmo->dwFlags = dwFlags;
+    lpedmo->cInTypes = cInTypes;
+    lpedmo->cOutTypes = cOutTypes;
 
-    if (cInTypes > 0)
-    {
-        size = cInTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
-        lpedmo->pInTypes = HeapAlloc(GetProcessHeap(), 0, size);
-        if (!lpedmo->pInTypes)
-        {
-            hr = E_OUTOFMEMORY;
-            goto lerr;
-        }
-        memcpy(lpedmo->pInTypes, pInTypes, size);
-        lpedmo->cInTypes = cInTypes;
-    }
+    hr = dup_partial_mediatype(pInTypes, cInTypes, &lpedmo->pInTypes);
+    if (FAILED(hr))
+        goto lerr;
 
-    if (cOutTypes > 0)
-    {
-        size = cOutTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
-        lpedmo->pOutTypes = HeapAlloc(GetProcessHeap(), 0, size);
-        if (!lpedmo->pOutTypes)
-        {
-            hr = E_OUTOFMEMORY;
-            goto lerr;
-        }
-        memcpy(lpedmo->pOutTypes, pOutTypes, size);
-        lpedmo->cOutTypes = cOutTypes;
-    }
+    hr = dup_partial_mediatype(pOutTypes, cOutTypes, &lpedmo->pOutTypes);
+    if (FAILED(hr))
+        goto lerr;
 
     /* If not filtering by category enum from media objects root */
     if (IsEqualGUID(guidCategory, &GUID_NULL))
@@ -426,8 +424,7 @@ static HRESULT IEnumDMO_Constructor(
         WCHAR szguid[64];
         WCHAR szKey[MAX_PATH];
 
-        wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories,
-            GUIDToString(szguid, guidCategory));
+        wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories, GUIDToString(szguid, guidCategory));
         if ((ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &lpedmo->hkey)))
             hr = HRESULT_FROM_WIN32(ret);
     }




More information about the wine-cvs mailing list