defining data structures for validation
[oweals/gnunet.git] / src / include / gnunet_signal_lib.h
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14     
15      You should have received a copy of the GNU Affero General Public License
16      along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18      SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21 /**
22  * @author Christian Grothoff
23  *
24  * @file
25  * Functions related to signals
26  *
27  * @defgroup signal  Signal library
28  * Manage signal handlers.
29  * @{
30  */
31
32 #ifndef GNUNET_SIGNAL_LIB_H
33 #define GNUNET_SIGNAL_LIB_H
34
35 #ifdef __cplusplus
36 extern "C"
37 {
38 #if 0                           /* keep Emacsens' auto-indent happy */
39 }
40 #endif
41 #endif
42
43 /**
44  * Context created when a signal handler is installed;
45  * can be used to restore it to the previous state later.
46  */
47 struct GNUNET_SIGNAL_Context;
48
49
50 /**
51  * A signal handler.  Since different OSes have different signatures
52  * for their handlers, the API only gives the most restrictive
53  * signature -- no arguments, no return value.  Note that this will
54  * work even if the OS expects a function with arguments.  However,
55  * the implementation must guarantee that this handler is not called
56  * for signals other than the one that it has been registered for.
57  */
58 typedef void
59 (*GNUNET_SIGNAL_Handler) (void);
60
61
62 /**
63  * Install a signal handler that will be run if the
64  * given signal is received.
65  *
66  * @param signal the number of the signal
67  * @param handler the function to call
68  * @return context that can be used to restore, NULL on error
69  */
70 struct GNUNET_SIGNAL_Context *
71 GNUNET_SIGNAL_handler_install (int signal,
72                                GNUNET_SIGNAL_Handler handler);
73
74
75 /**
76  * Uninstall a previously installed signal hander.
77  *
78  * @param ctx context that was returned when the
79  *            signal handler was installed
80  */
81 void
82 GNUNET_SIGNAL_handler_uninstall (struct GNUNET_SIGNAL_Context *ctx);
83
84
85 /**
86  * Raise the given signal by calling the installed signal handlers.  This will
87  * not use the @em raise() system call but only calls the handlers registered
88  * through GNUNET_SIGNAL_handler_install().
89  *
90  * @param sig the signal to raise
91  */
92 void
93 GNUNET_SIGNAL_raise (const int sig);
94
95
96 #if 0                           /* keep Emacsens' auto-indent happy */
97 {
98 #endif
99 #ifdef __cplusplus
100 }
101 #endif
102
103 /* ifndef GNUNET_SIGNAL_LIB_H */
104 #endif
105
106 /** @} */  /* end of group */
107
108 /* end of gnunet_signal_lib.h */