[PATCH] Stop crash when dd7 isnt installed

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Tue Jun 24 06:03:17 CDT 2008


---
 dlls/ddraw/tests/dsurface.c |   69 +++++++++++++++++++++++++++++++------------
 1 files changed, 50 insertions(+), 19 deletions(-)

diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c
index 342b88a..7dcd7fe 100644
--- a/dlls/ddraw/tests/dsurface.c
+++ b/dlls/ddraw/tests/dsurface.c
@@ -707,7 +707,7 @@ static void GetDDInterface_1(void)
     IDirectDraw2 *dd2;
     IDirectDraw4 *dd4;
     IDirectDraw7 *dd7;
-    unsigned long ref1, ref2, ref4, ref7;
+    unsigned long ref1, ref2, ref4, ref7 = 0;
     void *dd;
 
     /* Create a surface */
@@ -737,8 +737,11 @@ static void GetDDInterface_1(void)
     ok(ref2 == 1, "IDirectDraw2 refcount is %ld\n", ref2);
     ref4 = getref((IUnknown *) dd4);
     ok(ref4 == 1, "IDirectDraw4 refcount is %ld\n", ref4);
-    ref7 = getref((IUnknown *) dd7);
-    ok(ref7 == 1, "IDirectDraw7 refcount is %ld\n", ref7);
+    if(dd7)
+    {
+        ref7 = getref((IUnknown *) dd7);
+        ok(ref7 == 1, "IDirectDraw7 refcount is %ld\n", ref7);
+    }
 
 
     ret = IDirectDrawSurface2_GetDDInterface(dsurface2, &dd);
@@ -746,7 +749,8 @@ static void GetDDInterface_1(void)
     ok(getref((IUnknown *) lpDD) == ref1 + 1, "IDirectDraw refcount was increased by %ld\n", getref((IUnknown *) lpDD) - ref1);
     ok(getref((IUnknown *) dd2) == ref2 + 0, "IDirectDraw2 refcount was increased by %ld\n", getref((IUnknown *) dd2) - ref2);
     ok(getref((IUnknown *) dd4) == ref4 + 0, "IDirectDraw4 refcount was increased by %ld\n", getref((IUnknown *) dd4) - ref4);
-    ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
+    if(dd7)
+        ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
 
     ok(dd == lpDD, "Returned interface pointer is not equal to the creation interface\n");
     IUnknown_Release((IUnknown *) dd);
@@ -757,7 +761,8 @@ static void GetDDInterface_1(void)
 
     IDirectDraw_Release(dd2);
     IDirectDraw_Release(dd4);
-    IDirectDraw_Release(dd7);
+    if(dd7)
+        IDirectDraw_Release(dd7);
     IDirectDrawSurface2_Release(dsurface2);
     IDirectDrawSurface_Release(dsurface);
 }
@@ -771,7 +776,7 @@ static void GetDDInterface_2(void)
     IDirectDraw2 *dd2;
     IDirectDraw4 *dd4;
     IDirectDraw7 *dd7;
-    unsigned long ref1, ref2, ref4, ref7;
+    unsigned long ref1, ref2, ref4, ref7 = 0;
     void *dd;
 
     ret = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw2, (void **) &dd2);
@@ -802,8 +807,11 @@ static void GetDDInterface_2(void)
     ok(ref2 == 1, "IDirectDraw2 refcount is %ld\n", ref2);
     ref4 = getref((IUnknown *) dd4);
     ok(ref4 == 1, "IDirectDraw4 refcount is %ld\n", ref4);
-    ref7 = getref((IUnknown *) dd7);
-    ok(ref7 == 1, "IDirectDraw7 refcount is %ld\n", ref7);
+    if(dd7)
+    {
+        ref7 = getref((IUnknown *) dd7);
+        ok(ref7 == 1, "IDirectDraw7 refcount is %ld\n", ref7);
+    }
 
 
     ret = IDirectDrawSurface2_GetDDInterface(dsurface2, &dd);
