xref: /original-bsd/old/sh/error.c (revision 24f1d79f)
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