]>
Commit | Line | Data |
---|---|---|
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) | |
17 | int signalf(signum,funct,flag) | |
18 | #else | |
19 | int 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 <----------------------------------------------------------*/ |