blob: cf1aad1e523594fe71b98440f2d670c38f3e1843 [file] [log] [blame]
John Park33858a32018-09-28 23:05:48 -07001#include "aos/libc/aos_strsignal.h"
Brian Silvermanaf784862014-05-13 08:14:55 -07002
Tyler Chatowbf0609c2021-07-31 16:13:27 -07003#include <csignal>
Brian Silvermanaf784862014-05-13 08:14:55 -07004
Brian Silvermanb47f5552020-10-01 15:08:14 -07005#include "aos/thread_local.h"
Tyler Chatowbf0609c2021-07-31 16:13:27 -07006#include "glog/logging.h"
Brian Silvermanb47f5552020-10-01 15:08:14 -07007
Brian Silvermanaf784862014-05-13 08:14:55 -07008const char *aos_strsignal(int signal) {
Brian Silvermanb47f5552020-10-01 15:08:14 -07009 AOS_THREAD_LOCAL char buffer[512];
Brian Silvermanaf784862014-05-13 08:14:55 -070010
11 if (signal >= SIGRTMIN && signal <= SIGRTMAX) {
Alex Perrycb7da4b2019-08-28 19:35:56 -070012 CHECK_GT(snprintf(buffer, sizeof(buffer), "Real-time signal %d",
13 signal - SIGRTMIN),
14 0);
Brian Silvermanaf784862014-05-13 08:14:55 -070015 return buffer;
16 }
17
Brennan Coslettb15e6b22023-04-05 18:27:36 -050018// sys_strsignal depricated in glibc2.32
19#ifdef __GLIBC__
20 #if __GLIBC_PREREQ(2, 32)
21 if (signal > 0 && signal < NSIG && sigdescr_np(signal) != nullptr) {
22 return sigdescr_np(signal);
23 }
24 #else
Brian Silvermanaf784862014-05-13 08:14:55 -070025 if (signal > 0 && signal < NSIG && sys_siglist[signal] != nullptr) {
26 return sys_siglist[signal];
27 }
Brennan Coslettb15e6b22023-04-05 18:27:36 -050028 #endif
29// If not using GLIBC assume we can use sys_siglist
30#else
31 if (signal > 0 && signal < NSIG && sys_siglist[signal] != nullptr) {
32 return sys_siglist[signal];
33 }
34#endif
Brian Silvermanaf784862014-05-13 08:14:55 -070035
Alex Perrycb7da4b2019-08-28 19:35:56 -070036 CHECK_GT(snprintf(buffer, sizeof(buffer), "Unknown signal %d", signal), 0);
Brian Silvermanaf784862014-05-13 08:14:55 -070037 return buffer;
38}