|
|
1.1 root 1: /* @(#)error.c 1.4 */
2: /*
3: * UNIX shell
4: *
5: * Bell Telephone Laboratories
6: *
7: */
8:
9: #include "defs.h"
10:
11:
12: /* ======== error handling ======== */
13:
14: failed(s1, s2)
15: char *s1, *s2;
16: {
17: prp();
18: prs_cntl(s1);
19: if (s2)
20: {
21: prs(colon);
22: prs(s2);
23: }
24: newline();
25: exitsh(ERROR);
26: }
27:
28: error(s)
29: char *s;
30: {
31: failed(s, NIL);
32: }
33:
34: exitsh(xno)
35: int xno;
36: {
37: /*
38: * Arrive here from `FATAL' errors
39: * a) exit command,
40: * b) default trap,
41: * c) fault with no trap set.
42: *
43: * Action is to return to command level or exit.
44: */
45: exitval = xno;
46: flags |= eflag;
47: if ((flags & (forked | errflg | ttyflg)) != ttyflg)
48: done();
49: else
50: {
51: clearup();
52: restore(0);
53: clear_buff();
54: execbrk = breakcnt = funcnt = 0;
55: longjmp(errshell, 1);
56: }
57: }
58:
59: done()
60: {
61: register char *t;
62:
63: if (t = trapcom[0])
64: {
65: trapcom[0] = 0;
66: execexp(t, 0);
67: shfree(t);
68: }
69: else
70: chktrap();
71:
72: rmtemp(0);
73: rmfunctmp();
74:
75: #ifdef ACCT
76: doacct();
77: #endif
78: exit(exitval);
79: }
80:
81: rmtemp(base)
82: struct ionod *base;
83: {
84: while (iotemp > base)
85: {
86: unlink(iotemp->ioname);
87: shfree(iotemp->iolink);
88: iotemp = iotemp->iolst;
89: }
90: }
91:
92: rmfunctmp()
93: {
94: while (fiotemp)
95: {
96: unlink(fiotemp->ioname);
97: fiotemp = fiotemp->iolst;
98: }
99: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.