src/spbot/signals.c
branchnew-lib-errors
changeset 218 5229a5d098b2
parent 217 7728d6ec3abf
equal deleted inserted replaced
217:7728d6ec3abf 218:5229a5d098b2
     1 
     1 
     2 #include "signals.h"
     2 #include "signals.h"
     3 #include "log.h"
     3 #include <lib/log.h>
     4 
     4 
     5 #define _GNU_SOURCE
     5 #define _GNU_SOURCE
     6 
     6 
     7 #include <string.h>
     7 #include <string.h>
     8 #include <signal.h>
     8 #include <signal.h>
    25 };
    25 };
    26 
    26 
    27 void signals_loopexit (int signal, short event, void *arg) 
    27 void signals_loopexit (int signal, short event, void *arg) 
    28 {
    28 {
    29     struct signals *signals = arg;
    29     struct signals *signals = arg;
    30 
    30     
       
    31     (void) signal;
    31     (void) event;
    32     (void) event;
    32 
    33 
    33     log_info("caught %s: exiting", /* strsignal(signal) */ "xxx");
    34     log_info("caught %s: exiting", /* strsignal(signal) */ "xxx");
    34     
    35     
    35     if (event_base_loopexit(signals->ev_base, NULL))
    36     if (event_base_loopexit(signals->ev_base, NULL))
    46     (void) signals;
    47     (void) signals;
    47     
    48     
    48     /* ignore */
    49     /* ignore */
    49 }
    50 }
    50 
    51 
    51 err_t signals_create (struct signals **signals_ptr, struct event_base *ev_base)
    52 err_t signals_create (struct signals **signals_ptr, struct event_base *ev_base, error_t *err)
    52 {
    53 {
    53     struct signals *signals;
    54     struct signals *signals;
    54 
    55 
    55     if ((signals = calloc(1, sizeof(*signals))) == NULL)
    56     if ((signals = calloc(1, sizeof(*signals))) == NULL)
    56         return ERR_CALLOC;
    57         return SET_ERROR(err, &general_errors, ERR_MEM);
    57     
    58     
    58     // simple attributes
    59     // simple attributes
    59     signals->ev_base = ev_base;
    60     signals->ev_base = ev_base;
    60 
    61 
    61     // done
    62     // done
    81 
    82 
    82     // ok
    83     // ok
    83     return SUCCESS;
    84     return SUCCESS;
    84 }
    85 }
    85 
    86 
    86 err_t signal_ignore (int signum, struct error_info *err)
    87 err_t signal_ignore (int signum, error_t *err)
    87 {
    88 {
    88     struct sigaction act = {
    89     struct sigaction act = {
    89         .sa_handler     = SIG_IGN,
    90         .sa_handler     = SIG_IGN,
    90     };
    91     };
    91     
    92     
    92     // signall the handler
    93     // signall the handler
    93     if (sigaction(signum, &act, NULL))
    94     if (sigaction(signum, &act, NULL))
    94         RETURN_SET_ERROR_ERRNO(err, ERR_SIGACTION);
    95         return SET_ERROR_ERRNO(err, &libc_errors, ERR_SIGACTION);
    95 
    96 
    96     // ok
    97     // ok
    97     return SUCCESS;
    98     return SUCCESS;
    98 }
    99 }
    99 
   100 
   100 struct signals *signals_default (struct event_base *ev_base) 
   101 struct signals *signals_default (struct event_base *ev_base) 
   101 {
   102 {
   102     struct signals *signals = NULL;
   103     struct signals *signals = NULL;
   103     struct error_info err;
   104     error_t err;
   104     
   105     
   105     // alloc signals
   106     // alloc signals
   106     if (signals_create(&signals, ev_base))
   107     if (signals_create(&signals, ev_base, &err))
   107         return NULL;
   108         return NULL;
   108     
   109     
   109     // add the set of default signals
   110     // add the set of default signals
   110     if (signal_ignore(SIGPIPE, &err))
   111     if (signal_ignore(SIGPIPE, &err))
   111         log_error(&err, "signal_ignore(SIGPIPE)");
   112         log_error(&err, "signal_ignore(SIGPIPE)");