blob: 12838b486643d2d6db8c853222ecd39e74620a6e [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
Tyler Chatowbf0609c2021-07-31 16:13:27 -07005#include "glog/logging.h"
Brian Silvermanb47f5552020-10-01 15:08:14 -07006
Brian Silvermanaf784862014-05-13 08:14:55 -07007const char *aos_strsignal(int signal) {
Austin Schuhf7bfb652023-08-25 14:22:50 -07008 thread_local char buffer[512];
Brian Silvermanaf784862014-05-13 08:14:55 -07009
10 if (signal >= SIGRTMIN && signal <= SIGRTMAX) {
Alex Perrycb7da4b2019-08-28 19:35:56 -070011 CHECK_GT(snprintf(buffer, sizeof(buffer), "Real-time signal %d",
12 signal - SIGRTMIN),
13 0);
Brian Silvermanaf784862014-05-13 08:14:55 -070014 return buffer;
15 }
16
Brennan Coslettb15e6b22023-04-05 18:27:36 -050017// sys_strsignal depricated in glibc2.32
18#ifdef __GLIBC__
Philipp Schrader790cb542023-07-05 21:06:52 -070019#if __GLIBC_PREREQ(2, 32)
Brennan Coslettb15e6b22023-04-05 18:27:36 -050020 if (signal > 0 && signal < NSIG && sigdescr_np(signal) != nullptr) {
21 return sigdescr_np(signal);
22 }
Philipp Schrader790cb542023-07-05 21:06:52 -070023#else
Brian Silvermanaf784862014-05-13 08:14:55 -070024 if (signal > 0 && signal < NSIG && sys_siglist[signal] != nullptr) {
25 return sys_siglist[signal];
26 }
Philipp Schrader790cb542023-07-05 21:06:52 -070027#endif
Brennan Coslettb15e6b22023-04-05 18:27:36 -050028// If not using GLIBC assume we can use sys_siglist
29#else
30 if (signal > 0 && signal < NSIG && sys_siglist[signal] != nullptr) {
31 return sys_siglist[signal];
32 }
33#endif
Brian Silvermanaf784862014-05-13 08:14:55 -070034
Alex Perrycb7da4b2019-08-28 19:35:56 -070035 CHECK_GT(snprintf(buffer, sizeof(buffer), "Unknown signal %d", signal), 0);
Brian Silvermanaf784862014-05-13 08:14:55 -070036 return buffer;
37}