12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include <signal.h>
- #include <errno.h>
- int
- sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact)
- {
- int retval = 0;
- if (_oact)
- {
- void (*installed_sig)(int) = signal (_sig, SIG_IGN);
-
- if (installed_sig == SIG_ERR)
- {
- retval = -1;
- errno = EINVAL;
- }
- else
- signal (_sig, installed_sig);
- _oact->sa_handler = installed_sig;
- retval = sigemptyset (&_oact->sa_mask);
- _oact->sa_flags = 0;
- }
- if (_act)
- {
- if (signal (_sig, _act->sa_handler) == SIG_ERR)
- {
- retval = -1;
- errno = EINVAL;
- }
- }
- return 0;
- }
|