Logo Search packages:      
Sourcecode: rserve version File versions  Download package

psignal.h

/*****************************************************************************
 *                                                                           *
 * 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 <stdlib.h>
#include <errno.h>
#include <setjmp.h>

#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);
#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 ***********************************************************/
unsigned long sigsetmask(unsigned long signal_Block_MaskNew);
unsigned long sigblock(unsigned long 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_ */

Generated by  Doxygen 1.6.0   Back to index