123f5926cSmckusick /*
2*bac379f5Sbostic * Copyright (c) 1989, 1993
3*bac379f5Sbostic * The Regents of the University of California. All rights reserved.
48eebfffeSbostic *
532d8cbb4Sbostic * %sccs.include.redist.c%
623f5926cSmckusick */
723f5926cSmckusick
822d52fbaSdonn #if defined(LIBC_SCCS) && !defined(lint)
9*bac379f5Sbostic static char sccsid[] = "@(#)siginterrupt.c 8.1 (Berkeley) 06/04/93";
108eebfffeSbostic #endif /* LIBC_SCCS and not lint */
113cb8d038Smckusick
123cb8d038Smckusick #include <signal.h>
133cb8d038Smckusick
143cb8d038Smckusick /*
153cb8d038Smckusick * Set signal state to prevent restart of system calls
163cb8d038Smckusick * after an instance of the indicated signal.
173cb8d038Smckusick */
siginterrupt(sig,flag)183cb8d038Smckusick siginterrupt(sig, flag)
193cb8d038Smckusick int sig, flag;
203cb8d038Smckusick {
2146158b3aSkarels extern sigset_t _sigintr;
2246158b3aSkarels struct sigaction sa;
233cb8d038Smckusick int ret;
243cb8d038Smckusick
2546158b3aSkarels if ((ret = sigaction(sig, (struct sigaction *)0, &sa)) < 0)
263cb8d038Smckusick return (ret);
2746158b3aSkarels if (flag) {
2846158b3aSkarels sigaddset(&_sigintr, sig);
2946158b3aSkarels sa.sa_flags &= ~SA_RESTART;
3046158b3aSkarels } else {
3146158b3aSkarels sigdelset(&_sigintr, sig);
3246158b3aSkarels sa.sa_flags |= SA_RESTART;
3346158b3aSkarels }
3446158b3aSkarels return (sigaction(sig, &sa, (struct sigaction *)0));
353cb8d038Smckusick }
36