Michael Stefaniuc : ddraw: Avoid some unsafe IDirect3D7 iface to IDirectDrawImpl transitions.
Alexandre Julliard
julliard at winehq.org
Tue Jan 18 10:27:36 CST 2011
Module: wine
Branch: master
Commit: b3ced2fa8a500c427cdb4829aaaad34c3fef6793
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b3ced2fa8a500c427cdb4829aaaad34c3fef6793
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Tue Jan 18 12:22:48 2011 +0100
ddraw: Avoid some unsafe IDirect3D7 iface to IDirectDrawImpl transitions.
---
dlls/ddraw/device.c | 54 ++++++++++++++++++++++----------------------------
1 files changed, 24 insertions(+), 30 deletions(-)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index a7eb2dd..d08bf01 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -1727,56 +1727,50 @@ IDirect3DDeviceImpl_7_GetDirect3D(IDirect3DDevice7 *iface,
return D3D_OK;
}
-static HRESULT WINAPI
-Thunk_IDirect3DDeviceImpl_3_GetDirect3D(IDirect3DDevice3 *iface,
- IDirect3D3 **Direct3D3)
+static HRESULT WINAPI IDirect3DDeviceImpl_3_GetDirect3D(IDirect3DDevice3 *iface,
+ IDirect3D3 **Direct3D3)
{
IDirect3DDeviceImpl *This = device_from_device3(iface);
- HRESULT ret;
- IDirect3D7 *ret_ptr;
TRACE("iface %p, d3d %p.\n", iface, Direct3D3);
- ret = IDirect3DDevice7_GetDirect3D((IDirect3DDevice7 *)This, &ret_ptr);
- if(ret != D3D_OK)
- return ret;
- *Direct3D3 = ret_ptr ? (IDirect3D3 *)&ddraw_from_d3d7(ret_ptr)->IDirect3D3_vtbl : NULL;
+ if(!Direct3D3)
+ return DDERR_INVALIDPARAMS;
+
+ IDirect3D3_AddRef((IDirect3D3 *)&This->ddraw->IDirect3D3_vtbl);
+ *Direct3D3 = (IDirect3D3 *)&This->ddraw->IDirect3D3_vtbl;
TRACE(" returning interface %p\n", *Direct3D3);
return D3D_OK;
}
-static HRESULT WINAPI
-Thunk_IDirect3DDeviceImpl_2_GetDirect3D(IDirect3DDevice2 *iface,
- IDirect3D2 **Direct3D2)
+static HRESULT WINAPI IDirect3DDeviceImpl_2_GetDirect3D(IDirect3DDevice2 *iface,
+ IDirect3D2 **Direct3D2)
{
IDirect3DDeviceImpl *This = device_from_device2(iface);
- HRESULT ret;
- IDirect3D7 *ret_ptr;
TRACE("iface %p, d3d %p.\n", iface, Direct3D2);
- ret = IDirect3DDevice7_GetDirect3D((IDirect3DDevice7 *)This, &ret_ptr);
- if(ret != D3D_OK)
- return ret;
- *Direct3D2 = ret_ptr ? (IDirect3D2 *)&ddraw_from_d3d7(ret_ptr)->IDirect3D2_vtbl : NULL;
+ if(!Direct3D2)
+ return DDERR_INVALIDPARAMS;
+
+ IDirect3D2_AddRef((IDirect3D2 *)&This->ddraw->IDirect3D2_vtbl);
+ *Direct3D2 = (IDirect3D2 *)&This->ddraw->IDirect3D2_vtbl;
TRACE(" returning interface %p\n", *Direct3D2);
return D3D_OK;
}
-static HRESULT WINAPI
-Thunk_IDirect3DDeviceImpl_1_GetDirect3D(IDirect3DDevice *iface,
- IDirect3D **Direct3D)
+static HRESULT WINAPI IDirect3DDeviceImpl_1_GetDirect3D(IDirect3DDevice *iface,
+ IDirect3D **Direct3D)
{
IDirect3DDeviceImpl *This = device_from_device1(iface);
- HRESULT ret;
- IDirect3D7 *ret_ptr;
TRACE("iface %p, d3d %p.\n", iface, Direct3D);
- ret = IDirect3DDevice7_GetDirect3D((IDirect3DDevice7 *)This, &ret_ptr);
- if(ret != D3D_OK)
- return ret;
- *Direct3D = ret_ptr ? (IDirect3D *)&ddraw_from_d3d7(ret_ptr)->IDirect3D_vtbl : NULL;
+ if(!Direct3D)
+ return DDERR_INVALIDPARAMS;
+
+ IDirect3D_AddRef((IDirect3D *)&This->ddraw->IDirect3D_vtbl);
+ *Direct3D = (IDirect3D *)&This->ddraw->IDirect3D_vtbl;
TRACE(" returning interface %p\n", *Direct3D);
return D3D_OK;
}
@@ -6806,7 +6800,7 @@ static const struct IDirect3DDevice3Vtbl d3d_device3_vtbl =
Thunk_IDirect3DDeviceImpl_3_EnumTextureFormats,
Thunk_IDirect3DDeviceImpl_3_BeginScene,
Thunk_IDirect3DDeviceImpl_3_EndScene,
- Thunk_IDirect3DDeviceImpl_3_GetDirect3D,
+ IDirect3DDeviceImpl_3_GetDirect3D,
IDirect3DDeviceImpl_3_SetCurrentViewport,
IDirect3DDeviceImpl_3_GetCurrentViewport,
Thunk_IDirect3DDeviceImpl_3_SetRenderTarget,
@@ -6855,7 +6849,7 @@ static const struct IDirect3DDevice2Vtbl d3d_device2_vtbl =
IDirect3DDeviceImpl_2_EnumTextureFormats,
Thunk_IDirect3DDeviceImpl_2_BeginScene,
Thunk_IDirect3DDeviceImpl_2_EndScene,
- Thunk_IDirect3DDeviceImpl_2_GetDirect3D,
+ IDirect3DDeviceImpl_2_GetDirect3D,
Thunk_IDirect3DDeviceImpl_2_SetCurrentViewport,
Thunk_IDirect3DDeviceImpl_2_GetCurrentViewport,
Thunk_IDirect3DDeviceImpl_2_SetRenderTarget,
@@ -6903,7 +6897,7 @@ static const struct IDirect3DDeviceVtbl d3d_device1_vtbl =
IDirect3DDeviceImpl_1_DeleteMatrix,
Thunk_IDirect3DDeviceImpl_1_BeginScene,
Thunk_IDirect3DDeviceImpl_1_EndScene,
- Thunk_IDirect3DDeviceImpl_1_GetDirect3D
+ IDirect3DDeviceImpl_1_GetDirect3D
};
/*****************************************************************************
More information about the wine-cvs
mailing list