Ričardas Barkauskas : ddraw: Use helper function to delete attached surfaces.

Alexandre Julliard julliard at winehq.org
Tue Jun 21 12:25:42 CDT 2011


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

Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date:   Mon Jun 20 23:46:26 2011 +0300

ddraw: Use helper function to delete attached surfaces.

---

 dlls/ddraw/surface.c |   69 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 54 insertions(+), 15 deletions(-)

diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 36c4084..fdb199e 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -1452,14 +1452,12 @@ static HRESULT WINAPI ddraw_surface1_AddAttachedSurface(IDirectDrawSurface *ifac
  *  DDERR_SURFACENOTATTACHED if the surface isn't attached to
  *
  *****************************************************************************/
-static HRESULT WINAPI ddraw_surface7_DeleteAttachedSurface(IDirectDrawSurface7 *iface,
-        DWORD Flags, IDirectDrawSurface7 *Attach)
+static HRESULT ddraw_surface_delete_attached_surface(IDirectDrawSurfaceImpl *This,
+        IDirectDrawSurfaceImpl *Surf)
 {
-    IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface7(iface);
-    IDirectDrawSurfaceImpl *Surf = unsafe_impl_from_IDirectDrawSurface7(Attach);
     IDirectDrawSurfaceImpl *Prev = This;
 
-    TRACE("iface %p, flags %#x, attachment %p.\n", iface, Flags, Attach);
+    TRACE("surface %p, attachment %p.\n", This, Surf);
 
     EnterCriticalSection(&ddraw_cs);
     if (!Surf || (Surf->first_attached != This) || (Surf == This) )
@@ -1497,21 +1495,44 @@ static HRESULT WINAPI ddraw_surface7_DeleteAttachedSurface(IDirectDrawSurface7 *
     {
         IDirect3DDeviceImpl_UpdateDepthStencil(This->ddraw->d3ddevice);
     }
-
-    ddraw_surface7_Release(Attach);
     LeaveCriticalSection(&ddraw_cs);
     return DD_OK;
 }
 
+static HRESULT WINAPI ddraw_surface7_DeleteAttachedSurface(IDirectDrawSurface7 *iface,
+        DWORD flags, IDirectDrawSurface7 *attachment)
+{
+    IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface7(iface);
+    IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface7(attachment);
+    HRESULT hr;
+
+    TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
+
+    hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+    if (FAILED(hr))
+    {
+        return hr;
+    }
+    ddraw_surface7_Release(attachment);
+    return hr;
+}
+
 static HRESULT WINAPI ddraw_surface4_DeleteAttachedSurface(IDirectDrawSurface4 *iface,
         DWORD flags, IDirectDrawSurface4 *attachment)
 {
     IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface4(iface);
     IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface4(attachment);
+    HRESULT hr;
+
     TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
 
-    return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
-            attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+    hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+    if (FAILED(hr))
+    {
+        return hr;
+    }
+    ddraw_surface4_Release(attachment);
+    return hr;
 }
 
 static HRESULT WINAPI ddraw_surface3_DeleteAttachedSurface(IDirectDrawSurface3 *iface,
@@ -1519,10 +1540,16 @@ static HRESULT WINAPI ddraw_surface3_DeleteAttachedSurface(IDirectDrawSurface3 *
 {
     IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface3(iface);
     IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface3(attachment);
+    HRESULT hr;
     TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
 
-    return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
-            attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+    hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+    if (FAILED(hr))
+    {
+        return hr;
+    }
+    ddraw_surface3_Release(attachment);
+    return hr;
 }
 
 static HRESULT WINAPI ddraw_surface2_DeleteAttachedSurface(IDirectDrawSurface2 *iface,
@@ -1530,10 +1557,16 @@ static HRESULT WINAPI ddraw_surface2_DeleteAttachedSurface(IDirectDrawSurface2 *
 {
     IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface2(iface);
     IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface2(attachment);
+    HRESULT hr;
     TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
 
-    return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
-            attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+    hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+    if (FAILED(hr))
+    {
+        return hr;
+    }
+    ddraw_surface2_Release(attachment);
+    return hr;
 }
 
 static HRESULT WINAPI ddraw_surface1_DeleteAttachedSurface(IDirectDrawSurface *iface,
@@ -1541,10 +1574,16 @@ static HRESULT WINAPI ddraw_surface1_DeleteAttachedSurface(IDirectDrawSurface *i
 {
     IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface(iface);
     IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface(attachment);
+    HRESULT hr;
     TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
 
-    return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
-            attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+    hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+    if (FAILED(hr))
+    {
+        return hr;
+    }
+    ddraw_surface1_Release(attachment);
+    return hr;
 }
 
 /*****************************************************************************




More information about the wine-cvs mailing list