]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/kernlib/kerngen/ccgen/irtgs/signalf.c
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / ccgen / irtgs / signalf.c
CommitLineData
fe4da5cc 1/*
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1 1996/02/15 17:49:33 mclareni
6 * Kernlib
7 *
8 */
9/*> ROUTINE SIGNALF
10 CERN PROGLIB# SIGNALF .VERSION KERNIRT 1.03 910314
11 ORIG. 12/03/91, JZ
12 FORTRAN interface routine to sigaction */
13#include <stdio.h>
14#include <signal.h>
15#include <errno.h>
16#if defined(CERNLIB_IBMRT)&&defined(CERNLIB_QXNO_SC)
17int signalf(signum,funct,flag)
18#else
19int signalf_(signum,funct,flag)
20#endif
21 long *signum, *flag;
22 long *funct;
23{
24 int sigaction();
25 int istat, signo;
26
27 struct mysig {
28 int sa_handler;
29 sigset_t sa_mask;
30 int sa_flags;
31 };
32
33 struct mysig newbuf;
34 struct mysig oldbuf;
35
36 signo = *signum;
37
38 if (*flag < 0) newbuf.sa_handler = funct;
39 else if (*flag == 0) newbuf.sa_handler = SIG_DFL;
40 else if (*flag == 1) newbuf.sa_handler = SIG_IGN;
41 else newbuf.sa_handler = *flag;
42
43 newbuf.sa_flags = 0;
44 sigemptyset(&newbuf.sa_mask);
45
46 istat = sigaction(signo,&newbuf,&oldbuf);
47 if (istat == 0) return oldbuf.sa_handler;
48 return -errno;
49}
50/*> END <----------------------------------------------------------*/