renamed and cleaned up export header files to match linux convention
[lunaix-os.git] / lunaix-os / usr / libc / src / posix / signal.c
1 #include <syscall.h>
2 #include <lunaix/signal.h>
3 #include <sys/types.h>
4
5 int
6 sigpending(sigset_t *set)
7 {
8     return do_lunaix_syscall(__NR__lxsys_sigpending, set);
9 }
10
11 int
12 sigsuspend(const sigset_t *mask)
13 {
14     return do_lunaix_syscall(__NR__lxsys_sigsuspend, mask);
15 }
16
17 int
18 sigprocmask(int how, const sigset_t *set, sigset_t *oldset)
19 {
20     return do_lunaix_syscall(__NR__lxsys_sigprocmask, how, set, oldset);
21 }
22
23 int
24 sys_sigaction(int signum, struct sigaction* action)
25 {
26     return do_lunaix_syscall(__NR__lxsys_sys_sigaction, signum, action);
27 }
28
29 int
30 kill(pid_t pid, int signum)
31 {
32     return do_lunaix_syscall(__NR__lxsys_kill, pid, signum);
33 }
34
35 extern void
36 sigtrampoline();
37
38 extern pid_t
39 getpid();
40
41 sighandler_t
42 signal(int signum, sighandler_t handler)
43 {
44     struct sigaction sa = { .sa_handler = (void*)handler,
45                             .sa_mask = (sigset_t)-1,
46                             .sa_sigaction = (void*)sigtrampoline };
47
48     sys_sigaction(signum, &sa);
49
50     return handler;
51 }
52
53 int
54 raise(int signum)
55 {
56     return kill(getpid(), signum);
57 }
58
59 int
60 sigaction(int signum, struct sigaction* action)
61 {
62     return sys_sigaction(signum, action);
63 }
64
65 struct siguctx
66 {
67     void* sigact;
68     void (*sa_handler)(int);
69     unsigned char saved_frame[0];
70 };
71
72 void
73 sig_dohandling(int signum, void* siginfo, void* sigctx)
74 {
75     struct siguctx* uctx = (struct siguctx*)sigctx;
76     uctx->sa_handler(signum);
77 }