Reformatted, for real

svn path=/trunk/; revision=25909
This commit is contained in:
KJK::Hyperion 2007-02-26 15:55:43 +00:00
parent 97f61ad508
commit 35f897c768

View file

@ -44,194 +44,194 @@ void const * _SEHRtlUnwind = RtlUnwind;
static void __stdcall _SEHLocalUnwind static void __stdcall _SEHLocalUnwind
( (
_SEHPortableFrame_t * frame, _SEHPortableFrame_t * frame,
_SEHPortableTryLevel_t * dsttrylevel _SEHPortableTryLevel_t * dsttrylevel
) )
{ {
_SEHPortableTryLevel_t * trylevel; _SEHPortableTryLevel_t * trylevel;
for for
( (
trylevel = frame->SPF_TopTryLevel; trylevel = frame->SPF_TopTryLevel;
trylevel != dsttrylevel; trylevel != dsttrylevel;
trylevel = trylevel->SPT_Next trylevel = trylevel->SPT_Next
) )
{ {
_SEHFinally_t pfnFinally; _SEHFinally_t pfnFinally;
/* ASSERT(trylevel); */ /* ASSERT(trylevel); */
pfnFinally = trylevel->SPT_Handlers->SH_Finally; pfnFinally = trylevel->SPT_Handlers->SH_Finally;
if(pfnFinally) if(pfnFinally)
pfnFinally(frame); pfnFinally(frame);
} }
} }
static void __cdecl _SEHCallHandler static void __cdecl _SEHCallHandler
( (
_SEHPortableFrame_t * frame, _SEHPortableFrame_t * frame,
_SEHPortableTryLevel_t * trylevel _SEHPortableTryLevel_t * trylevel
) )
{ {
_SEHGlobalUnwind(frame); _SEHGlobalUnwind(frame);
_SEHLocalUnwind(frame, trylevel); _SEHLocalUnwind(frame, trylevel);
frame->SPF_Handler(trylevel); frame->SPF_Handler(trylevel);
} }
static int __cdecl _SEHFrameHandler static int __cdecl _SEHFrameHandler
( (
struct _EXCEPTION_RECORD * ExceptionRecord, struct _EXCEPTION_RECORD * ExceptionRecord,
void * EstablisherFrame, void * EstablisherFrame,
struct _CONTEXT * ContextRecord, struct _CONTEXT * ContextRecord,
void * DispatcherContext void * DispatcherContext
) )
{ {
_SEHPortableFrame_t * frame; _SEHPortableFrame_t * frame;
_SEHCleanHandlerEnvironment(); _SEHCleanHandlerEnvironment();
frame = EstablisherFrame; frame = EstablisherFrame;
/* Unwinding */ /* Unwinding */
if(ExceptionRecord->ExceptionFlags & (4 | 2)) if(ExceptionRecord->ExceptionFlags & (4 | 2))
_SEHLocalUnwind(frame, NULL); _SEHLocalUnwind(frame, NULL);
/* Handling */ /* Handling */
else else
{ {
int ret; int ret;
_SEHPortableTryLevel_t * trylevel; _SEHPortableTryLevel_t * trylevel;
if(ExceptionRecord->ExceptionCode) if(ExceptionRecord->ExceptionCode)
frame->SPF_Code = ExceptionRecord->ExceptionCode; frame->SPF_Code = ExceptionRecord->ExceptionCode;
else else
frame->SPF_Code = 0xC0000001; frame->SPF_Code = 0xC0000001;
for for
( (
trylevel = frame->SPF_TopTryLevel; trylevel = frame->SPF_TopTryLevel;
trylevel != NULL; trylevel != NULL;
trylevel = trylevel->SPT_Next trylevel = trylevel->SPT_Next
) )
{ {
_SEHFilter_t pfnFilter = trylevel->SPT_Handlers->SH_Filter; _SEHFilter_t pfnFilter = trylevel->SPT_Handlers->SH_Filter;
switch((UINT_PTR)pfnFilter) switch((UINT_PTR)pfnFilter)
{ {
case (UINT_PTR)_SEH_STATIC_FILTER(_SEH_EXECUTE_HANDLER): case (UINT_PTR)_SEH_STATIC_FILTER(_SEH_EXECUTE_HANDLER):
case (UINT_PTR)_SEH_STATIC_FILTER(_SEH_CONTINUE_SEARCH): case (UINT_PTR)_SEH_STATIC_FILTER(_SEH_CONTINUE_SEARCH):
case (UINT_PTR)_SEH_STATIC_FILTER(_SEH_CONTINUE_EXECUTION): case (UINT_PTR)_SEH_STATIC_FILTER(_SEH_CONTINUE_EXECUTION):
{ {
ret = (int)((UINT_PTR)pfnFilter) - 2; ret = (int)((UINT_PTR)pfnFilter) - 2;
break; break;
} }
default: default:
{ {
if(trylevel->SPT_Handlers->SH_Filter) if(trylevel->SPT_Handlers->SH_Filter)
{ {
EXCEPTION_POINTERS ep; EXCEPTION_POINTERS ep;
ep.ExceptionRecord = ExceptionRecord; ep.ExceptionRecord = ExceptionRecord;
ep.ContextRecord = ContextRecord; ep.ContextRecord = ContextRecord;
ret = pfnFilter(&ep, frame); ret = pfnFilter(&ep, frame);
} }
else else
ret = _SEH_CONTINUE_SEARCH; ret = _SEH_CONTINUE_SEARCH;
break; break;
} }
} }
/* _SEH_CONTINUE_EXECUTION */ /* _SEH_CONTINUE_EXECUTION */
if(ret < 0) if(ret < 0)
return ExceptionContinueExecution; return ExceptionContinueExecution;
/* _SEH_EXECUTE_HANDLER */ /* _SEH_EXECUTE_HANDLER */
else if(ret > 0) else if(ret > 0)
_SEHCallHandler(frame, trylevel); _SEHCallHandler(frame, trylevel);
/* _SEH_CONTINUE_SEARCH */ /* _SEH_CONTINUE_SEARCH */
else else
continue; continue;
} }
/* FALLTHROUGH */ /* FALLTHROUGH */
} }
return ExceptionContinueSearch; return ExceptionContinueSearch;
} }
void __stdcall _SEHEnterFrame_s void __stdcall _SEHEnterFrame_s
( (
_SEHPortableFrame_t * frame, _SEHPortableFrame_t * frame,
_SEHPortableTryLevel_t * trylevel _SEHPortableTryLevel_t * trylevel
) )
{ {
_SEHEnterFrame_f(frame, trylevel); _SEHEnterFrame_f(frame, trylevel);
} }
void __stdcall _SEHEnterTry_s(_SEHPortableTryLevel_t * trylevel) void __stdcall _SEHEnterTry_s(_SEHPortableTryLevel_t * trylevel)
{ {
_SEHEnterTry_f(trylevel); _SEHEnterTry_f(trylevel);
} }
void __stdcall _SEHLeave_s(void) void __stdcall _SEHLeave_s(void)
{ {
_SEHLeave_f(); _SEHLeave_f();
} }
void _SEH_FASTCALL _SEHEnterFrame_f void _SEH_FASTCALL _SEHEnterFrame_f
( (
_SEHPortableFrame_t * frame, _SEHPortableFrame_t * frame,
_SEHPortableTryLevel_t * trylevel _SEHPortableTryLevel_t * trylevel
) )
{ {
/* ASSERT(frame); */ /* ASSERT(frame); */
/* ASSERT(trylevel); */ /* ASSERT(trylevel); */
frame->SPF_Registration.SER_Handler = _SEHFrameHandler; frame->SPF_Registration.SER_Handler = _SEHFrameHandler;
frame->SPF_Code = 0; frame->SPF_Code = 0;
frame->SPF_TopTryLevel = trylevel; frame->SPF_TopTryLevel = trylevel;
trylevel->SPT_Next = NULL; trylevel->SPT_Next = NULL;
_SEHRegisterFrame(&frame->SPF_Registration); _SEHRegisterFrame(&frame->SPF_Registration);
} }
void _SEH_FASTCALL _SEHEnterTry_f(_SEHPortableTryLevel_t * trylevel) void _SEH_FASTCALL _SEHEnterTry_f(_SEHPortableTryLevel_t * trylevel)
{ {
_SEHPortableFrame_t * frame; _SEHPortableFrame_t * frame;
frame = _SEH_CONTAINING_RECORD frame = _SEH_CONTAINING_RECORD
( (
_SEHCurrentRegistration(), _SEHCurrentRegistration(),
_SEHPortableFrame_t, _SEHPortableFrame_t,
SPF_Registration SPF_Registration
); );
trylevel->SPT_Next = frame->SPF_TopTryLevel; trylevel->SPT_Next = frame->SPF_TopTryLevel;
frame->SPF_TopTryLevel = trylevel; frame->SPF_TopTryLevel = trylevel;
} }
void _SEH_FASTCALL _SEHLeave_f(void) void _SEH_FASTCALL _SEHLeave_f(void)
{ {
_SEHPortableFrame_t * frame; _SEHPortableFrame_t * frame;
_SEHPortableTryLevel_t * trylevel; _SEHPortableTryLevel_t * trylevel;
frame = _SEH_CONTAINING_RECORD frame = _SEH_CONTAINING_RECORD
( (
_SEHCurrentRegistration(), _SEHCurrentRegistration(),
_SEHPortableFrame_t, _SEHPortableFrame_t,
SPF_Registration SPF_Registration
); );
/* ASSERT(frame); */ /* ASSERT(frame); */
trylevel = frame->SPF_TopTryLevel; trylevel = frame->SPF_TopTryLevel;
/* ASSERT(trylevel); */ /* ASSERT(trylevel); */
if(trylevel->SPT_Next) if(trylevel->SPT_Next)
frame->SPF_TopTryLevel = trylevel->SPT_Next; frame->SPF_TopTryLevel = trylevel->SPT_Next;
else else
_SEHUnregisterFrame(); _SEHUnregisterFrame();
} }
/* EOF */ /* EOF */