#include <stdint.h>
#include <stdlib.h>
-#include "sig-handler.h"
-
/* We assume that a platform without POSIX signal blocking functions
also does not have the POSIX sigaction() function, only the
signal() function. We also assume signal() has SysV semantics,
# define SIGSTOP (-1)
#endif
+typedef void (*handler_t) (int);
+
int
sigismember (const sigset_t *set, int sig)
{
/* The previous signal handlers.
Only the array elements corresponding to blocked signals are relevant. */
-static volatile sa_handler_t old_handlers[NSIG];
+static volatile handler_t old_handlers[NSIG];
int
sigprocmask (int operation, const sigset_t *set, sigset_t *old_set)
{
if (signal (sig, old_handlers[sig]) != blocked_handler)
/* The application changed a signal handler while the signal
- was blocked. We don't support this. */
+ was blocked, bypassing our rpl_signal replacement.
+ We don't support this. */
abort ();
received[sig] = pending_array[sig];
blocked_set &= ~(1U << sig);
/* Install the handler FUNC for signal SIG, and return the previous
handler. */
-sa_handler_t
-rpl_signal (int sig, sa_handler_t handler)
+handler_t
+rpl_signal (int sig, handler_t handler)
{
/* We must provide a wrapper, so that a user can query what handler
they installed even if that signal is currently blocked. */
stale information if it calls signal(B). Oh well -
signal handlers really shouldn't try to manipulate the
installed handlers of unrelated signals. */
- sa_handler_t result = old_handlers[sig];
+ handler_t result = old_handlers[sig];
old_handlers[sig] = handler;
return result;
}
- return signal (sig, handler);
+ else
+ return signal (sig, handler);
}
else
{