|
|
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.