|
|
1.1 ! root 1: /* ! 2: * Copyright 1987 by MIT Student Information Processing Board ! 3: * ! 4: * For copyright info, see mit-sipb-copyright.h. ! 5: */ ! 6: ! 7: #include <stdio.h> ! 8: #include <sys/types.h> ! 9: #include <sys/uio.h> ! 10: #include "error_table.h" ! 11: #include "mit-sipb-copyright.h" ! 12: ! 13: typedef int (*int_func)(); ! 14: ! 15: #if defined(mips) && defined(ultrix) ! 16: int errno; /* this is needed to keep the loader from complaining */ ! 17: #endif ! 18: ! 19: int_func com_err_hook = (int_func) NULL; ! 20: char *error_message(); ! 21: ! 22: void ! 23: com_err(whoami, code, message) ! 24: char *whoami; ! 25: int code; ! 26: char *message; ! 27: { ! 28: struct iovec strings[6]; ! 29: ! 30: if (com_err_hook) { ! 31: (*com_err_hook)(whoami, code, message); ! 32: return; ! 33: } ! 34: ! 35: strings[0].iov_base = whoami; ! 36: strings[0].iov_len = strlen(whoami); ! 37: if (whoami) { ! 38: strings[1].iov_base = ": "; ! 39: strings[1].iov_len = 2; ! 40: } else ! 41: strings[1].iov_len = 0; ! 42: if (code) { ! 43: register char *errmsg = error_message(code); ! 44: strings[2].iov_base = errmsg; ! 45: strings[2].iov_len = strlen(errmsg); ! 46: } else ! 47: strings[2].iov_len = 0; ! 48: strings[3].iov_base = " "; ! 49: strings[3].iov_len = 1; ! 50: strings[4].iov_base = message; ! 51: strings[4].iov_len = strlen(message); ! 52: strings[5].iov_base = "\n"; ! 53: strings[5].iov_len = 1; ! 54: (void) writev(2, strings, 6); ! 55: } ! 56: ! 57: int_func ! 58: set_com_err_hook(new_proc) ! 59: int_func new_proc; ! 60: { ! 61: register int_func x = com_err_hook; ! 62: com_err_hook = new_proc; ! 63: return (x); ! 64: } ! 65: ! 66: reset_com_err_hook() ! 67: { ! 68: com_err_hook = (int_func) NULL; ! 69: } ! 70: ! 71: void ! 72: perror(msg) ! 73: register char *msg; ! 74: { ! 75: com_err(msg, errno, (char *)NULL); ! 76: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.