Support to multi-threading and pthread interface (POSIX.1-2008) (#23)
[lunaix-os.git] / lunaix-os / includes / lunaix / signal.h
index c815c4f7cdf694332c77ba849cc5bc79facc5afa..262341266d3d81d766c7763d6490af1e2cf2f899 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __LUNAIX_SIGNAL_H
 #define __LUNAIX_SIGNAL_H
 
 #ifndef __LUNAIX_SIGNAL_H
 #define __LUNAIX_SIGNAL_H
 
-#include <signal_defs.h>
+#include <usr/lunaix/signal_defs.h>
 
 #define _SIG_NUM 16
 
 
 #define _SIG_NUM 16
 
 #define _SIGSTOP SIGSTOP
 #define _SIGCONT SIGCONT
 #define _SIGTERM SIGTERM
 #define _SIGSTOP SIGSTOP
 #define _SIGCONT SIGCONT
 #define _SIGTERM SIGTERM
-
-#define __SIGNAL(num) (1 << (num))
-#define __SIGSET(bitmap, num) (bitmap = bitmap | __SIGNAL(num))
-#define __SIGTEST(bitmap, num) (bitmap & __SIGNAL(num))
-#define __SIGCLEAR(bitmap, num) ((bitmap) = (bitmap) & ~__SIGNAL(num))
-
-#define _SIGNAL_UNMASKABLE (__SIGNAL(_SIGKILL) | __SIGNAL(_SIGSTOP))
-
 #define _SIG_BLOCK SIG_BLOCK
 #define _SIG_UNBLOCK SIG_UNBLOCK
 #define _SIG_SETMASK SIG_SETMASK
 
 #define _SIG_BLOCK SIG_BLOCK
 #define _SIG_UNBLOCK SIG_UNBLOCK
 #define _SIG_SETMASK SIG_SETMASK
 
+#define sigset(num) (1 << (num))
+#define sigset_add(set, num) (set = set | sigset(num))
+#define sigset_test(set, num) (set & sigset(num))
+#define sigset_clear(set, num) ((set) = (set) & ~sigset(num))
+#define sigset_union(set, set2) ((set) = (set) | (set2))
+#define sigset_intersect(set, set2) ((set) = (set) & (set2))
+
+struct sigact
+{
+    sigset_t sa_mask;
+    void* sa_actor;
+    void* sa_handler;
+    pid_t sender;
+};
+
+struct sigregister {
+    struct sigact* signals[_SIG_NUM];
+};
+
+struct sigctx
+{
+    sigset_t sig_pending;
+    sigset_t sig_mask;
+    signum_t sig_active;
+    signum_t sig_order[_SIG_NUM];
+};
+
+int
+signal_send(pid_t pid, signum_t signum);
+
+void
+signal_dup_context(struct sigctx* dest_ctx);
+
+void
+signal_dup_registers(struct sigregister* dest_reg);
+
+void
+signal_reset_context(struct sigctx* sigctx);
+
+void
+signal_reset_register(struct sigregister* sigreg);
+
+void
+signal_free_registers(struct sigregister* sigreg);
+
 #endif /* __LUNAIX_SIGNAL_H */
 #endif /* __LUNAIX_SIGNAL_H */