summaryrefslogtreecommitdiff
path: root/src/sig.c
diff options
context:
space:
mode:
authorJannis Hoffmann <jannis@fehcom.de>2024-07-09 13:58:20 +0200
committerJannis Hoffmann <jannis@fehcom.de>2024-07-09 13:58:20 +0200
commit249866e3d1e11dc72eaa1305f4bb479ded92ef38 (patch)
tree7118c5f58e29fe61c100e4d067bb90ba8d52589e /src/sig.c
parent96cf8dffe4f7b0b910f790066ae622dc429eb522 (diff)
reorganized file structure
Moved c files into src/. Corrected VERSION file. Removed BUILD and FILES.
Diffstat (limited to 'src/sig.c')
-rw-r--r--src/sig.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/sig.c b/src/sig.c
new file mode 100644
index 0000000..0963948
--- /dev/null
+++ b/src/sig.c
@@ -0,0 +1,110 @@
+#include <signal.h>
+#include "sig.h"
+
+/**
+ @file sig.c
+ @author djb
+ @source qmail
+ @brief signal handling functions
+*/
+
+void sig_alarmblock() { sig_block(SIGALRM); }
+void sig_alarmunblock() { sig_unblock(SIGALRM); }
+void sig_alarmcatch(f) void (*f)(); { 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)())
+{
+ 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(f) void (*f)(); { 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(f) void (*f)(); { 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(f) void (*f)(); { sig_catch(SIGTERM,f); }
+void sig_termdefault() { sig_catch(SIGTERM,SIG_DFL); }
+int sig_term = SIGTERM;
+
+void sig_bugcatch(void (*f)())
+{
+ 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)() = 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;