home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / kerberosIV / compile_et / perror.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-25  |  1.4 KB  |  77 lines

  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 const char *msg;
  74. {
  75.     com_err(msg, errno, (char *)NULL);
  76. }
  77.