@@ -811,14 +819,16 @@ static void GetDDInterface_2(void)
     ok(getref((IUnknown *) lpDD) == ref1 + 0, "IDirectDraw refcount was increased by %ld\n", getref((IUnknown *) lpDD) - ref1);
     ok(getref((IUnknown *) dd2) == ref2 + 1, "IDirectDraw2 refcount was increased by %ld\n", getref((IUnknown *) dd2) - ref2);
     ok(getref((IUnknown *) dd4) == ref4 + 0, "IDirectDraw4 refcount was increased by %ld\n", getref((IUnknown *) dd4) - ref4);
-    ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
+    if(dd7)
+        ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
 
     ok(dd == dd2, "Returned interface pointer is not equal to the creation interface\n");
     IUnknown_Release((IUnknown *) dd);
 
     IDirectDraw_Release(dd2);
     IDirectDraw_Release(dd4);
-    IDirectDraw_Release(dd7);
+    if(dd7)
+        IDirectDraw_Release(dd7);
     IDirectDrawSurface2_Release(dsurface2);
     IDirectDrawSurface_Release(dsurface);
 }
@@ -832,7 +842,7 @@ static void GetDDInterface_4(void)
     IDirectDraw2 *dd2;
     IDirectDraw4 *dd4;
     IDirectDraw7 *dd7;
-    unsigned long ref1, ref2, ref4, ref7;
+    unsigned long ref1, ref2, ref4, ref7 = 0;
     void *dd;
 
     ret = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw2, (void **) &dd2);
@@ -863,15 +873,19 @@ static void GetDDInterface_4(void)
     ok(ref2 == 1, "IDirectDraw2 refcount is %ld\n", ref2);
     ref4 = getref((IUnknown *) dd4);
     ok(ref4 == 2, "IDirectDraw4 refcount is %ld\n", ref4);
-    ref7 = getref((IUnknown *) dd7);
-    ok(ref7 == 1, "IDirectDraw7 refcount is %ld\n", ref7);
+    if(dd7)
+    {
+        ref7 = getref((IUnknown *) dd7);
+        ok(ref7 == 1, "IDirectDraw7 refcount is %ld\n", ref7);
+    }
 
     ret = IDirectDrawSurface4_GetDDInterface(dsurface4, &dd);
     ok(ret == DD_OK, "IDirectDrawSurface7_GetDDInterface returned %08x\n", ret);
     ok(getref((IUnknown *) lpDD) == ref1 + 0, "IDirectDraw refcount was increased by %ld\n", getref((IUnknown *) lpDD) - ref1);
     ok(getref((IUnknown *) dd2) == ref2 + 0, "IDirectDraw2 refcount was increased by %ld\n", getref((IUnknown *) dd2) - ref2);
     ok(getref((IUnknown *) dd4) == ref4 + 1, "IDirectDraw4 refcount was increased by %ld\n", getref((IUnknown *) dd4) - ref4);
-    ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
+    if(dd7)
+        ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
 
     ok(dd == dd4, "Returned interface pointer is not equal to the creation interface\n");
     IUnknown_Release((IUnknown *) dd);
@@ -882,14 +896,16 @@ static void GetDDInterface_4(void)
     ok(getref((IUnknown *) lpDD) == ref1 + 0, "IDirectDraw refcount was increased by %ld\n", getref((IUnknown *) lpDD) - ref1);
     ok(getref((IUnknown *) dd2) == ref2 + 0, "IDirectDraw2 refcount was increased by %ld\n", getref((IUnknown *) dd2) - ref2);
     ok(getref((IUnknown *) dd4) == ref4 + 1, "IDirectDraw4 refcount was increased by %ld\n", getref((IUnknown *) dd4) - ref4);
