NetBSD/gnu/dist/postfix/dns/dns_strerror.c

70 lines
1.6 KiB
C

/*++
/* NAME
/* dns_strerror 3
/* SUMMARY
/* name service lookup error code to string
/* SYNOPSIS
/* #include <dhs.h>
/*
/* const char *dns_strerror(code)
/* int code;
/* DESCRIPTION
/* dns_strerror() maps a name service lookup error to printable string.
/* The result is for read-only purposes, and unknown codes share a
/* common string buffer.
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*--*/
/* System library. */
#include <sys_defs.h>
#include <netdb.h>
/* Utility library. */
#include <vstring.h>
/* DNS library. */
#include "dns.h"
/*
* Mapping from error code to printable string. The herror() routine does
* something similar, but has output only to the stderr stream.
*/
struct dns_error_map {
unsigned error;
const char *text;
};
static struct dns_error_map dns_error_map[] = {
HOST_NOT_FOUND, "Host not found",
TRY_AGAIN, "Host not found, try again",
NO_RECOVERY, "Non-recoverable error",
NO_DATA, "Host found but no data record of requested type",
};
/* dns_strerror - map resolver error code to printable string */
const char *dns_strerror(unsigned error)
{
static VSTRING *unknown = 0;
unsigned i;
for (i = 0; i < sizeof(dns_error_map) / sizeof(dns_error_map[0]); i++)
if (dns_error_map[i].error == error)
return (dns_error_map[i].text);
if (unknown == 0)
unknown = vstring_alloc(sizeof("Unknown error XXXXXX"));
vstring_sprintf(unknown, "Unknown error %u", error);
return (vstring_str(unknown));
}