#include <sys/signal.h>

#ifndef SIGCLD
#define SIGCLD         SIGCHLD
#endif

/* #define     __sigmask                               sigmask */

/*
#define        __SIGFILLSET            0xffffffff
#define        __SIGEMPTYSET           0
#define        __SIGADDSET(s,n)        ((*s) |= (__sigmask(n)))
#define        __SIGDELSET(s,n)        ((*s) &= ~(__sigmask(n))) 
#define        __SIGISMEMBER(s,n)      ((*s) & (__sigmask(n))) 
*/

static const sigset_t __SIGFILLSET = {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff};

static const sigset_t __SIGEMPTYSET = { 0, 0, 0, 0, 0, 0, 0, 0 };

static inline void __SIGADDSET(sigset_t *set, int signo) {
  int word = (signo - 1) / 32;
  int bit = (signo - 1) % 32;
  set->sigset[word] |= 1 << bit;
}

static inline void __SIGDELSET(sigset_t *set, int signo) {
  int word = (signo - 1) / 32;
  int bit = (signo - 1) % 32;
  set->sigset[word] &= ~(1 << bit);
}

static inline int __SIGISMEMBER(sigset_t *set, int signo) {
  int word = (signo - 1) / 32;
  int bit = (signo - 1) % 32;
  return set->sigset[word] & (1 << bit);
}

#define SIGSET_SIZE sizeof(sigset_t)/sizeof(long)

#define SIG_ANY(sig) sig_any(&sig)

static inline int sig_any(sigset_t *sig) {
  int i;
  for (i=0; i < SIGSET_SIZE; i++)
    if (sig->sigset[i] != 0)
      return 1;
  return 0;
}

