/***************************************************************************** * * * signal.h * * * * Freely redistributable and modifiable. Use at your own risk. * * * * Copyright 1994-1999 The Downhill Project * * http://www.ede.com/free/u2nt * * * *****************************************************************************/ /* Original version taken at Changes (g.m.): 10.06.1999: Made self contained - Changed some names 11.06.1999: Added 'sigsetjmp' and 'siglongjmp' 12.06.1999: Added pause and sigsuspend (require a version (also a non POSIX one) of sleep; if your system don't have it define DONT_HAVE_SLEEP) 27/06/1999: (BDR) convert sigsetjmp and siglongjmp macros to (,,) 12/07/1999: (BDR) fix sigsetjmp macro to set saved_mask */ #ifndef _PSIGNAL_H_ #define _PSIGNAL_H_ #include #include #include #define SIGHUP 1 /* hangup */ #define SIGINT 2 /* interrupt */ #define SIGQUIT 3 /* quit */ #define SIGILL 4 /* illegal instruction (not reset when caught) */ #define SIGTRAP 5 /* trace trap (not reset when caught) */ #define SIGEMT 7 /* EMT instruction */ #define SIGFPE 8 /* floating point exception */ #define SIGKILL 9 /* kill (cannot be caught or ignored) */ #define SIGBUS 10 /* bus error */ #define SIGSEGV 11 /* segmentation violation */ #define SIGSYS 12 /* bad argument to system call */ #define SIGPIPE 13 /* write on a pipe with no one to read it */ #define SIGALRM 14 /* alarm clock */ #define SIGTERM 15 /* software termination signal from kill */ #define SIGURG 16 /* urgent condition on IO channel */ #define SIGSTOP 17 /* sendable stop signal not from tty */ #define SIGTSTP 18 /* stop signal from tty */ #define SIGCONT 19 /* continue a stopped process */ #define SIGCHLD 20 /* to parent on child stop or exit */ #define SIGCLD 20 /* System V name for SIGCHLD */ #define SIGBREAK 21 /* to readers pgrp upon background tty read */ #define SIGABRT 22 /* used by abort */ #define SIGIO 23 /* input/output possible signal */ #define SIGPOLL SIGIO /* System V name for SIGIO */ #define SIGXCPU 24 /* exceeded CPU time limit */ #define SIGXFSZ 25 /* exceeded file size limit */ #define SIGVTALRM 26 /* virtual time alarm */ #define SIGPROF 27 /* profiling time alarm */ #define SIGWINCH 28 /* window changed */ #define SIGLOST 29 /* resource lost (eg, record-lock lost) */ #define SIGUSR1 30 /* user defined signal 1 */ #define SIGUSR2 31 /* user defined signal 2 */ #define NSIG 32 /* signal 0 implied */ #ifndef RC_INVOKED /* * A pointer to a signal handler function. A signal handler takes a * single int, which is the signal it handles. */ typedef void (*sighandler_t)(int nSig); /* mingw-w64's sys/types.h also defines this and we want this defn */ #ifndef _SIGSET_T_ #define _SIGSET_T_ typedef int sigset_t; #endif /* Not _SIGSET_T_ */ /* * These are special values of signal handler pointers which are * used to send a signal to the default handler (SIG_DFL), ignore * the signal (SIG_IGN), or indicate an error return (SIG_ERR). */ #define SIG_DFL ((sighandler_t) 0) #define SIG_IGN ((sighandler_t) 1) #define SIG_ERR ((sighandler_t) -1) #ifdef __cplusplus extern "C" { #endif /* Signal mask actions ===================================================== */ #define SIG_BLOCK 0 #define SIG_UNBLOCK 1 #define SIG_SETMASK 2 /* Signal flag actions ===================================================== */ #define SA_NOCLDSTOP 1 #define SA_RESETHAND 2 /* Struct stuff **************************************************************/struct sigaction { void (*sa_handler)(int); sigset_t sa_mask; int sa_flags; }; typedef struct { jmp_buf jmpbuf; /* Calling environment. */ int mask_was_saved; /* Saved the signal mask? */ sigset_t saved_mask; /* Saved signal mask. */ } sigjmp_buf[1]; /* Prototype stuff ***********************************************************/ int sigsetmask(int signal_Block_MaskNew); int sigblock(int signal_Block_MaskNew); int sighold(int signal_Number); int sigrelse(int signal_Number); int sigaction(int signal_Number,struct sigaction* sigaction_Info, struct sigaction* signaction_InfoOld); int sigaddset(sigset_t* sigset_Info,int signal_Number); int sigdelset(sigset_t* sigset_Info,int signal_Number); int sigemptyset(sigset_t* sigset_Info); int sigfillset(sigset_t* sigset_Info); int sigismember(sigset_t* sigset_Info,int signal_Number); int sigpending(sigset_t* sigset_Info); int sigprocmask(int mask_Function,sigset_t* sigset_Info, sigset_t* sigset_InfoOld); sighandler_t signal(int signal_Number, sighandler_t); void raise(int); int pause(void); int sigsuspend(sigset_t* sigset_Info); /* Re-mapped functions ===================================================== */ #define sigmask(signal_Index) (1<<(signal_Index-1)) /* This must be a macro, since we want setjmp working in the calling environment */ /* #define sigsetjmp(jb, sm) (\ sm?sigprocmask(SIG_SETMASK,NULL,&jb->saved_mask):0,\ jb->mask_was_saved=sm,\ setjmp(jb->jmpbuf)) we only currently use the case sm=0, so avoid compiler warnings by */ #define sigsetjmp(jb, sm) (jb->mask_was_saved=0, setjmp(jb->jmpbuf)) /* We can transform this in a function but ... */ #define siglongjmp(jb, val) (((jb->mask_was_saved)?\ sigprocmask(SIG_SETMASK, &jb->saved_mask, 0):0),\ longjmp(jb->jmpbuf, val)) #ifdef __cplusplus } #endif #endif /* Not RC_INVOKED */ #endif /* Not _PSIGNAL_H_ */