|
|
1.1 root 1: /*
2: * except.c
3: *
4: * Support routines for C exceptions
5: *
6: (c) Jeffrey Mogul Stanford 18 February 1983
7: */
8:
9: #include <stdio.h>
10: #include "except.h"
11:
12: extern int errno;
13: extern int sys_nerr;
14: extern char *sys_errlist[];
15:
16: _Except_Buf *_Except_Header = 0;
17: int ExceptMode = 0;
18:
19: raise(code, msg)
20: int code;
21: char *msg;
22: {
23: register _Except_Buf *EBp = _Except_Header;
24:
25: if (EBp == 0) { /* uncaught exception */
26: if (ExceptMode&EX_MODE_REPORT) {
27: fprintf(stderr,"Uncaught exception: %d, %s\n",
28: code, msg);
29: }
30: if (ExceptMode&EX_MODE_ABORT)
31: abort();
32: else
33: exit(code);
34: }
35:
36: EBp->Code = code;
37: EBp->Message = msg;
38:
39: _Except_Header = EBp->Prev;
40:
41: longjmp(EBp->Environ, 1);
42: }
43:
44: raise_sys()
45: {
46: register int errnum = errno;
47:
48: if ((errnum < 1) || (errnum >= sys_nerr)) {
49: raise(-1, "Unknown Unix error code");
50: }
51: else {
52: raise(errnum, sys_errlist[errnum]);
53: }
54: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.