Author: greatlrd
Date: Thu Apr 13 10:38:52 2006
New Revision: 21574
URL:
http://svn.reactos.ru/svn/reactos?rev=21574&view=rev
Log:
Bugfix : hal lock surface so it does not crash any longer
Modified:
trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
Modified: trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/hal/surfa…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/hal/surface_hal.c (original)
+++ trunk/reactos/dll/directx/ddraw/hal/surface_hal.c Thu Apr 13 10:38:52 2006
@@ -130,13 +130,26 @@
OutputDebugStringA("Here ddRVal lock");
return Lock.ddRVal;
}
-
+
// FIXME ??? is this right ??
- RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2));
- memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
- pDDSD->dwSize = sizeof(DDSURFACEDESC2);
-
- pDDSD->lpSurface = (LPVOID) Lock.lpSurfData;
+ if (pDDSD != NULL)
+ {
+ if (pDDSD->dwSize == sizeof(DDSURFACEDESC2))
+ {
+ RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2));
+ // FIXME the interanl mddsdPrimary shall be DDSURFACEDESC2
+ memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
+ pDDSD->dwSize = sizeof(DDSURFACEDESC2);
+ }
+ if (pDDSD->dwSize == sizeof(DDSURFACEDESC))
+ {
+ RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC));
+ memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
+ pDDSD->dwSize = sizeof(DDSURFACEDESC);
+ }
+
+ pDDSD->lpSurface = (LPVOID) Lock.lpSurfData;
+ }
return DD_OK;
}