X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/eec1d9c837c2b0f0c64d74a3dbf25732c7c475f2..b365d68ae5de07ef9dc4a3b92058a13edba5ad6f:/src/general.c diff --git a/src/general.c b/src/general.c index 6d4a1b8..a54c439 100644 --- a/src/general.c +++ b/src/general.c @@ -22,8 +22,8 @@ */ #include -#include +#include #include #include #include @@ -199,16 +199,18 @@ adns_status adns_rr_info(adns_rrtype type, return st; } -#define SINFO(n,s) { adns_s_##n, s } +#define SINFO(n,s) { adns_s_##n, #n, s } static const struct sinfo { adns_status st; + const char *abbrev; const char *string; } sinfos[]= { SINFO( ok, "OK" ), SINFO( nomemory, "Out of memory" ), SINFO( unknownrrtype, "Query not implemented in DNS library" ), + SINFO( systemfail, "General resolver or system failure" ), SINFO( timeout, "DNS query timed out" ), SINFO( allservfail, "All nameservers failed" ), @@ -243,16 +245,22 @@ static int si_compar(const void *key, const void *elem) { return *st < si->st ? -1 : *st > si->st ? 1 : 0; } +static const struct sinfo *findsinfo(adns_status st) { + return bsearch(&st,sinfos,sizeof(sinfos)/sizeof(*sinfos),sizeof(*sinfos),si_compar); +} + const char *adns_strerror(adns_status st) { - static char buf[100]; + const struct sinfo *si; + si= findsinfo(st); + return si->string; +} + +const char *adns_errabbrev(adns_status st) { const struct sinfo *si; - si= bsearch(&st,sinfos,sizeof(sinfos)/sizeof(*si),sizeof(*si),si_compar); - if (si) return si->string; - - snprintf(buf,sizeof(buf),"code %d",st); - return buf; + si= findsinfo(st); + return si->abbrev; } void adns__isort(void *array, int nobjs, int sz, void *tempbuf,