diff options
author | Jannis Hoffmann <jannis@fehcom.de> | 2024-09-28 17:13:21 +0200 |
---|---|---|
committer | Jannis Hoffmann <jannis@fehcom.de> | 2024-09-28 17:13:21 +0200 |
commit | 4ab19268268cd96b9706625d42a16d2a629134eb (patch) | |
tree | 0894a92709675955abb1b15647e8fe2911d89c7f /src/sig.c | |
parent | 96cf8dffe4f7b0b910f790066ae622dc429eb522 (diff) |
update to version 25
Diffstat (limited to 'src/sig.c')
-rw-r--r-- | src/sig.c | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/sig.c b/src/sig.c new file mode 100644 index 0000000..e4d2bf0 --- /dev/null +++ b/src/sig.c @@ -0,0 +1,169 @@ +#include <signal.h> +#include "sig.h" + +/** + * @file sig.c + * @authors djb, jmh + * @ref qmail + * @brief signal handling functions + */ + +void sig_alarmblock() +{ + sig_block(SIGALRM); +} +void sig_alarmunblock() +{ + sig_unblock(SIGALRM); +} +void sig_alarmcatch(void (*f)(int)) +{ + sig_catch(SIGALRM,f); +} +void sig_alarmdefault() +{ + sig_catch(SIGALRM,SIG_DFL); +} + +int sig_alarm = SIGALRM; + +void sig_block(int sig) +{ + sigset_t ss; + sigemptyset(&ss); + sigaddset(&ss,sig); + sigprocmask(SIG_BLOCK,&ss,(sigset_t *)0); +} + +void sig_unblock(int sig) +{ + sigset_t ss; + sigemptyset(&ss); + sigaddset(&ss,sig); + sigprocmask(SIG_UNBLOCK,&ss,(sigset_t *)0); +} + +void sig_blocknone() +{ + sigset_t ss; + sigemptyset(&ss); + sigprocmask(SIG_SETMASK,&ss,(sigset_t *)0); +} + +void sig_catch(int sig,void (*f)(int)) +{ + struct sigaction sa; + sa.sa_handler = f; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(sig,&sa,(struct sigaction *)0); +} + +void sig_pause() +{ + sigset_t ss; + sigemptyset(&ss); + sigsuspend(&ss); +} + +void sig_pipeignore() +{ + sig_catch(SIGPIPE,SIG_IGN); +} +void sig_pipedefault() +{ + sig_catch(SIGPIPE,SIG_DFL); +} + +int sig_pipe = SIGPIPE; + +void sig_childblock() +{ + sig_block(SIGCHLD); +} +void sig_childunblock() +{ + sig_unblock(SIGCHLD); +} +void sig_childcatch(void (*f)(int)) +{ + sig_catch(SIGCHLD,f); +} +void sig_childdefault() +{ + sig_catch(SIGCHLD,SIG_DFL); +} + +int sig_child = SIGCHLD; + +void sig_hangupblock() +{ + sig_block(SIGHUP); +} +void sig_hangupunblock() +{ + sig_unblock(SIGHUP); +} +void sig_hangupcatch(void (*f)(int)) +{ + sig_catch(SIGHUP,f); +} +void sig_hangupdefault() +{ + sig_catch(SIGHUP,SIG_DFL); +} + +int sig_hangup = SIGHUP; + +void sig_termblock() +{ + sig_block(SIGTERM); +} +void sig_termunblock() +{ + sig_unblock(SIGTERM); +} +void sig_termcatch( void (*f)(int)) +{ + sig_catch(SIGTERM,f); +} +void sig_termdefault() +{ + sig_catch(SIGTERM,SIG_DFL); +} + +int sig_term = SIGTERM; + +void sig_bugcatch(void (*f)(int)) +{ + sig_catch(SIGILL,f); + sig_catch(SIGABRT,f); + sig_catch(SIGFPE,f); + sig_catch(SIGBUS,f); + sig_catch(SIGSEGV,f); +#ifdef SIGSYS + sig_catch(SIGSYS,f); +#endif +#ifdef SIGEMT + sig_catch(SIGEMT,f); +#endif +} +void (*sig_defaulthandler)(int) = SIG_DFL; + +void sig_miscignore() +{ + sig_catch(SIGVTALRM,SIG_IGN); + sig_catch(SIGPROF,SIG_IGN); + sig_catch(SIGQUIT,SIG_IGN); + sig_catch(SIGINT,SIG_IGN); + sig_catch(SIGHUP,SIG_IGN); +#ifdef SIGXCPU + sig_catch(SIGXCPU,SIG_IGN); +#endif +#ifdef SIGXFSZ + sig_catch(SIGXFSZ,SIG_IGN); +#endif +} +void (*sig_ignorehandler)() = SIG_IGN; + +int sig_cont = SIGCONT; |