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: }