X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fsignal.c;h=c3bb718bfb5a274279eb6a1ae257163e573b5fc5;hb=a5750919060a5ca7a6367e1d95a68a852a555056;hp=0fe4bfc96e6a1cac3ea8f505b0072090ec4c4138;hpb=bc83770144cc547a917fc27f0f572859ae203fce;p=oweals%2Fgnunet.git diff --git a/src/util/signal.c b/src/util/signal.c index 0fe4bfc96..c3bb718bf 100644 --- a/src/util/signal.c +++ b/src/util/signal.c @@ -28,6 +28,9 @@ #include "gnunet_common.h" #include "gnunet_signal_lib.h" +#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) + + struct GNUNET_SIGNAL_Context { int sig; @@ -47,6 +50,7 @@ struct GNUNET_SIGNAL_Context * GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler) { struct GNUNET_SIGNAL_Context *ret; + #ifndef MINGW struct sigaction sig; #endif @@ -55,6 +59,7 @@ GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler) ret->sig = signum; ret->method = handler; #ifndef MINGW + memset (&sig, 0, sizeof (sig)); sig.sa_handler = (void *) handler; sigemptyset (&sig.sa_mask); #ifdef SA_INTERRUPT @@ -67,16 +72,15 @@ GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler) if (signum == GNUNET_SIGCHLD) w32_sigchld_handler = handler; else + { + __p_sig_fn_t sigret = signal (signum, (__p_sig_fn_t) handler); + + if (sigret == SIG_ERR) { - __p_sig_fn_t sigret = signal (signum, (__p_sig_fn_t) handler); - if (sigret == SIG_ERR) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _ - ("signal (%d, %p) returned %d.\n"), - signum, handler, sigret); - } + LOG (GNUNET_ERROR_TYPE_WARNING, _("signal (%d, %p) returned %d.\n"), + signum, handler, sigret); } + } #endif return ret; }