Use std::optional for siginfo

ini_importer_tests
elsid 11 months ago
parent c95c8fcc36
commit 388a73376c
No known key found for this signature in database
GPG Key ID: 4DE04C198CBA7625

@ -2,6 +2,7 @@
#include <cstring>
#include <filesystem>
#include <fstream>
#include <optional>
#include <span>
#include <errno.h>
@ -61,8 +62,7 @@ static struct
{
int signum;
pid_t pid;
int has_siginfo;
siginfo_t siginfo;
std::optional<siginfo_t> 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);
}

Loading…
Cancel
Save