ddraw: make some driver info not const
Rein Klazes
wijn at wanadoo.nl
Mon Dec 5 08:25:49 CST 2005
On Mon, 05 Dec 2005 12:07:32 +0100, you wrote:
>
>You can't return from inside a __TRY block.
I did not know. Here is the next attempt:
Changelog:
dlls/ddraw : main.c, Makefile.in
Catch access violations when calling the DirectDrawEnumerateProc.
Rein.
-------------- next part --------------
--- wine/dlls/ddraw/main.c 2005-08-09 15:31:06.000000000 +0200
+++ mywine/dlls/ddraw/main.c 2005-12-05 13:40:34.000000000 +0100
@@ -39,6 +39,8 @@
#include "winnls.h"
#include "winerror.h"
#include "wingdi.h"
+#include "wine/exception.h"
+#include "excpt.h"
#include "ddraw.h"
#include "d3d.h"
@@ -62,6 +64,14 @@ void (*wine_tsx11_unlock_ptr)(void) = NU
WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
+/* filter for page-fault exceptions */
+static WINE_EXCEPTION_FILTER(page_fault)
+{
+ if (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+ return EXCEPTION_EXECUTE_HANDLER;
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+
/**********************************************************************/
typedef struct {
@@ -180,6 +190,8 @@ HRESULT WINAPI DirectDrawEnumerateExA(
LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags)
{
int i;
+ HRESULT retval = DD_OK;
+ BOOL stop = FALSE;
TRACE("(%p,%p, %08lx)\n", lpCallback, lpContext, dwFlags);
if (TRACE_ON(ddraw)) {
@@ -201,12 +213,22 @@ HRESULT WINAPI DirectDrawEnumerateExA(
/* We have to pass NULL from the primary display device.
* RoadRage chapter 6's enumeration routine expects it. */
+ __TRY
+ {
if (!lpCallback((DDRAW_default_driver == i) ? NULL
:(LPGUID)&DDRAW_drivers[i]->info->guidDeviceIdentifier,
(LPSTR)DDRAW_drivers[i]->info->szDescription,
(LPSTR)DDRAW_drivers[i]->info->szDriver,
lpContext, 0))
- return DD_OK;
+ stop = TRUE;
+ }
+ __EXCEPT(page_fault)
+ {
+ retval = E_INVALIDARG;
+ stop = TRUE;
+ }
+ __ENDTRY
+ if( stop) return retval;
}
/* Unsupported flags */
--- wine/dlls/ddraw/Makefile.in 2005-06-07 12:10:50.000000000 +0200
+++ mywine/dlls/ddraw/Makefile.in 2005-12-04 11:26:37.000000000 +0100
@@ -4,7 +4,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = ddraw.dll
IMPORTLIB = libddraw.$(IMPLIBEXT)
-IMPORTS = ole32 user32 gdi32 advapi32 kernel32
+IMPORTS = ole32 user32 gdi32 advapi32 kernel32 ntdll
EXTRAINCL = @X_CFLAGS@
EXTRALIBS = -ldxguid -luuid @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
More information about the wine-devel
mailing list