MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / register_signal_handler

Function register_signal_handler

cli/signalhandler.cpp:299–328  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

297}
298
299void register_signal_handler(FILE * const output)
300{
301 signalOutput = output;
302
303 // determine stack vs. heap
304 char stackVariable;
305 char *heapVariable=static_cast<char*>(malloc(1));
306 bStackBelowHeap = &stackVariable < heapVariable;
307 free(heapVariable);
308
309 // set up alternative stack for signal handler
310 stack_t segv_stack;
311 segv_stack.ss_sp = mytstack;
312 segv_stack.ss_flags = 0;
313 segv_stack.ss_size = MYSTACKSIZE;
314 if (sigaltstack(&segv_stack, nullptr) != 0) {
315 // TODO: log errno
316 fputs("could not set alternate signal stack context.\n", output);
317 std::exit(EXIT_FAILURE);
318 }
319
320 // install signal handler
321 struct sigaction act;
322 memset(&act, 0, sizeof(act));
323 act.sa_flags=SA_SIGINFO|SA_ONSTACK;
324 act.sa_sigaction=CppcheckSignalHandler;
325 for (auto sig=listofsignals.cbegin(); sig!=listofsignals.cend(); ++sig) {
326 sigaction(sig->first, &act, nullptr);
327 }
328}
329
330#endif

Callers 2

check_wrapperMethod · 0.85
mainFunction · 0.85

Calls 1

sigactionClass · 0.85

Tested by 1

mainFunction · 0.68