/* bits/signal.h: Signal-related definitions. */

#ifndef _BITS_SIGNAL_H
#define _BITS_SIGNAL_H

typedef void (*__simple_sighandler_t)(int);

#define SIG_IGN (__simple_sighandler_t)(-1)
#define SIG_DFL (__simple_sighandler_t)(-2)

typedef int sigset_t;

struct sigaction
{
    __simple_sighandler_t sa_handler;
    sigset_t sa_mask;
    int sa_flags;
#ifdef __cplusplus
    void* __sa_sigreturn = nullptr;
#else
    void* __sa_sigreturn;
#endif
};

// Constants for sigaction's sa_flags field.
#define SA_NODEFER (1 << 0)
#define SA_RESETHAND (1 << 1)

// Constants for the 'how' parameter in sigprocmask().
#define SIG_BLOCK 0
#define SIG_UNBLOCK 1
#define SIG_SETMASK 2

// The signals with explicit numbers have portable signal numbers.
enum __signals
{
    SIGHUP = 1,
    SIGINT = 2,
    SIGQUIT = 3,
    SIGILL = 4,
    SIGTRAP = 5,
    SIGABRT = 6,
    SIGCHLD,
    SIGFPE = 8,
    SIGKILL = 9,
    SIGSTOP,
    SIGSEGV = 11,
    SIGCONT,
    SIGPIPE = 13,
    SIGALRM = 14,
    SIGTERM = 15,
    SIGTTIN,
    SIGTTOU,
    SIGWINCH,
    // FIXME: Add the remaining signals.
    __NSIG,
};

#define NSIG (__NSIG - 1)

#endif