xref: /original-bsd/lib/libc/gen/signal.c (revision bac379f5)
15bd17553Smckusick /*
2*bac379f5Sbostic  * Copyright (c) 1985, 1989, 1993
3*bac379f5Sbostic  *	The Regents of the University of California.  All rights reserved.
4d0bb23ddSbostic  *
532d8cbb4Sbostic  * %sccs.include.redist.c%
65bd17553Smckusick  */
75bd17553Smckusick 
81e0c24c3Sdonn #if defined(LIBC_SCCS) && !defined(lint)
9*bac379f5Sbostic static char sccsid[] = "@(#)signal.c	8.1 (Berkeley) 06/04/93";
10d0bb23ddSbostic #endif /* LIBC_SCCS and not lint */
112fd000f9Smckusick 
122a8753dfSralph /*
132a8753dfSralph  * Almost backwards compatible signal.
142a8753dfSralph  */
152fd000f9Smckusick #include <signal.h>
162a8753dfSralph 
1746158b3aSkarels sigset_t _sigintr;		/* shared with siginterrupt */
182fd000f9Smckusick 
1946158b3aSkarels sig_t
signal(s,a)2046158b3aSkarels signal(s, a)
2146158b3aSkarels 	int s;
2246158b3aSkarels 	sig_t a;
2346158b3aSkarels {
2446158b3aSkarels 	struct sigaction sa, osa;
2546158b3aSkarels 
2646158b3aSkarels 	sa.sa_handler = a;
2746158b3aSkarels 	sigemptyset(&sa.sa_mask);
2846158b3aSkarels 	sa.sa_flags = 0;
2946158b3aSkarels 	if (!sigismember(&_sigintr, s))
3046158b3aSkarels 		sa.sa_flags |= SA_RESTART;
3146158b3aSkarels 	if (sigaction(s, &sa, &osa) < 0)
3277727d6dSbostic 		return (SIG_ERR);
3346158b3aSkarels 	return (osa.sa_handler);
342fd000f9Smckusick }
35