From c0d05d9f4f2d7b7d14d8b4f5e49789eb6e9d1882 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 28 Oct 2013 11:46:40 +0100 Subject: [PATCH] d3drm: Initialize the actual array in d3drm_visual_array_create() as well. --- dlls/d3drm/frame.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c index 26501c2c0f8..28e222ff707 100644 --- a/dlls/d3drm/frame.c +++ b/dlls/d3drm/frame.c @@ -315,15 +315,32 @@ static const struct IDirect3DRMVisualArrayVtbl d3drm_visual_array_vtbl = d3drm_visual_array_GetElement, }; -static struct d3drm_visual_array *d3drm_visual_array_create(void) +static struct d3drm_visual_array *d3drm_visual_array_create(unsigned int visual_count, IDirect3DRMVisual **visuals) { struct d3drm_visual_array *array; + unsigned int i; if (!(array = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*array)))) return NULL; array->IDirect3DRMVisualArray_iface.lpVtbl = &d3drm_visual_array_vtbl; array->ref = 1; + array->size = visual_count; + + if (visual_count) + { + if (!(array->visuals = HeapAlloc(GetProcessHeap(), 0, visual_count * sizeof(*array->visuals)))) + { + HeapFree(GetProcessHeap(), 0, array); + return NULL; + } + + for (i = 0; i < visual_count; ++i) + { + array->visuals[i] = visuals[i]; + IDirect3DRMVisual_AddRef(array->visuals[i]); + } + } return array; } @@ -765,26 +782,9 @@ static HRESULT WINAPI d3drm_frame2_GetVisuals(IDirect3DRMFrame2 *iface, IDirect3 if (!visuals) return D3DRMERR_BADVALUE; - if (!(array = d3drm_visual_array_create())) + if (!(array = d3drm_visual_array_create(frame->nb_visuals, frame->visuals))) return E_OUTOFMEMORY; - array->size = frame->nb_visuals; - if (frame->nb_visuals) - { - ULONG i; - - if (!(array->visuals = HeapAlloc(GetProcessHeap(), 0, frame->nb_visuals * sizeof(*array->visuals)))) - { - HeapFree(GetProcessHeap(), 0, array); - return E_OUTOFMEMORY; - } - for (i = 0; i < frame->nb_visuals; ++i) - { - array->visuals[i] = frame->visuals[i]; - IDirect3DRMVisual_AddRef(frame->visuals[i]); - } - } - *visuals = &array->IDirect3DRMVisualArray_iface; return D3DRM_OK;