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