1 /*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #if defined(LIBC_SCCS) && !defined(lint)
9 static char sccsid[] = "@(#)siginterrupt.c 8.1 (Berkeley) 06/04/93";
10 #endif /* LIBC_SCCS and not lint */
11
12 #include <signal.h>
13
14 /*
15 * Set signal state to prevent restart of system calls
16 * after an instance of the indicated signal.
17 */
siginterrupt(sig,flag)18 siginterrupt(sig, flag)
19 int sig, flag;
20 {
21 extern sigset_t _sigintr;
22 struct sigaction sa;
23 int ret;
24
25 if ((ret = sigaction(sig, (struct sigaction *)0, &sa)) < 0)
26 return (ret);
27 if (flag) {
28 sigaddset(&_sigintr, sig);
29 sa.sa_flags &= ~SA_RESTART;
30 } else {
31 sigdelset(&_sigintr, sig);
32 sa.sa_flags |= SA_RESTART;
33 }
34 return (sigaction(sig, &sa, (struct sigaction *)0));
35 }
36