1*14478Ssam #ifndef lint 2*14478Ssam static char sccsid[] = "@(#)error.c 4.2 08/11/83"; 3*14478Ssam #endif 46690Smckusick 56690Smckusick # 66690Smckusick /* 76690Smckusick * UNIX shell 86690Smckusick * 96690Smckusick * S. R. Bourne 106690Smckusick * Bell Telephone Laboratories 116690Smckusick * 126690Smckusick */ 136690Smckusick 146690Smckusick #include "defs.h" 156690Smckusick 166690Smckusick 176690Smckusick /* ======== error handling ======== */ 186690Smckusick exitset()196690Smckusickexitset() 206690Smckusick { 216690Smckusick assnum(&exitadr,exitval); 226690Smckusick } 236690Smckusick sigchk()246690Smckusicksigchk() 256690Smckusick { 266690Smckusick /* Find out if it is time to go away. 276690Smckusick * `trapnote' is set to SIGSET when fault is seen and 286690Smckusick * no trap has been set. 296690Smckusick */ 306690Smckusick IF trapnote&SIGSET 316690Smckusick THEN exitsh(SIGFAIL); 326690Smckusick FI 336690Smckusick } 346690Smckusick failed(s1,s2)356690Smckusickfailed(s1,s2) 366690Smckusick STRING s1, s2; 376690Smckusick { 386690Smckusick prp(); prs(s1); 396690Smckusick IF s2 406690Smckusick THEN prs(colon); prs(s2); 416690Smckusick FI 426690Smckusick newline(); exitsh(ERROR); 436690Smckusick } 446690Smckusick error(s)456690Smckusickerror(s) 466690Smckusick STRING s; 476690Smckusick { 486690Smckusick failed(s,NIL); 496690Smckusick } 506690Smckusick exitsh(xno)516690Smckusickexitsh(xno) 526690Smckusick INT xno; 536690Smckusick { 546690Smckusick /* Arrive here from `FATAL' errors 556690Smckusick * a) exit command, 566690Smckusick * b) default trap, 576690Smckusick * c) fault with no trap set. 586690Smckusick * 596690Smckusick * Action is to return to command level or exit. 606690Smckusick */ 616690Smckusick exitval=xno; 626690Smckusick IF (flags & (forked|errflg|ttyflg)) != ttyflg 636690Smckusick THEN done(); 646690Smckusick ELSE clearup(); 656690Smckusick longjmp(errshell,1); 666690Smckusick FI 676690Smckusick } 686690Smckusick done()696690Smckusickdone() 706690Smckusick { 716690Smckusick REG STRING t; 726690Smckusick IF t=trapcom[0] 736690Smckusick THEN trapcom[0]=0; /*should free but not long */ 746690Smckusick execexp(t,0); 756690Smckusick FI 766690Smckusick rmtemp(0); 776690Smckusick exit(exitval); 786690Smckusick } 796690Smckusick rmtemp(base)806690Smckusickrmtemp(base) 816690Smckusick IOPTR base; 826690Smckusick { 836690Smckusick WHILE iotemp>base 846690Smckusick DO unlink(iotemp->ioname); 856690Smckusick iotemp=iotemp->iolst; 866690Smckusick OD 876690Smckusick } 88