|
Message-ID: <20240804124145.30659-1-contact@hacktivis.me> Date: Sun, 4 Aug 2024 14:41:44 +0200 From: contact@...ktivis.me To: musl@...ts.openwall.com Cc: "Haelwenn (lanodan) Monnier" <contact@...ktivis.me> Subject: [PATCH 1/2] signal: add sig2str(3) from POSIX.1-2024 From: "Haelwenn (lanodan) Monnier" <contact@...ktivis.me> --- include/signal.h | 3 +++ src/signal/sig2str.c | 59 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/signal/sig2str.c diff --git a/include/signal.h b/include/signal.h index c347f861..217cfa08 100644 --- a/include/signal.h +++ b/include/signal.h @@ -233,6 +233,9 @@ int pthread_kill(pthread_t, int); void psiginfo(const siginfo_t *, const char *); void psignal(int, const char *); +#define SIG2STR_MAX sizeof("RTMIN+32") +int sig2str(int signum, char *str); + #endif #if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) diff --git a/src/signal/sig2str.c b/src/signal/sig2str.c new file mode 100644 index 00000000..85f64ec6 --- /dev/null +++ b/src/signal/sig2str.c @@ -0,0 +1,59 @@ +#include <signal.h> +#include <stdio.h> +#include <string.h> + +int sig2str(int signum, char *str) +{ + const char *name = NULL; + switch(signum) + { + case SIGHUP: name = "HUP"; break; + case SIGINT: name = "INT"; break; + case SIGQUIT: name = "QUIT"; break; + case SIGILL: name = "ILL"; break; + case SIGTRAP: name = "TRAP"; break; + case SIGABRT: name = "ABRT"; break; + case SIGBUS: name = "BUS"; break; + case SIGFPE: name = "FPE"; break; + case SIGKILL: name = "KILL"; break; + case SIGUSR1: name = "USR1"; break; + case SIGSEGV: name = "SEGV"; break; + case SIGUSR2: name = "USR2"; break; + case SIGPIPE: name = "PIPE"; break; + case SIGALRM: name = "ALRM"; break; + case SIGTERM: name = "TERM"; break; + case SIGSTKFLT: name = "STKFLT"; break; + case SIGCHLD: name = "CHLD"; break; + case SIGCONT: name = "CONT"; break; + case SIGSTOP: name = "STOP"; break; + case SIGTSTP: name = "TSTP"; break; + case SIGTTIN: name = "TTIN"; break; + case SIGTTOU: name = "TTOU"; break; + case SIGURG: name = "URG"; break; + case SIGXCPU: name = "XCPU"; break; + case SIGXFSZ: name = "XFSZ"; break; + case SIGVTALRM: name = "VTALRM"; break; + case SIGPROF: name = "PROF"; break; + case SIGWINCH: name = "WINCH"; break; + case SIGIO: name = "IO"; break; + case SIGPWR: name = "PWR"; break; + case SIGSYS: name = "SYS"; break; + } + + // macros to functions can't be in switch-case + if(signum == SIGRTMIN) name = "RTMIN"; + if(signum == SIGRTMAX) name = "RTMAX"; + + if(SIGRTMIN+1 <= signum && signum <= SIGRTMAX-1) + { + if(snprintf(str, SIG2STR_MAX, "RTMIN+%i", signum-SIGRTMIN) < 0) return -1; + + return 0; + } + + if(name == NULL) return -1; + + strcpy(str, name); + + return 0; +} -- 2.44.2
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.