|
|
Message-ID: <20240809153423.30829-2-contact@hacktivis.me>
Date: Fri, 9 Aug 2024 17:34:22 +0200
From: contact@...ktivis.me
To: musl@...ts.openwall.com
Cc: "Haelwenn (lanodan) Monnier" <contact@...ktivis.me>
Subject: [PATCH v3 2/3] signal: add sig2str(3) from POSIX.1-2024
From: "Haelwenn (lanodan) Monnier" <contact@...ktivis.me>
---
include/signal.h | 5 +++++
src/signal/sig2str.c | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+)
create mode 100644 src/signal/sig2str.c
diff --git a/include/signal.h b/include/signal.h
index c347f861..94ac29b1 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -233,6 +233,11 @@ int pthread_kill(pthread_t, int);
void psiginfo(const siginfo_t *, const char *);
void psignal(int, const char *);
+// SIG2STR_MAX needs to at least fit "RTMIN+nn" (9 bytes)
+// Bumped to 13 to be safe if a case like "SIGRTMIN+nnn" happens
+#define SIG2STR_MAX 13
+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..989d3645
--- /dev/null
+++ b/src/signal/sig2str.c
@@ -0,0 +1,34 @@
+#include <signal.h>
+#include <string.h>
+
+int sig2str(int sig, char *str)
+{
+ if (sig <= 0) return -1;
+
+ if (sig <= SIGSYS)
+ return (strcpy(str, __sys_signame[sig]), 0);
+
+ if (sig == SIGRTMIN)
+ return (strcpy(str, "RTMIN"), 0);
+ if (sig == SIGRTMAX)
+ return (strcpy(str, "RTMAX"), 0);
+
+ if (sig > SIGRTMIN && sig <= SIGRTMAX)
+ {
+ strcpy(str, "RTMIN+");
+ int sigrt = sig-SIGRTMIN;
+
+ char *s = str+6;
+ if (sigrt>=10)
+ {
+ *s++ = '0' + sigrt/10;
+ sigrt %= 10;
+ }
+ *s++ = '0' + sigrt;
+ *s = '\0';
+
+ return 0;
+ }
+
+ return -1;
+}
--
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.