diff --git a/components/crashcatcher/crashcatcher.cpp b/components/crashcatcher/crashcatcher.cpp index 7a2e2b0a12..92f33d0708 100644 --- a/components/crashcatcher/crashcatcher.cpp +++ b/components/crashcatcher/crashcatcher.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -61,8 +62,7 @@ static struct { int signum; pid_t pid; - int has_siginfo; - siginfo_t siginfo; + std::optional siginfo; char buf[1024]; } crash_info; @@ -261,8 +261,9 @@ static void crash_catcher(int signum, siginfo_t* siginfo, void* context) crash_info.signum = signum; crash_info.pid = getpid(); - crash_info.has_siginfo = !!siginfo; - if (siginfo) + if (siginfo == nullptr) + crash_info.siginfo = std::nullopt; + else crash_info.siginfo = *siginfo; if (cc_user_info) cc_user_info(crash_info.buf, crash_info.buf + sizeof(crash_info.buf)); @@ -318,30 +319,30 @@ static void crash_handler(const char* logfile) const char* sigdesc = findSignalDescription(signals, crash_info.signum); - if (crash_info.has_siginfo) + if (crash_info.siginfo.has_value()) { switch (crash_info.signum) { case SIGSEGV: - sigdesc = findSignalDescription(sigSegvCodes, crash_info.siginfo.si_code); + sigdesc = findSignalDescription(sigSegvCodes, crash_info.siginfo->si_code); break; case SIGFPE: - sigdesc = findSignalDescription(sigFpeCodes, crash_info.siginfo.si_code); + sigdesc = findSignalDescription(sigFpeCodes, crash_info.siginfo->si_code); break; case SIGILL: - sigdesc = findSignalDescription(sigIllCodes, crash_info.siginfo.si_code); + sigdesc = findSignalDescription(sigIllCodes, crash_info.siginfo->si_code); break; case SIGBUS: - sigdesc = findSignalDescription(sigBusCodes, crash_info.siginfo.si_code); + sigdesc = findSignalDescription(sigBusCodes, crash_info.siginfo->si_code); break; } } fprintf(stderr, "%s (signal %i)\n", sigdesc, crash_info.signum); - if (crash_info.has_siginfo) - fprintf(stderr, "Address: %p\n", crash_info.siginfo.si_addr); + if (crash_info.siginfo.has_value()) + fprintf(stderr, "Address: %p\n", crash_info.siginfo->si_addr); fputc('\n', stderr); if (logfile) @@ -358,8 +359,8 @@ static void crash_handler(const char* logfile) "*** Fatal Error ***\n" "%s (signal %i)\n", sigdesc, crash_info.signum); - if (crash_info.has_siginfo) - printf("Address: %p\n", crash_info.siginfo.si_addr); + if (crash_info.siginfo.has_value()) + printf("Address: %p\n", crash_info.siginfo->si_addr); fputc('\n', stdout); fflush(stdout); }