summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sort.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/sort.c b/src/sort.c
index 3ecd904b7..2531b004c 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -55,9 +55,15 @@ struct rlimit { size_t rlim_cur; };
# include <langinfo.h>
#endif
+/* Use SA_NOCLDSTOP as a proxy for whether the sigaction machinery is
+ present. */
#ifndef SA_NOCLDSTOP
+# define SA_NOCLDSTOP 0
# define sigprocmask(How, Set, Oset) /* empty */
# define sigset_t int
+# if ! HAVE_SIGINTERRUPT
+# define siginterrupt(sig, flag) /* empty */
+# endif
#endif
#ifndef STDC_HEADERS
@@ -2210,9 +2216,8 @@ parse_field_count (char const *string, size_t *val, char const *msgid)
static void
sighandler (int sig)
{
-#ifndef SA_NOCLDSTOP
- signal (sig, SIG_IGN);
-#endif
+ if (! SA_NOCLDSTOP)
+ signal (sig, SIG_IGN);
cleanup ();
@@ -2337,7 +2342,7 @@ main (int argc, char **argv)
static int const sig[] = { SIGHUP, SIGINT, SIGPIPE, SIGTERM };
enum { nsigs = sizeof sig / sizeof sig[0] };
-#ifdef SA_NOCLDSTOP
+#if SA_NOCLDSTOP
struct sigaction act;
sigemptyset (&caught_signals);
@@ -2358,7 +2363,10 @@ main (int argc, char **argv)
#else
for (i = 0; i < nsigs; i++)
if (signal (sig[i], SIG_IGN) != SIG_IGN)
- signal (sig[i], sighandler);
+ {
+ signal (sig[i], sighandler);
+ siginterrupt (sig[i], 1);
+ }
#endif
}