Home | History | Annotate | Download | only in bits
      1 /* The proper definitions for Linux's sigaction.
      2    Copyright (C) 1993-1999, 2000, 2010 Free Software Foundation, Inc.
      3    This file is part of the GNU C Library.
      4 
      5    The GNU C Library is free software; you can redistribute it and/or
      6    modify it under the terms of the GNU Lesser General Public
      7    License as published by the Free Software Foundation; either
      8    version 2.1 of the License, or (at your option) any later version.
      9 
     10    The GNU C Library is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Lesser General Public License for more details.
     14 
     15    You should have received a copy of the GNU Lesser General Public
     16    License along with the GNU C Library; if not, write to the Free
     17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     18    02111-1307 USA.  */
     19 
     20 #ifndef _SIGNAL_H
     21 # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
     22 #endif
     23 
     24 /* Structure describing the action to be taken when a signal arrives.  */
     25 struct sigaction
     26   {
     27     /* Signal handler.  */
     28 #ifdef __USE_POSIX199309
     29     union
     30       {
     31 	/* Used if SA_SIGINFO is not set.  */
     32 	__sighandler_t sa_handler;
     33 	/* Used if SA_SIGINFO is set.  */
     34 	void (*sa_sigaction) (int, siginfo_t *, void *);
     35       }
     36     __sigaction_handler;
     37 # define sa_handler	__sigaction_handler.sa_handler
     38 # define sa_sigaction	__sigaction_handler.sa_sigaction
     39 #else
     40     __sighandler_t sa_handler;
     41 #endif
     42 
     43     /* Additional set of signals to be blocked.  */
     44     __sigset_t sa_mask;
     45 
     46     /* Special flags.  */
     47     int sa_flags;
     48 
     49     /* Restore handler.  */
     50     void (*sa_restorer) (void);
     51   };
     52 
     53 /* Bits in `sa_flags'.  */
     54 #define	SA_NOCLDSTOP  1		 /* Don't send SIGCHLD when children stop.  */
     55 #define SA_NOCLDWAIT  2		 /* Don't create zombie on child death.  */
     56 #define SA_SIGINFO    4		 /* Invoke signal-catching function with
     57 				    three arguments instead of one.  */
     58 #if defined __USE_UNIX98 || defined __USE_MISC
     59 # define SA_ONSTACK   0x08000000 /* Use signal stack by using `sa_restorer'. */
     60 #endif
     61 #if defined __USE_UNIX98 || defined __USE_MISC || defined __USE_XOPEN2K8
     62 # define SA_RESTART   0x10000000 /* Restart syscall on signal return.  */
     63 # define SA_NODEFER   0x40000000 /* Don't automatically block the signal when
     64 				    its handler is being executed.  */
     65 # define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler.  */
     66 #endif
     67 #ifdef __USE_MISC
     68 # define SA_INTERRUPT 0x20000000 /* Historical no-op.  */
     69 
     70 /* Some aliases for the SA_ constants.  */
     71 # define SA_NOMASK    SA_NODEFER
     72 # define SA_ONESHOT   SA_RESETHAND
     73 # define SA_STACK     SA_ONSTACK
     74 #endif
     75 
     76 /* Values for the HOW argument to `sigprocmask'.  */
     77 #define	SIG_BLOCK     0		 /* Block signals.  */
     78 #define	SIG_UNBLOCK   1		 /* Unblock signals.  */
     79 #define	SIG_SETMASK   2		 /* Set the set of blocked signals.  */
     80