Zebediah Figura : wined3d: Use wined3d_array_reserve() in wined3d_adapter_create_output().

Alexandre Julliard julliard at winehq.org
Mon Aug 15 15:21:24 CDT 2022


Module: wine
Branch: master
Commit: 4d81825f3a489c5e36eae1cc8a46834a104e5894
URL:    https://gitlab.winehq.org/wine/wine/-/commit/4d81825f3a489c5e36eae1cc8a46834a104e5894

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Mon Aug  8 12:10:08 2022 -0500

wined3d: Use wined3d_array_reserve() in wined3d_adapter_create_output().

This also has the effect of consistently zero-initializing the wined3d_output structure.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53497

---

 dlls/wined3d/directx.c         | 18 ++++--------------
 dlls/wined3d/wined3d_private.h |  2 +-
 2 files changed, 5 insertions(+), 15 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 0444f76a5c6..6a27c15b0ba 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -999,7 +999,7 @@ struct wined3d_output * CDECL wined3d_adapter_get_output(const struct wined3d_ad
 
 unsigned int CDECL wined3d_adapter_get_output_count(const struct wined3d_adapter *adapter)
 {
-    TRACE("adapter %p, reporting %u outputs.\n", adapter, adapter->output_count);
+    TRACE("adapter %p, reporting %Iu outputs.\n", adapter, adapter->output_count);
 
     return adapter->output_count;
 }
@@ -3409,21 +3409,11 @@ static struct wined3d_adapter *wined3d_adapter_no3d_create(unsigned int ordinal,
 
 static BOOL wined3d_adapter_create_output(struct wined3d_adapter *adapter, const WCHAR *output_name)
 {
-    struct wined3d_output *outputs;
     HRESULT hr;
 
-    if (!adapter->outputs && !(adapter->outputs = heap_calloc(1, sizeof(*adapter->outputs))))
-    {
+    if (!wined3d_array_reserve((void **)&adapter->outputs, &adapter->outputs_size,
+            adapter->output_count + 1, sizeof(*adapter->outputs)))
         return FALSE;
-    }
-    else
-    {
-        if (!(outputs = heap_realloc(adapter->outputs,
-                sizeof(*adapter->outputs) * (adapter->output_count + 1))))
-            return FALSE;
-
-        adapter->outputs = outputs;
-    }
 
     if (FAILED(hr = wined3d_output_init(&adapter->outputs[adapter->output_count],
             adapter->output_count, adapter, output_name)))
@@ -3483,7 +3473,7 @@ BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal,
         if (!wined3d_adapter_create_output(adapter, display_device.DeviceName))
             goto done;
     }
-    TRACE("Initialised %d outputs for adapter %p.\n", adapter->output_count, adapter);
+    TRACE("Initialised %Iu outputs for adapter %p.\n", adapter->output_count, adapter);
 
     /* Make the primary output first */
     if (primary_idx)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 95af2775dfe..1dbd90067f5 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3525,7 +3525,7 @@ struct wined3d_adapter
     struct wined3d_d3d_info d3d_info;
     struct wined3d_driver_info driver_info;
     struct wined3d_output *outputs;
-    unsigned int output_count;
+    SIZE_T output_count, outputs_size;
     D3DKMT_HANDLE kmt_adapter;
     UINT64 vram_bytes_used;
     GUID driver_uuid;




More information about the wine-cvs mailing list