commited some changes and added README
[meinos.git] / apps / include / signal.h
blob69bedd4708dbe05648a4c28691bf1b8f34f81603
1 /*
2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef _SIGNAL_H_
20 #define _SIGNAL_H_
22 #include <sys/types.h>
23 #include <syscall.h>
24 #include <string.h>
26 #define SIG_ERR NULL
28 // Default signal handler
29 #define SIG_IGN _signal_dfl_ignore
30 #define SIG_DFL NULL
32 #define SIG_BLOCK 1
33 #define SIG_UNBLOCK 2
34 #define SIG_SETMASK 3
36 // Signals
37 #define SIGHUP 1
38 #define SIGINT 2
39 #define SIGQUIT 3
40 #define SIGILL 4
41 #define SIGTRAP 5
42 #define SIGABRT 6
43 #define SIGBUS 7
44 #define SIGFPE 8
45 #define SIGKILL 9
46 #define SIGUSR1 10
47 #define SIGSEGV 11
48 #define SIGUSR2 12
49 #define SIGPIPE 13
50 #define SIGALRM 14
51 #define SIGTERM 15
52 #define SIGSTKFLT 16
53 #define SIGCHLD 17
54 #define SIGCONT 18
55 #define SIGSTOP 19
56 #define SIGTSTP 20
57 #define SIGTTIN 21
58 #define SIGTTOU 22
59 #define SIGURG 23
60 #define SIGXCPU 24
61 #define SIGXFSZ 25
62 #define SIGVTALRM 26
63 #define SIGPROF 27
64 #define SIGWINCH 28
65 #define SIGIO 29
66 #define SIGPWR 30
67 #define SIGSYS 31
68 #define SIGRTMIN(x) (34+(x))
69 #define SIGRTMAX(x) (64-(x))
70 #define SIG_MAXNUM 64
72 typedef struct {
73 int si_signo;
74 int si_sigcode;
75 int si_errno;
76 pid_t si_pid;
77 uid_t si_uid;
78 void *si_addr;
79 int si_status;
80 long si_band;
81 } siginfo_t;
83 typedef struct {
84 char sigs[SIG_MAXNUM/sizeof(char)];
85 } sigset_t;
87 struct sigaction {
88 void (*sa_handler)(int sig);
89 sigset_t sa_mask;
90 int sa_flags;
91 void (*sa_sigaction)(int sig,siginfo_t *siginfo,void *context);
94 typedef int sig_atomic_t;
96 void (*signal(int sig,void (*handler)(int)))(int);
97 void (*sysv_signal(int sig,void (*handler)(int)))(int);
98 void _signal_dfl_ignore(int sig);
99 void _signal_handler(int sig);
100 int sigaddset(sigset_t *set,int sig);
101 int sigdelset(sigset_t *set,int sig);
102 int sigprocmask(int how,const sigset_t *set,sigset_t *oset);
104 static __inline__ int kill(pid_t pid,int sig) {
105 return syscall_call(SYSCALL_SIG_SEND,2,pid,sig);
108 static __inline__ int raise(int sig) {
109 _signal_handler(sig);
110 //kill(getpid(),sig);
111 return 0;
114 static __inline__ int sigemptyset(sigset_t *set) {
115 memset(set->sigs,0,SIG_MAXNUM/sizeof(char));
116 return 0;
119 static __inline__ int sigfillset(sigset_t *set) {
120 memset(set->sigs,1,SIG_MAXNUM/sizeof(char));
121 return 0;
124 #endif