diff options
Diffstat (limited to 'src/debug/crash/SignalSafe.cpp')
| -rw-r--r-- | src/debug/crash/SignalSafe.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/debug/crash/SignalSafe.cpp b/src/debug/crash/SignalSafe.cpp new file mode 100644 index 00000000..22717f1b --- /dev/null +++ b/src/debug/crash/SignalSafe.cpp @@ -0,0 +1,34 @@ +#include "SignalSafe.hpp" + +#ifndef __GLIBC__ +#include <signal.h> +#endif +#include <fcntl.h> +#include <unistd.h> +#include <cstring> + +using namespace SignalSafe; + +// NOLINTNEXTLINE +extern "C" char** environ; + +// +char const* SignalSafe::getenv(char const* name) { + const size_t len = strlen(name); + for (char** var = environ; *var != nullptr; var++) { + if (strncmp(*var, name, len) == 0 && (*var)[len] == '=') { + return (*var) + len + 1; + } + } + return nullptr; +} + +char const* SignalSafe::strsignal(int sig) { +#ifdef __GLIBC__ + return sigabbrev_np(sig); +#elif defined(__DragonFly__) || defined(__FreeBSD__) + return sys_signame[sig]; +#else + return "unknown"; +#endif +} |
