Michael Stefaniuc : ddraw: Avoid unsafe IDirect3DVertexBuffer to object casts.
Alexandre Julliard
julliard at winehq.org
Wed Jun 15 13:42:58 CDT 2011
Module: wine
Branch: master
Commit: ca1ee4a7c353ff911326b001c228ea867e375a74
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ca1ee4a7c353ff911326b001c228ea867e375a74
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Wed Jun 15 12:38:47 2011 +0200
ddraw: Avoid unsafe IDirect3DVertexBuffer to object casts.
---
dlls/ddraw/ddraw.c | 18 +++++++++++++-----
1 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 0faaecc..4fbabf3 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4968,17 +4968,25 @@ static HRESULT WINAPI d3d3_CreateVertexBuffer(IDirect3D3 *iface, D3DVERTEXBUFFER
IDirect3DVertexBuffer **vertex_buffer, DWORD flags, IUnknown *outer_unknown)
{
IDirectDrawImpl *This = impl_from_IDirect3D3(iface);
+ IDirect3DVertexBufferImpl *object;
HRESULT hr;
TRACE("iface %p, desc %p, vertex_buffer %p, flags %#x, outer_unknown %p.\n",
iface, desc, vertex_buffer, flags, outer_unknown);
- if (outer_unknown) return CLASS_E_NOAGGREGATION;
+ if (outer_unknown)
+ return CLASS_E_NOAGGREGATION;
+ if (!vertex_buffer || !desc)
+ return DDERR_INVALIDPARAMS;
- hr = d3d7_CreateVertexBuffer(&This->IDirect3D7_iface, desc,
- (IDirect3DVertexBuffer7 **)vertex_buffer, flags);
- if (*vertex_buffer)
- *vertex_buffer = (IDirect3DVertexBuffer *)&((IDirect3DVertexBufferImpl *)*vertex_buffer)->IDirect3DVertexBuffer_vtbl;
+ hr = d3d_vertex_buffer_create(&object, This, desc);
+ if (hr == D3D_OK)
+ {
+ TRACE("Created vertex buffer %p.\n", object);
+ *vertex_buffer = (IDirect3DVertexBuffer *)object;
+ }
+ else
+ WARN("Failed to create vertex buffer, hr %#x.\n", hr);
return hr;
}
More information about the wine-cvs
mailing list