
1: /* 2: * Copyright (c) 1987, 1993 3: * The Regents of the University of California. All rights reserved. 4: * 5: * Redistribution and use in source and binary forms, with or without 6: * modification, are permitted provided that the following conditions 7: * are met: 8: * 1. Redistributions of source code must retain the above copyright 9: * notice, this list of conditions and the following disclaimer. 10: * 2. Redistributions in binary form must reproduce the above copyright 11: * notice, this list of conditions and the following disclaimer in the 12: * documentation and/or other materials provided with the distribution. 13: * 4. Neither the name of the University nor the names of its contributors 14: * may be used to endorse or promote products derived from this software 15: * without specific prior written permission. 16: * 17: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27: * SUCH DAMAGE. 28: */ 29: 30: /* 31: * Portions Copyright (c) 1996-1999 by Internet Software Consortium. 32: * 33: * Permission to use, copy, modify, and distribute this software for any 34: * purpose with or without fee is hereby granted, provided that the above 35: * copyright notice and this permission notice appear in all copies. 36: * 37: * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS 38: * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 39: * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE 40: * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 41: * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 42: * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 43: * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 44: * SOFTWARE. 45: */ 46: 47: #if defined(LIBC_SCCS) && !defined(lint) 48: static const char sccsid[] = "@(#)herror.c 8.1 (Berkeley) 6/4/93"; 49: static const char rcsid[] = "$BINDId: herror.c,v 8.11 1999/10/13 16:39:39 vixie Exp $"; 50: #endif /* LIBC_SCCS and not lint */ 51: 52: #include <sys/types.h> 53: #include <sys/param.h> 54: #include <sys/uio.h> 55: 56: #include <netinet/in.h> 57: #include <arpa/nameser.h> 58: 59: #include <netdb.h> 60: #include <resolv.h> 61: #include <string.h> 62: #include <unistd.h> 63: 64: #include <libintl.h> 65: #include <not-cancel.h> 66: 67: const char *const h_errlist[] = { 68: N_("Resolver Error 0 (no error)"), 69: N_("Unknown host"), /* 1 HOST_NOT_FOUND */ 70: N_("Host name lookup failure"), /* 2 TRY_AGAIN */ 71: N_("Unknown server error"), /* 3 NO_RECOVERY */ 72: N_("No address associated with name"), /* 4 NO_ADDRESS */ 73: }; 74: const int h_nerr = { sizeof h_errlist / sizeof h_errlist[0] }; 75: 76: /* 77: * herror -- 78: * print the error indicated by the h_errno value. 79: */ 80: void 81: herror(const char *s) { 82: struct iovec iov[4], *v = iov; 83: 84: if (s != NULL && *s != '\0') { 85: v->iov_base = (/*noconst*/ char *)s; 86: v->iov_len = strlen(s); 87: v++; 88: v->iov_base = ": "; 89: v->iov_len = 2; 90: v++; 91: } 92: v->iov_base = (char *)hstrerror(h_errno); 93: v->iov_len = strlen(v->iov_base); 94: v++; 95: v->iov_base = "\n"; 96: v->iov_len = 1; 97: writev_not_cancel_no_status(STDERR_FILENO, iov, (v - iov) + 1); 98: } 99: 100: /* 101: * hstrerror -- 102: * return the string associated with a given "host" errno value. 103: */ 104: const char * 105: hstrerror(int err) { 106: if (err < 0) 107: return _("Resolver internal error"); 108: else if (err < h_nerr) 109: return _(h_errlist[err]); 110: return _("Unknown resolver error"); 111: } 112: libc_hidden_def (hstrerror)