-    ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
+    if(dd7)
+        ok(getref((IUnknown *) dd7) == ref7 + 0, "IDirectDraw7 refcount was increased by %ld\n", getref((IUnknown *) dd7) - ref7);
 
     ok(dd == dd4, "Returned interface pointer is not equal to the creation interface\n");
     IUnknown_Release((IUnknown *) dd);
 
     IDirectDraw_Release(dd2);
     IDirectDraw_Release(dd4);
-    IDirectDraw_Release(dd7);
+    if(dd7)
+        IDirectDraw_Release(dd7);
     IDirectDrawSurface4_Release(dsurface4);
     IDirectDrawSurface2_Release(dsurface2);
 }
@@ -912,6 +928,8 @@ static void GetDDInterface_7(void)
     ok(ret == DD_OK, "IDirectDraw7_QueryInterface returned %08x\n", ret);
     ret = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
     ok(ret == DD_OK, "IDirectDraw7_QueryInterface returned %08x\n", ret);
+    if(ret != DD_OK)
+        goto cleanup;
 
     /* Create a surface */
     ZeroMemory(&surface, sizeof(surface));
@@ -958,11 +976,13 @@ static void GetDDInterface_7(void)
     ok(dd == dd7, "Returned interface pointer is not equal to the creation interface\n");
     IUnknown_Release((IUnknown *) dd);
 
-    IDirectDraw_Release(dd2);
-    IDirectDraw_Release(dd4);
     IDirectDraw_Release(dd7);
     IDirectDrawSurface4_Release(dsurface4);
     IDirectDrawSurface7_Release(dsurface7);
+
+cleanup:
+    IDirectDraw_Release(dd2);
+    IDirectDraw_Release(dd4);
 }
 
 #define MAXEXPECTED 8  /* Can match up to 8 expected surfaces */
@@ -1044,6 +1064,8 @@ static void AttachmentTest7(void)
 
     hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
     ok(hr == DD_OK, "IDirectDraw_QueryInterface returned %08x\n", hr);
+    if(hr != DD_OK)
+        return;
 
     memset(&ddsd, 0, sizeof(ddsd));
     ddsd.dwSize = sizeof(ddsd);
@@ -1502,6 +1524,8 @@ static void CubeMapTest(void)
 
     hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
     ok(hr == DD_OK, "IDirectDraw::QueryInterface returned %08x\n", hr);
+    if(hr != DD_OK)
+        return;
 
     memset(&ddsd, 0, sizeof(ddsd));
     ddsd.dwSize = sizeof(ddsd);
@@ -1731,6 +1755,8 @@ static void CompressedTest(void)
 
     hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
     ok(hr == DD_OK, "IDirectDraw::QueryInterface returned %08x\n", hr);
+    if(hr != DD_OK)
+        return;
 
     memset(&ddsd, 0, sizeof(ddsd));
     ddsd.dwSize = sizeof(ddsd);
@@ -2242,7 +2268,7 @@ static void PrivateDataTest(void)
     }
     hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirectDrawSurface7, (void **) &surface7);
     ok(hr == DD_OK, "IDirectDrawSurface_QueryInterface failed with %08x\n", hr);
-    if(!surface)
+    if(!surface7)
     {
         IDirectDrawSurface_Release(surface);
         return;
@@ -2528,6 +2554,11 @@ static void StructSizeTest(void)
     ok(hr == DD_OK, "Creating an offscreen plain surface failed with %08x\n", hr);
     hr = IDirectDrawSurface_QueryInterface(surface1, &IID_IDirectDrawSurface7, (void **) &surface7);
     ok(hr == DD_OK, "IDirectDrawSurface_QueryInterface failed with %08x\n", hr);
+    if(hr != DD_OK)
+    {
+        IDirectDrawSurface_Release(surface1);
+        return;
+    }
 
     desc.desc1.dwSize = sizeof(DDSURFACEDESC);
     hr = IDirectDrawSurface_GetSurfaceDesc(surface1, &desc.desc1);
-- 
1.5.4.1


--------------030303040909030907030802--




More information about the wine-patches mailing list