OrionLibC
Barry Adding more signal functions fd1ac46 (3 years, 2 months ago)
diff --git a/include/signal.h b/include/signal.h
index 84535e8..b355567 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -40,6 +40,11 @@ int tgkill(pid_t tgid, pid_t tid, int sig);
int kill(pid_t pid, int sig);
sighandler_t signal(int signum, sighandler_t handler);
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
+int sigemptyset(sigset_t *set);
+int sigfillset(sigset_t *set);
+int sigaddset(sigset_t *set, int signum);
+int sigdelset(sigset_t *set, int signum);
+int sigismember(const sigset_t *set, int signum);
#ifdef __cplusplus
}
diff --git a/signal/sigsetops.c b/signal/sigsetops.c
new file mode 100644
index 0000000..08cf870
--- /dev/null
+++ b/signal/sigsetops.c
@@ -0,0 +1,53 @@
+#include <signal.h>
+#include <errno.h>
+
+/* Empty a signal set */
+int
+sigemptyset(sigset_t *set)
+{
+ *set = 0;
+ return 0;
+}
+
+/* Fill a signal set */
+int
+sigfillset(sigset_t *set)
+{
+ *set = 0xFFFFFFFF;
+ return 0;
+}
+
+/* Add a signal to a signal set */
+int
+sigaddset(sigset_t *set, int signum)
+{
+ if (signum < 0 || signum >= 32) {
+ errno = EINVAL;
+ return -1;
+ }
+ *set |= (1 << (signum - 1));
+ return 0;
+}
+
+/* Remove a signal from a signal set */
+int
+sigdelset(sigset_t *set, int signum)
+{
+ if (signum < 0 || signum >= 32) {
+ errno = EINVAL;
+ return -1;
+ }
+ *set &= ~(1 << (signum - 1));
+ return 0;
+}
+
+/* Check if a signal is in a signal set */
+int
+sigismember(const sigset_t *set, int signum)
+{
+ if (signum < 0 || signum >= 32) {
+ errno = EINVAL;
+ return -1;
+ }
+ return (*set & (1 << (signum - 1)));
+}