Henri Verbeet : d3drm: Initialize the actual array in d3drm_frame_array_create() as well.

Alexandre Julliard julliard at winehq.org
Mon Oct 28 15:13:05 CDT 2013


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Oct 28 11:46:39 2013 +0100

d3drm: Initialize the actual array in d3drm_frame_array_create() as well.

---

 dlls/d3drm/frame.c |   36 ++++++++++++++++++------------------
 1 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c
index 36baf2e..26501c2 100644
--- a/dlls/d3drm/frame.c
+++ b/dlls/d3drm/frame.c
@@ -197,15 +197,31 @@ static const struct IDirect3DRMFrameArrayVtbl d3drm_frame_array_vtbl =
     d3drm_frame_array_GetElement,
 };
 
-static struct d3drm_frame_array *d3drm_frame_array_create(void)
+static struct d3drm_frame_array *d3drm_frame_array_create(unsigned int frame_count, IDirect3DRMFrame3 **frames)
 {
     struct d3drm_frame_array *array;
+    unsigned int i;
 
     if (!(array = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*array))))
         return NULL;
 
     array->IDirect3DRMFrameArray_iface.lpVtbl = &d3drm_frame_array_vtbl;
     array->ref = 1;
+    array->size = frame_count;
+
+    if (frame_count)
+    {
+        if (!(array->frames = HeapAlloc(GetProcessHeap(), 0, frame_count * sizeof(*array->frames))))
+        {
+            HeapFree(GetProcessHeap(), 0, array);
+            return NULL;
+        }
+
+        for (i = 0; i < frame_count; ++i)
+        {
+            IDirect3DRMFrame3_QueryInterface(frames[i], &IID_IDirect3DRMFrame, (void **)&array->frames[i]);
+        }
+    }
 
     return array;
 }
@@ -1500,25 +1516,9 @@ static HRESULT WINAPI d3drm_frame3_GetChildren(IDirect3DRMFrame3 *iface, IDirect
     if (!children)
         return D3DRMERR_BADVALUE;
 
-    if (!(array = d3drm_frame_array_create()))
+    if (!(array = d3drm_frame_array_create(frame->nb_children, frame->children)))
         return E_OUTOFMEMORY;
 
-    array->size = frame->nb_children;
-    if (frame->nb_children)
-    {
-        ULONG i;
-
-        if (!(array->frames = HeapAlloc(GetProcessHeap(), 0, frame->nb_children * sizeof(*array->frames))))
-        {
-            HeapFree(GetProcessHeap(), 0, array);
-            return E_OUTOFMEMORY;
-        }
-        for (i = 0; i < frame->nb_children; ++i)
-        {
-            IDirect3DRMFrame3_QueryInterface(frame->children[i], &IID_IDirect3DRMFrame, (void **)&array->frames[i]);
-        }
-    }
-
     *children = &array->IDirect3DRMFrameArray_iface;
 
     return D3DRM_OK;




More information about the wine-cvs mailing list