X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0cf90cca0c924622f3fee8d2a3fafa8238363dc6..b60166b327a9108b07e3069fa6568a451529ffd9:/lunaix-os/includes/lunaix/signal.h?ds=sidebyside diff --git a/lunaix-os/includes/lunaix/signal.h b/lunaix-os/includes/lunaix/signal.h index c815c4f..2623412 100644 --- a/lunaix-os/includes/lunaix/signal.h +++ b/lunaix-os/includes/lunaix/signal.h @@ -1,7 +1,7 @@ #ifndef __LUNAIX_SIGNAL_H #define __LUNAIX_SIGNAL_H -#include +#include #define _SIG_NUM 16 @@ -16,16 +16,53 @@ #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 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 */