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 */ 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