Git init
[pkgs/e/elektra.git] / src / backends / daemon / sig.c
1 /***************************************************************************
2                    sig.c  - Handle signals
3                              -------------------
4     copyright            : (C) 2006 by Yannick Lecaillez
5     email                : sizon5@gmail.com
6  ***************************************************************************/
7
8 /***************************************************************************
9  *                                                                         *
10  *   This program is free software; you can redistribute it and/or modify  *
11  *   it under the terms of the BSD License (revised).                      *
12  *                                                                         *
13  ***************************************************************************/
14
15
16 /* Subversion stuff
17
18 $Id$
19
20 */
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include <signal.h>
26 #include "sig.h"
27
28 int sig_alarm = SIGALRM;
29 int sig_child = SIGCHLD;
30 int sig_cont = SIGCONT;
31 int sig_hangup = SIGHUP;
32 int sig_int = SIGINT;
33 int sig_pipe = SIGPIPE;
34 int sig_term = SIGTERM;
35
36 void (*sig_defaulthandler)() = SIG_DFL;
37 void (*sig_ignorehandler)() = SIG_IGN;
38
39 void sig_block(int sig)
40 {
41 /*#ifdef HAVE_SIGPROCMASK*/
42 #ifdef HASSIGPROCMASK
43         sigset_t ss;
44         sigemptyset(&ss);
45         sigaddset(&ss,sig);
46         sigprocmask(SIG_BLOCK,&ss,(sigset_t *) 0);
47 #else
48         sigblock(1 << (sig - 1));
49 #endif
50 }
51
52 void sig_unblock(int sig)
53 {
54 /*#ifdef HAVE_SIGPROCMASK*/
55 #ifdef HASSIGPROCMASK
56         sigset_t ss;
57         sigemptyset(&ss);
58         sigaddset(&ss,sig);
59         sigprocmask(SIG_UNBLOCK,&ss,(sigset_t *) 0);
60 #else
61         sigsetmask(sigsetmask(~0) & ~(1 << (sig - 1)));
62 #endif
63 }
64
65 void sig_blocknone(void)
66 {
67 /*#ifdef HAVE_SIGPROCMASK*/
68 #ifdef HASSIGPROCMASK
69         sigset_t ss;
70         sigemptyset(&ss);
71         sigprocmask(SIG_SETMASK,&ss,(sigset_t *) 0);
72 #else
73         sigsetmask(0);
74 #endif
75 }
76
77 void sig_catch(int sig,void (*f)())
78 {
79 /*#ifdef HAVE_SIGACTION*/
80 #ifdef HASSIGACTION
81         struct sigaction sa;
82         sa.sa_handler = f;
83         sa.sa_flags = 0;
84         sigemptyset(&sa.sa_mask);
85         sigaction(sig,&sa,(struct sigaction *) 0);
86 #else
87         signal(sig,f); /* won't work under System V, even nowadays---dorks */
88 #endif
89 }
90
91 void sig_pause(void)
92 {
93 /*#ifdef HAVE_SIGPROCMASK*/
94 #ifdef HASSIGPROCMASK
95         sigset_t ss;
96         sigemptyset(&ss);
97         sigsuspend(&ss);
98 #else
99         sigpause(0);
100 #endif
101 }
102