Author: greatlrd
Date: Sat Dec 22 23:33:11 2007
New Revision: 31402
URL:
http://svn.reactos.org/svn/reactos?rev=31402&view=rev
Log:
Fixing smaller bugs in ddraw.dll
GetCaps
1. GetCaps should not call get avail memory for hel
2. add ddcaps size check
3. add Enter/leave CriticalSection
GetDeviceIdentifier
1. add Enter/leave CriticalSection
Modified:
trunk/reactos/dll/directx/ddraw/Ddraw/GetCaps.c
trunk/reactos/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c
Modified: trunk/reactos/dll/directx/ddraw/Ddraw/GetCaps.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/Ddraw/Ge…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/Ddraw/GetCaps.c (original)
+++ trunk/reactos/dll/directx/ddraw/Ddraw/GetCaps.c Sat Dec 22 23:33:11 2007
@@ -32,9 +32,39 @@
DX_WINDBG_trace();
- _SEH_TRY
+ EnterCriticalSection( &ddcs );
+
+ _SEH_TRY
{
if ((!pDriverCaps) && (!pHELCaps))
+ {
+ retVal = DDERR_INVALIDPARAMS;
+ _SEH_LEAVE;
+ }
+
+ /*
+ * DDCAPS_DX6 and DDCAPS_DX7 have same size so
+ * we do not need check both only one of them
+ */
+ if ( (pDriverCaps) &&
+ (pDriverCaps->dwSize != sizeof(DDCAPS_DX1) ) &&
+ (pDriverCaps->dwSize != sizeof(DDCAPS_DX3) ) &&
+ (pDriverCaps->dwSize != sizeof(DDCAPS_DX5) ) &&
+ (pDriverCaps->dwSize != sizeof(DDCAPS_DX7 )) )
+ {
+ retVal = DDERR_INVALIDPARAMS;
+ _SEH_LEAVE;
+ }
+
+ /*
+ * DDCAPS_DX6 and DDCAPS_DX7 have same size so
+ * we do not need check both only one of them
+ */
+ if ( (pHELCaps) &&
+ (pHELCaps->dwSize != sizeof(DDCAPS_DX1) ) &&
+ (pHELCaps->dwSize != sizeof(DDCAPS_DX3) ) &&
+ (pHELCaps->dwSize != sizeof(DDCAPS_DX5) ) &&
+ (pHELCaps->dwSize != sizeof(DDCAPS_DX7 )) )
{
retVal = DDERR_INVALIDPARAMS;
_SEH_LEAVE;
@@ -153,13 +183,10 @@
if (pHELCaps)
{
/* Setup software caps */
- DDSCAPS2 ddscaps = { 0 };
LPDDCORECAPS CoreCaps =
(LPDDCORECAPS)&This->lpLcl->lpGbl->ddHELCaps;
DWORD dwTotal = 0;
DWORD dwFree = 0;
-
- Main_DirectDraw_GetAvailableVidMem4(This, &ddscaps, &dwTotal,
&dwFree);
switch (pHELCaps->dwSize)
{
@@ -259,7 +286,6 @@
break;
}
}
-
}
_SEH_HANDLE
@@ -268,6 +294,7 @@
}
_SEH_END;
- return retVal;
+ LeaveCriticalSection( &ddcs );
+ return retVal;
}
Modified: trunk/reactos/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/Ddraw/Ge…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c (original)
+++ trunk/reactos/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c Sat Dec 22 23:33:11 2007
@@ -74,6 +74,8 @@
long *lpdata;
DX_WINDBG_trace();
+
+ EnterCriticalSection( &ddcs );
_SEH_TRY
{
@@ -184,5 +186,6 @@
}
_SEH_END;
+ LeaveCriticalSection( &ddcs );
return retVal;
}