From 17fde5a99d42fc9d4a7eade5a468c649807d6851 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sat, 9 May 1998 17:00:35 +0200
Subject: [PATCH] Some fixes to my_signal().

Rev: src/signal_handler.c:1.61
---
 src/signal_handler.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/signal_handler.c b/src/signal_handler.c
index fbb12f4684..03f85a760a 100644
--- a/src/signal_handler.c
+++ b/src/signal_handler.c
@@ -22,7 +22,7 @@
 #include "builtin_functions.h"
 #include <signal.h>
 
-RCSID("$Id: signal_handler.c,v 1.60 1998/05/06 00:32:02 hubbe Exp $");
+RCSID("$Id: signal_handler.c,v 1.61 1998/05/09 15:00:35 grubba Exp $");
 
 #ifdef HAVE_PASSWD_H
 # include <passwd.h>
@@ -285,11 +285,11 @@ static struct sigdesc signal_desc []={
 #ifdef SIGPTRESCHED
   { SIGPTRESCHED, "SIGPTRESCHED" },
 #endif
+
+#ifndef _REENTRANT
 #ifdef SIGWAITING
   { SIGWAITING, "SIGWAITING" },
 #endif
-
-#ifndef _REENTRANT
 #ifdef SIGLWP
   { SIGLWP, "SIGLWP" },
 #endif
@@ -314,14 +314,21 @@ void my_signal(int sig, sigfunctype fun)
 #ifdef HAVE_SIGACTION
   {
     struct sigaction action;
-    action.sa_handler=fun;
+    /* NOTE:
+     *   sa_handler is really _funcptr._handler, and
+     *   sa_sigaction is really _funcptr._sigaction,
+     *   where _funcptr is a union. ie sa_handler and
+     *   sa_sigaction overlap.
+     */
+    MEMSET((char *)&action, 0, sizeof(action));
+    action.sa_handler = fun;
     sigfillset(&action.sa_mask);
-    action.sa_flags=0;
+    action.sa_flags = 0;
 #ifdef SA_INTERRUPT
     if(fun != SIG_IGN)
-      action.sa_flags=SA_INTERRUPT;
+      action.sa_flags |= SA_INTERRUPT;
 #endif
-    sigaction(sig,&action,0);
+    sigaction(sig, &action, NULL);
   }
 #else
 #ifdef HAVE_SIGVEC
@@ -330,7 +337,7 @@ void my_signal(int sig, sigfunctype fun)
     MEMSET((char *)&action, 0, sizeof(action));
     action.sv_handler= fun;
     action.sv_mask=-1;
-#ifdef SA_INTERRUPT
+#ifdef SV_INTERRUPT
     if(fun != SIG_IGN)
       action.sv_flags=SV_INTERRUPT;
 #endif
-- 
GitLab