sh: start trying to sort out signals
authorAlan Cox <alan@linux.intel.com>
Mon, 11 May 2015 21:31:35 +0000 (22:31 +0100)
committerAlan Cox <alan@linux.intel.com>
Mon, 11 May 2015 21:31:35 +0000 (22:31 +0100)
Applications/V7/cmd/sh/defs.h
Applications/V7/cmd/sh/fault.c

index 0ac03d1..6058c73 100644 (file)
@@ -296,7 +296,7 @@ extern void makearg(register char *args);
 /* fault.c */
 extern void fault(register int sig);
 extern void stdsigs(void);
-extern int ignsig(int n);
+extern sighandler_t ignsig(int n);
 extern void getsig(int n);
 extern void oldsigs(void);
 extern void clrsig(int i);
index c35c755..67d2559 100644 (file)
@@ -45,26 +45,24 @@ void stdsigs(void)
        getsig(ALARM);
 }
 
-int ignsig(int n)
+sighandler_t ignsig(int n)
 {
-       register int s, i;
-#if 0
-       // FIXME: need to do proper SIG_IGN checks/handling
-       if ((s = signal(i = n, 1) & 01) == 0) {
+       register int i;
+       sighandler_t s;
+       /* FIXME */
+       /* Was a test of the low bit.. not clear this is the correct translation of V7 internals */
+       if ((s = signal(i = n, SIG_IGN)) != SIG_IGN)
                trapflg[i] |= SIGMOD;
-       }
-#endif
-       return (s);
+       return s;
 }
 
 void getsig(int n)
 {
        register int i;
 
-       if (trapflg[i = n] & SIGMOD || ignsig(i) == 0) {
+       /* Again was a zero test for ignsig, unclear if correct translation FIXME */
+       if (trapflg[i = n] & SIGMOD || ignsig(i) == SIG_DFL)
                signal(i, fault);
-               ;
-       }
 }
 
 void oldsigs(void)