|
|
1.1 ! root 1: # ! 2: /* ! 3: * UNIX shell ! 4: * ! 5: * S. R. Bourne ! 6: * Bell Telephone Laboratories ! 7: * ! 8: */ ! 9: ! 10: #include "defs.h" ! 11: ! 12: ! 13: /* ======== error handling ======== */ ! 14: ! 15: exitset() ! 16: { ! 17: assnum(&exitadr,exitval); ! 18: } ! 19: ! 20: sigchk() ! 21: { ! 22: /* Find out if it is time to go away. ! 23: * `trapnote' is set to SIGSET when fault is seen and ! 24: * no trap has been set. ! 25: */ ! 26: IF trapnote&SIGSET ! 27: THEN exitsh(SIGFAIL); ! 28: FI ! 29: } ! 30: ! 31: failed(s1,s2) ! 32: STRING s1, s2; ! 33: { ! 34: prp(); prs(s1); ! 35: IF s2 ! 36: THEN prs(colon); prs(s2); ! 37: FI ! 38: newline(); exitsh(ERROR); ! 39: } ! 40: ! 41: error(s) ! 42: STRING s; ! 43: { ! 44: failed(s,NIL); ! 45: } ! 46: ! 47: exitsh(xno) ! 48: INT xno; ! 49: { ! 50: /* Arrive here from `FATAL' errors ! 51: * a) exit command, ! 52: * b) default trap, ! 53: * c) fault with no trap set. ! 54: * ! 55: * Action is to return to command level or exit. ! 56: */ ! 57: exitval=xno; ! 58: IF (flags & (forked|errflg|ttyflg)) != ttyflg ! 59: THEN done(); ! 60: ELSE clearup(); ! 61: longjmp(errshell,1); ! 62: FI ! 63: } ! 64: ! 65: done() ! 66: { ! 67: REG STRING t; ! 68: IF t=trapcom[0] ! 69: THEN trapcom[0]=0; /*should free but not long */ ! 70: execexp(t,0); ! 71: FI ! 72: rmtemp(0); ! 73: exit(exitval); ! 74: } ! 75: ! 76: rmtemp(base) ! 77: IOPTR base; ! 78: { ! 79: WHILE iotemp>base ! 80: DO unlink(iotemp->ioname); ! 81: iotemp=iotemp->iolst; ! 82: OD ! 83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.