fixed partly linking with other directdraw interface, but we still overwrite some member and crash it, when we doing a link.

svn path=/trunk/; revision=25016
This commit is contained in:
Magnus Olsen 2006-12-02 13:37:55 +00:00
parent 1c4a115ec0
commit a709c01ca8

View file

@ -879,20 +879,37 @@ Create_DirectDraw (LPGUID pGUID,
LPDIRECTDRAW* pIface, LPDIRECTDRAW* pIface,
REFIID id, REFIID id,
BOOL ex) BOOL ex)
{ {
LPDDRAWI_DIRECTDRAW_INT This; LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)*pIface;
DX_WINDBG_trace(); DX_WINDBG_trace();
if (!IsEqualGUID(&IID_IDirectDraw7, id)) if (!IsEqualGUID(&IID_IDirectDraw7, id))
{ {
return DDERR_INVALIDDIRECTDRAWGUID; return DDERR_INVALIDDIRECTDRAWGUID;
} }
This = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));
if (This == NULL) if (This == NULL)
{ {
return DDERR_OUTOFMEMORY; /* We do not have any DirectDraw interface alloc */
This = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));
if (This == NULL)
{
return DDERR_OUTOFMEMORY;
}
}
else
{
/* We got the DirectDraw interface alloc and we need create the link */
LPDDRAWI_DIRECTDRAW_INT newThis;
newThis = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));
if (newThis == NULL)
{
return DDERR_OUTOFMEMORY;
}
newThis->lpLink = This;
This = newThis;
} }
This->lpLcl = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT)); This->lpLcl = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));