Implement _XcptFilter using signal handlers, and add a couple traces.

This commit is contained in:
Juan Lang 2005-05-19 14:21:21 +00:00 committed by Alexandre Julliard
parent 84259840eb
commit 6560c48ecc

View File

@ -96,15 +96,6 @@ static DWORD MSVCRT_nested_handler(PEXCEPTION_RECORD rec,
}
/*********************************************************************
* _XcptFilter (MSVCRT.@)
*/
int _XcptFilter(int ex, PEXCEPTION_POINTERS ptr)
{
FIXME("(%d,%p)semi-stub\n", ex, ptr);
return UnhandledExceptionFilter(ptr);
}
/*********************************************************************
* _EH_prolog (MSVCRT.@)
*/
@ -200,6 +191,7 @@ int _except_handler3(PEXCEPTION_RECORD rec,
{
/* Unwinding the current frame */
_local_unwind2(frame, TRYLEVEL_END);
TRACE("unwound current frame, returning ExceptionContinueSearch\n");
return ExceptionContinueSearch;
}
else
@ -249,6 +241,7 @@ int _except_handler3(PEXCEPTION_RECORD rec,
rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress,
frame->handler, context, dispatcher);
#endif
TRACE("reached TRYLEVEL_END, returning ExceptionContinueSearch\n");
return ExceptionContinueSearch;
}
@ -428,6 +421,9 @@ static LONG WINAPI msvcrt_exception_filter(struct _EXCEPTION_POINTERS *except)
{
LONG ret = EXCEPTION_CONTINUE_SEARCH;
if (!except || !except->ExceptionRecord)
return EXCEPTION_CONTINUE_SEARCH;
switch (except->ExceptionRecord->ExceptionCode)
{
case EXCEPTION_ACCESS_VIOLATION:
@ -528,3 +524,13 @@ __sighandler_t MSVCRT_signal(int sig, __sighandler_t func)
}
return ret;
}
/*********************************************************************
* _XcptFilter (MSVCRT.@)
*/
int _XcptFilter(NTSTATUS ex, PEXCEPTION_POINTERS ptr)
{
TRACE("(%ld,%p)\n", ex, ptr);
/* I assume ptr->ExceptionRecord->ExceptionCode is the same as ex */
return msvcrt_exception_filter(ptr);
}