X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/a79ac5bae05711d622671eacfbafd19a5a94ae3c..d1278f10fdfb2f247322c4b62078602a7596816b:/src/general.c diff --git a/src/general.c b/src/general.c index 5ebdd6a..0168a4a 100644 --- a/src/general.c +++ b/src/general.c @@ -27,6 +27,7 @@ */ #include +#include #include #include @@ -46,7 +47,11 @@ void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent, (!(ads->iflags & adns_if_debug) && (!prevent || (ads->iflags & prevent)))) return; - fprintf(ads->diagfile,"adns%s: ",pfx); + if (ads->iflags & adns_if_logpid) { + fprintf(ads->diagfile,"adns%s [%ld]: ",pfx,(long)getpid()); + } else { + fprintf(ads->diagfile,"adns%s: ",pfx); + } vfprintf(ads->diagfile,fmt,al); @@ -204,6 +209,7 @@ adns_status adns_rr_info(adns_rrtype type, return st; } + #define SINFO(n,s) { adns_s_##n, #n, s } static const struct sinfo { @@ -240,7 +246,7 @@ static const struct sinfo { SINFO( querydomaintoolong, "Domain name is too long" ), SINFO( nxdomain, "No such domain" ), - SINFO( nodata, "No such data" ), + SINFO( nodata, "No such data" ) }; static int si_compar(const void *key, const void *elem) { @@ -268,6 +274,43 @@ const char *adns_errabbrev(adns_status st) { return si->abbrev; } + +#define STINFO(max) { adns_s_max_##max, #max } + +static const struct stinfo { + adns_status stmax; + const char *abbrev; +} stinfos[]= { + { adns_s_ok, "ok" }, + STINFO( localfail ), + STINFO( remotefail ), + STINFO( tempfail ), + STINFO( misconfig ), + STINFO( misquery ), + STINFO( permfail ) +}; + +static int sti_compar(const void *key, const void *elem) { + const adns_status *st= key; + const struct stinfo *sti= elem; + + adns_status here, min, max; + + here= *st; + min= (sti==stinfos) ? 0 : sti[-1].stmax+1; + max= sti->stmax; + + return here < min ? -1 : here > max ? 1 : 0; +} + +const char *adns_errtypeabbrev(adns_status st) { + const struct stinfo *sti; + + sti= bsearch(&st,stinfos,sizeof(stinfos)/sizeof(*stinfos),sizeof(*stinfos),sti_compar); + return sti->abbrev; +} + + void adns__isort(void *array, int nobjs, int sz, void *tempbuf, int (*needswap)(void *context, const void *a, const void *b), void *context) {