summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/signal.h3
-rw-r--r--src/signal/sigandset.c17
-rw-r--r--src/signal/sigorset.c17
3 files changed, 37 insertions, 0 deletions
diff --git a/include/signal.h b/include/signal.h
index b24f43a5..b8ba1b5a 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -220,6 +220,9 @@ typedef void (*sig_t)(int);
typedef void (*sighandler_t)(int);
void (*bsd_signal(int, void (*)(int)))(int);
int sigisemptyset(const sigset_t *);
+int sigorset (sigset_t *, sigset_t *, sigset_t *);
+int sigandset(sigset_t *, sigset_t *, sigset_t *);
+
#define SA_NOMASK SA_NODEFER
#define SA_ONESHOT SA_RESETHAND
#endif
diff --git a/src/signal/sigandset.c b/src/signal/sigandset.c
new file mode 100644
index 00000000..f62c7fec
--- /dev/null
+++ b/src/signal/sigandset.c
@@ -0,0 +1,17 @@
+#define _GNU_SOURCE
+#include <signal.h>
+#include <errno.h>
+
+#define SST_SIZE (sizeof(sigset_t) / sizeof(long))
+
+int sigandset(sigset_t *dest, sigset_t *left, sigset_t *right)
+{
+ if(!dest || !left || !right) {
+ errno = EINVAL;
+ return -1;
+ }
+ unsigned long i = 0, *d = (void*) dest, *l = (void*) left, *r = (void*) right;
+ for(; i < SST_SIZE; i++) d[i] = l[i] & r[i];
+ return 0;
+}
+
diff --git a/src/signal/sigorset.c b/src/signal/sigorset.c
new file mode 100644
index 00000000..232075b1
--- /dev/null
+++ b/src/signal/sigorset.c
@@ -0,0 +1,17 @@
+#define _GNU_SOURCE
+#include <signal.h>
+#include <errno.h>
+
+#define SST_SIZE (sizeof(sigset_t) / sizeof(long))
+
+int sigorset(sigset_t *dest, sigset_t *left, sigset_t *right)
+{
+ if(!dest || !left || !right) {
+ errno = EINVAL;
+ return -1;
+ }
+ unsigned long i = 0, *d = (void*) dest, *l = (void*) left, *r = (void*) right;
+ for(; i < SST_SIZE; i++) d[i] = l[i] | r[i];
+ return 0;
+}
+