xref: /csrg-svn/lib/libc/gen/siginterrupt.c (revision 26590)
122110Smckusick /*
222110Smckusick  * Copyright (c) 1985 Regents of the University of California.
322110Smckusick  * All rights reserved.  The Berkeley software License Agreement
422110Smckusick  * specifies the terms and conditions for redistribution.
522110Smckusick  */
618295Smckusick 
7*26590Sdonn #if defined(LIBC_SCCS) && !defined(lint)
8*26590Sdonn static char sccsid[] = "@(#)siginterrupt.c	5.2 (Berkeley) 03/09/86";
9*26590Sdonn #endif LIBC_SCCS and not lint
1022110Smckusick 
1118295Smckusick #include <signal.h>
1218295Smckusick 
1318295Smckusick /*
1418295Smckusick  * Set signal state to prevent restart of system calls
1518295Smckusick  * after an instance of the indicated signal.
1618295Smckusick  */
1718295Smckusick siginterrupt(sig, flag)
1818295Smckusick 	int sig, flag;
1918295Smckusick {
2018295Smckusick 	struct sigvec sv;
2118295Smckusick 	int ret;
2218295Smckusick 
2318295Smckusick 	if ((ret = sigvec(sig, 0, &sv)) < 0)
2418295Smckusick 		return (ret);
2518295Smckusick 	if (flag)
2618295Smckusick 		sv.sv_flags |= SV_INTERRUPT;
2718295Smckusick 	else
2818295Smckusick 		sv.sv_flags &= ~SV_INTERRUPT;
2918295Smckusick 	return (sigvec(sig, &sv, 0));
3018295Smckusick }
31