mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 01:37:53 -06:00
Add the full source of BambuStudio
using version 1.0.10
This commit is contained in:
parent
30bcadab3e
commit
1555904bef
3771 changed files with 1251328 additions and 0 deletions
43
src/libslic3r/TryCatchSignalSEH.cpp
Normal file
43
src/libslic3r/TryCatchSignalSEH.cpp
Normal file
|
@ -0,0 +1,43 @@
|
|||
#include "TryCatchSignalSEH.hpp"
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
static int signal_seh_filter(int sigcnt, const Slic3r::SignalT *sigs,
|
||||
unsigned long seh_code)
|
||||
{
|
||||
int ret = EXCEPTION_CONTINUE_SEARCH;
|
||||
|
||||
for (int s = 0; s < sigcnt && ret != EXCEPTION_EXECUTE_HANDLER; ++s)
|
||||
switch (sigs[s]) {
|
||||
case SIGSEGV:
|
||||
if (seh_code == STATUS_ACCESS_VIOLATION)
|
||||
ret = EXCEPTION_EXECUTE_HANDLER;
|
||||
break;
|
||||
case SIGILL:
|
||||
if (seh_code == STATUS_ILLEGAL_INSTRUCTION)
|
||||
ret = EXCEPTION_EXECUTE_HANDLER;
|
||||
break;
|
||||
case SIGFPE:
|
||||
if (seh_code == STATUS_FLOAT_DIVIDE_BY_ZERO ||
|
||||
seh_code == STATUS_FLOAT_OVERFLOW ||
|
||||
seh_code == STATUS_FLOAT_UNDERFLOW ||
|
||||
seh_code == STATUS_INTEGER_DIVIDE_BY_ZERO)
|
||||
ret = EXCEPTION_EXECUTE_HANDLER;
|
||||
break;
|
||||
default: ret = EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Slic3r::detail::try_catch_signal_seh(int sigcnt, const SignalT *sigs,
|
||||
std::function<void()> &&fn,
|
||||
std::function<void()> &&cfn)
|
||||
{
|
||||
__try {
|
||||
fn();
|
||||
}
|
||||
__except(signal_seh_filter(sigcnt, sigs, GetExceptionCode())) {
|
||||
cfn();
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue