home *** CD-ROM | disk | FTP | other *** search
/ Serving the Web / ServingTheWeb1995.disc1of1.iso / linux / slacksrce / d / libc / libc-4.6 / libc-4 / libc-linux / inet / herror.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-01  |  2.5 KB  |  84 lines

  1. /*
  2.  * Copyright (c) 1987 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that: (1) source distributions retain this entire copyright
  7.  * notice and comment, and (2) distributions including binaries display
  8.  * the following acknowledgement:  ``This product includes software
  9.  * developed by the University of California, Berkeley and its contributors''
  10.  * in the documentation or other materials provided with the distribution
  11.  * and in all advertising materials mentioning features or use of this
  12.  * software. Neither the name of the University nor the names of its
  13.  * contributors may be used to endorse or promote products derived
  14.  * from this software without specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19.  
  20. #if defined(LIBC_SCCS) && !defined(lint)
  21. static char sccsid[] = "@(#)herror.c    6.5 (Berkeley) 6/1/90";
  22. #endif /* LIBC_SCCS and not lint */
  23.  
  24. #include "inetprivate.h"
  25.  
  26. #if NLS
  27. #include "nl_types.h"
  28. #endif
  29.  
  30. const char *const h_errlist[] = {
  31.     "Error 0",
  32.     "Unknown host",                /* 1 HOST_NOT_FOUND */
  33.     "Host name lookup failure",        /* 2 TRY_AGAIN */
  34.     "Unknown server error",            /* 3 NO_RECOVERY */
  35.     "No address associated with name",    /* 4 NO_ADDRESS */
  36. };
  37. int    h_nerr = { sizeof(h_errlist)/sizeof(h_errlist[0]) };
  38.  
  39. int    h_errno;
  40.  
  41. /*
  42.  * herror --
  43.  *    print the error indicated by the h_errno value.
  44.  */
  45. void
  46. herror(s)
  47.     const char *s;
  48. {
  49.     struct iovec iov[4];
  50.     register struct iovec *v = iov;
  51. #if NLS
  52.         libc_nls_init();
  53. #endif
  54.  
  55.     if (s && *s) {
  56.         v->iov_base = s;
  57.         v->iov_len = strlen(s);
  58.         v++;
  59.         v->iov_base = ": ";
  60.         v->iov_len = 2;
  61.         v++;
  62.     }
  63.     v->iov_base = (u_int)h_errno < h_nerr ?
  64.         h_errlist[h_errno] : "Unknown error";
  65.     v->iov_len = strlen(v->iov_base);
  66.     v++;
  67.     v->iov_base = "\n";
  68.     v->iov_len = 1;
  69. #if NLS
  70.     if ((u_int)h_errno < h_nerr)
  71.         fprintf(stderr, (s && *s) ? "%s: %s\n":"%s\n",
  72.             (s && *s) ? s: catgets(_libc_cat, HerrorListSet, h_errno+1, (char *) h_errlist[h_errno]),
  73.             (s && *s) ? catgets(_libc_cat, HerrorListSet, h_errno+1, (char *) h_errlist[h_errno]): NULL);
  74.     else
  75.         fprintf(stderr, (s && *s) ? "%s: %s\n":"%s\n",
  76.             (s && *s) ? s: catgets(_libc_cat, ErrorListSet, 1, "Unknown error"),
  77.             (s && *s) ? catgets(_libc_cat, ErrorListSet, 1, "Unknown error"): NULL);
  78.  
  79. #else
  80.     writev(2, iov, (v - iov) + 1);
  81. #endif
  82.  
  83. }
  84.