[PATCH 1/5] wined3d: Correctly handle the size parameter in get_private_data.

Stefan Dösinger stefan at codeweavers.com
Wed Mar 12 08:08:23 CDT 2014


This behavior matches d3d8/9. Ddraw behaves slightly differently, a test
and fix will follow after replacing the wined3d_resource functions with
inline helpers.
---
 dlls/wined3d/resource.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 04c3af4..8813af7 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -250,18 +250,21 @@ HRESULT CDECL wined3d_resource_get_private_data(const struct wined3d_resource *r
         void *data, DWORD *data_size)
 {
     const struct private_data *d;
+    DWORD size_in;
 
     TRACE("resource %p, guid %s, data %p, data_size %p.\n",
             resource, debugstr_guid(guid), data, data_size);
 
     d = resource_find_private_data(resource, guid);
-    if (!d) return WINED3DERR_NOTFOUND;
-
-    if (*data_size < d->size)
-    {
-        *data_size = d->size;
+    if (!d)
+        return WINED3DERR_NOTFOUND;
+
+    size_in = *data_size;
+    *data_size = d->size;
+    if (!data)
+        return WINED3D_OK;
+    if (size_in < d->size)
         return WINED3DERR_MOREDATA;
-    }
 
     if (d->flags & WINED3DSPD_IUNKNOWN)
     {
-- 
1.8.3.2




More information about the wine-patches mailing list