BSD 4_2 release
[unix-history] / usr / src / bin / sh / fault.c
index 534bb44..8207b74 100644 (file)
@@ -1,4 +1,6 @@
-/*     fault.c 4.1     82/05/07        */
+#ifndef lint
+static char sccsid[] = "@(#)fault.c    4.3 8/11/83";
+#endif
 
 #
 /*
 
 #
 /*
@@ -14,6 +16,7 @@
 
 STRING         trapcom[MAXTRAP];
 BOOL           trapflg[MAXTRAP];
 
 STRING         trapcom[MAXTRAP];
 BOOL           trapflg[MAXTRAP];
+BOOL           trapjmp[MAXTRAP];
 
 /* ========    fault handling routines    ======== */
 
 
 /* ========    fault handling routines    ======== */
 
@@ -23,7 +26,6 @@ VOID  fault(sig)
 {
        REG INT         flag;
 
 {
        REG INT         flag;
 
-       signal(sig,fault);
        IF sig==MEMF
        THEN    IF setbrk(brkincr) == -1
                THEN    error(nospace);
        IF sig==MEMF
        THEN    IF setbrk(brkincr) == -1
                THEN    error(nospace);
@@ -36,6 +38,11 @@ VOID fault(sig)
                trapnote |= flag;
                trapflg[sig] |= flag;
        FI
                trapnote |= flag;
                trapflg[sig] |= flag;
        FI
+       IF trapjmp[sig] ANDF sig==INTR
+       THEN
+               trapjmp[sig] = 0;
+               longjmp(INTbuf, 1);
+       FI
 }
 
 stdsigs()
 }
 
 stdsigs()