/*
 * signal.h
 */

#ifndef _SIGNAL_H
#define _SIGNAL_H

#include <klibc/extern.h>
#include <string.h>		/* For memset() */
#include <limits.h>		/* For LONG_BIT */
#include <sys/types.h>
#include <linux/signal.h>

/* Some architectures don't define these */
#ifndef SA_RESETHAND
# define SA_RESETHAND SA_ONESHOT
#endif
#ifndef SA_NODEFER
# define SA_NODEFER SA_NOMASK
#endif
#ifndef NSIG
# define NSIG _NSIG
#endif

__extern const char * const sys_siglist[];

#if !defined(__x86_64__)
/* This assumes sigset_t is either an unsigned long or an array of such,
   and that _NSIG_BPW in the kernel is always LONG_BIT */

static __inline__ int sigemptyset(sigset_t *set)
{
  memset(set, 0, sizeof *set);
  return 0;
}
static __inline__ int sigfillset(sigset_t *set)
{
  memset(set, ~0, sizeof *set);
  return 0;
}
static __inline__ int sigaddset(sigset_t *set, int signum)
{
  unsigned long *lset = (unsigned long *)set;
  lset[signum/LONG_BIT] |= 1UL << (signum%LONG_BIT);
  return 0;
}
static __inline__ int sigdelset(sigset_t *set, int signum)
{
  unsigned long *lset = (unsigned long *)set;
  lset[signum/LONG_BIT] &= ~(1UL << (signum%LONG_BIT));
  return 0;
}
static __inline__ int sigismember(sigset_t *set, int signum)
{
  unsigned long *lset = (unsigned long *)set;
  return (int)((lset[signum/LONG_BIT] >> (signum%LONG_BIT)) & 1);
}

#endif

__extern __sighandler_t signal(int, __sighandler_t);
__extern int sigaction(int, const struct sigaction *, struct sigaction *);
__extern int sigprocmask(int, const sigset_t *, sigset_t *);
__extern int sigpending(sigset_t *);
__extern int sigsuspend(const sigset_t *);
__extern int rt_sigaction(int, const struct sigaction *, struct sigaction *, size_t);
__extern int rt_sigprocmask(int, const sigset_t *, sigset_t *, size_t);
__extern int rt_sigpending(sigset_t *, size_t);
__extern int rt_sigsuspend(const sigset_t *, size_t);
__extern int raise(int);
__extern int kill(pid_t, int);

#endif /* _SIGNAL_H */
