blob: 2e621ac77a5993e89a6e487bddb31f54f232821f [file] [log] [blame]
Rich Felker0b44a032011-02-12 00:22:29 -05001#ifndef _SIGNAL_H
2#define _SIGNAL_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
Rich Felker1322cb82011-02-14 20:33:54 -05008#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
9 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
10
Rich Felker855df692011-02-20 01:48:51 -050011#ifdef _GNU_SOURCE
12#define __siginfo siginfo
13#endif
14
Rich Felker0b44a032011-02-12 00:22:29 -050015#define __NEED_size_t
16#define __NEED_pid_t
17#define __NEED_uid_t
18#define __NEED_struct_timespec
19#define __NEED_pthread_t
Rich Felker80c4dcd2011-03-29 13:01:25 -040020#define __NEED_pthread_attr_t
Rich Felker0b44a032011-02-12 00:22:29 -050021#define __NEED_time_t
22#define __NEED_clock_t
23#define __NEED_sigset_t
24#define __NEED_siginfo_t
25
26#include <bits/alltypes.h>
27
Rich Felker80c4dcd2011-03-29 13:01:25 -040028struct sigaction {
Rich Felker0b44a032011-02-12 00:22:29 -050029 union {
30 void (*sa_handler)(int);
31 void (*sa_sigaction)(int, siginfo_t *, void *);
32 } __sa_handler;
33 sigset_t sa_mask;
34 int sa_flags;
35 void (*__sa_restorer)(void);
36};
37#define sa_handler __sa_handler.sa_handler
38#define sa_sigaction __sa_handler.sa_sigaction
39
Rich Felker80c4dcd2011-03-29 13:01:25 -040040typedef struct {
Rich Felker0b44a032011-02-12 00:22:29 -050041 void *ss_sp;
42 int ss_flags;
43 size_t ss_size;
44} stack_t;
45
Rich Felker80c4dcd2011-03-29 13:01:25 -040046union sigval {
Rich Felker0b44a032011-02-12 00:22:29 -050047 int sival_int;
48 void *sival_ptr;
49};
50
Rich Felker80c4dcd2011-03-29 13:01:25 -040051struct sigevent {
52 union sigval sigev_value;
53 int sigev_signo;
54 int sigev_notify;
55 void (*sigev_notify_function)(union sigval);
56 pthread_attr_t *sigev_notify_attributes;
57};
58
59#define SIGEV_SIGNAL 0
60#define SIGEV_NONE 1
61#define SIGEV_THREAD 2
62
Rich Felker0b44a032011-02-12 00:22:29 -050063int __libc_current_sigrtmin(void);
64int __libc_current_sigrtmax(void);
65
66#define SIGRTMIN (__libc_current_sigrtmin())
67#define SIGRTMAX (__libc_current_sigrtmax())
68
Rich Felker0b44a032011-02-12 00:22:29 -050069int kill(pid_t, int);
Rich Felker0b44a032011-02-12 00:22:29 -050070
71int sigemptyset(sigset_t *);
72int sigfillset(sigset_t *);
73int sigaddset(sigset_t *, int);
74int sigdelset(sigset_t *, int);
75int sigismember(const sigset_t *, int);
76
77int sigprocmask(int, const sigset_t *, sigset_t *);
78int sigsuspend(const sigset_t *);
79int sigaction(int, const struct sigaction *, struct sigaction *);
80int sigpending(sigset_t *);
81int sigwait(const sigset_t *, int *);
82int sigwaitinfo(const sigset_t *, siginfo_t *);
83int sigtimedwait(const sigset_t *, siginfo_t *, const struct timespec *);
84int sigqueue(pid_t, int, const union sigval);
85
Rich Felker0b44a032011-02-12 00:22:29 -050086int pthread_sigmask(int, const sigset_t *, sigset_t *);
87int pthread_kill(pthread_t, int);
88
Rich Felker1322cb82011-02-14 20:33:54 -050089#endif
90
91#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
92int killpg(pid_t, int);
93int sigaltstack(const stack_t *, stack_t *);
94int sighold(int);
95int sigignore(int);
96int siginterrupt(int, int);
97int sigpause(int);
98int sigrelse(int);
99void (*sigset(int, void (*)(int)))(int);
100#endif
101
Rich Felker0b44a032011-02-12 00:22:29 -0500102#ifdef _GNU_SOURCE
Rich Felker0f5b4352011-04-13 08:45:28 -0400103typedef void (*sighandler_t)(int);
Rich Felker1322cb82011-02-14 20:33:54 -0500104void (*bsd_signal(int, void (*)(int)))(int);
Rich Felker0b44a032011-02-12 00:22:29 -0500105#endif
106
Rich Felker3eb9fea2011-02-15 15:10:00 -0500107#include <bits/signal.h>
108
Rich Felker1322cb82011-02-14 20:33:54 -0500109typedef int sig_atomic_t;
110
111void (*signal(int, void (*)(int)))(int);
112int raise(int);
113
Rich Felker0b44a032011-02-12 00:22:29 -0500114#ifdef __cplusplus
115}
116#endif
117
118#endif