herror.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. #define __FORCE_GLIBC
  20. #include <features.h>
  21. #include <stdio.h>
  22. #include <string.h>
  23. #include <netdb.h>
  24. libc_hidden_proto(fprintf)
  25. libc_hidden_proto(__h_errno_location)
  26. libc_hidden_proto(stderr)
  27. static const char *error_msg = "Resolver error";
  28. static const char *const h_errlist[] = {
  29. "Error 0",
  30. "Unknown host", /* 1 HOST_NOT_FOUND */
  31. "Host name lookup failure", /* 2 TRY_AGAIN */
  32. "Unknown server error", /* 3 NO_RECOVERY */
  33. "No address associated with name", /* 4 NO_ADDRESS */
  34. };
  35. static const int h_nerr = { sizeof(h_errlist)/sizeof(h_errlist[0]) };
  36. /*
  37. * herror -- print the error indicated by the h_errno value.
  38. */
  39. libc_hidden_proto(herror)
  40. void herror(const char *s)
  41. {
  42. static const char colon_space[] = ": ";
  43. const char *p;
  44. const char *c;
  45. c = colon_space;
  46. if (!s || !*s) {
  47. c += 2;
  48. }
  49. p = error_msg;
  50. if ((h_errno >= 0) && (h_errno < h_nerr)) {
  51. p = h_errlist[h_errno];
  52. }
  53. fprintf(stderr, "%s%s%s\n", s, c, p);
  54. }
  55. libc_hidden_def(herror)
  56. const char *hstrerror(int err)
  57. {
  58. if (err < 0) {
  59. return(error_msg);
  60. } else if (err < h_nerr) {
  61. return(h_errlist[err]);
  62. }
  63. return(error_msg);
  64. }