7{
8 int ret = EXCEPTION_CONTINUE_SEARCH;
9
10 for (int s = 0; s < sigcnt && ret != EXCEPTION_EXECUTE_HANDLER; ++s)
11 switch (sigs[s]) {
12 case SIGSEGV:
13 if (seh_code == STATUS_ACCESS_VIOLATION)
14 ret = EXCEPTION_EXECUTE_HANDLER;
15 break;
16 case SIGILL:
17 if (seh_code == STATUS_ILLEGAL_INSTRUCTION)
18 ret = EXCEPTION_EXECUTE_HANDLER;
19 break;
20 case SIGFPE:
21 if (seh_code == STATUS_FLOAT_DIVIDE_BY_ZERO ||
22 seh_code == STATUS_FLOAT_OVERFLOW ||
23 seh_code == STATUS_FLOAT_UNDERFLOW ||
24 seh_code == STATUS_INTEGER_DIVIDE_BY_ZERO)
25 ret = EXCEPTION_EXECUTE_HANDLER;
26 break;
27 default: ret = EXCEPTION_CONTINUE_SEARCH;
28 }
29
30 return ret;
31}