Explorar o código

add sigandset and sigorset (needed for qemu)

rofl0r %!s(int64=12) %!d(string=hai) anos
pai
achega
a1990e1e83
Modificáronse 3 ficheiros con 37 adicións e 0 borrados
  1. 3 0
      include/signal.h
  2. 17 0
      src/signal/sigandset.c
  3. 17 0
      src/signal/sigorset.c

+ 3 - 0
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

+ 17 - 0
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;
+}
+

+ 17 - 0
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;
+}
+