Merge branch 'fanf-deduplicate-file-line' into 'main'

De-duplicate __FILE__, __LINE__ plus some error reporting cleanup

See merge request isc-projects/bind9!6914
This commit is contained in:
Tony Finch 2022-10-17 13:17:57 +00:00
commit 3b285ee9ad
38 changed files with 162 additions and 250 deletions

View file

@ -1,3 +1,6 @@
5997. [cleanup] Less ceremonial UNEXPECTED_ERROR() and FATAL_ERROR()
reporting macros. [GL !6914]
5996. [bug] Fix a couple of bugs in cfg_print_duration(), which
could result in generating incomplete duration values
when printing the configuration using named-checkconf.

View file

@ -531,8 +531,7 @@ dlz_dlopen_init(isc_mem_t *mctx) {
mctx, &dlz_dlopen);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"dns_sdlzregister() failed: %s",
UNEXPECTED_ERROR("dns_sdlzregister() failed: %s",
isc_result_totext(result));
result = ISC_R_UNEXPECTED;
}

View file

@ -241,12 +241,12 @@ assertion_failed(const char *file, int line, isc_assertiontype_t type,
}
noreturn static void
library_fatal_error(const char *file, int line, const char *format,
va_list args) ISC_FORMAT_PRINTF(3, 0);
library_fatal_error(const char *file, int line, const char *func,
const char *format, va_list args) ISC_FORMAT_PRINTF(3, 0);
static void
library_fatal_error(const char *file, int line, const char *format,
va_list args) {
library_fatal_error(const char *file, int line, const char *func,
const char *format, va_list args) {
/*
* Handle isc_error_fatal() calls from our libraries.
*/
@ -260,7 +260,7 @@ library_fatal_error(const char *file, int line, const char *format,
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_MAIN, ISC_LOG_CRITICAL,
"%s:%d: fatal error:", file, line);
"%s:%d:%s(): fatal error: ", file, line, func);
isc_log_vwrite(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_MAIN, ISC_LOG_CRITICAL, format,
args);
@ -268,7 +268,7 @@ library_fatal_error(const char *file, int line, const char *format,
NAMED_LOGMODULE_MAIN, ISC_LOG_CRITICAL,
"exiting (due to fatal error in library)");
} else {
fprintf(stderr, "%s:%d: fatal error: ", file, line);
fprintf(stderr, "%s:%d:%s(): fatal error: ", file, line, func);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
@ -281,12 +281,13 @@ library_fatal_error(const char *file, int line, const char *format,
}
static void
library_unexpected_error(const char *file, int line, const char *format,
va_list args) ISC_FORMAT_PRINTF(3, 0);
library_unexpected_error(const char *file, int line, const char *func,
const char *format, va_list args)
ISC_FORMAT_PRINTF(3, 0);
static void
library_unexpected_error(const char *file, int line, const char *format,
va_list args) {
library_unexpected_error(const char *file, int line, const char *func,
const char *format, va_list args) {
/*
* Handle isc_error_unexpected() calls from our libraries.
*/
@ -294,12 +295,13 @@ library_unexpected_error(const char *file, int line, const char *format,
if (named_g_lctx != NULL) {
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_MAIN, ISC_LOG_ERROR,
"%s:%d: unexpected error:", file, line);
"%s:%d:%s(): unexpected error: ", file, line,
func);
isc_log_vwrite(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_MAIN, ISC_LOG_ERROR, format,
args);
} else {
fprintf(stderr, "%s:%d: fatal error: ", file, line);
fprintf(stderr, "%s:%d:%s(): fatal error: ", file, line, func);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
@ -1406,8 +1408,7 @@ named_smf_get_instance(char **ins_name, int debug, isc_mem_t *mctx) {
if ((h = scf_handle_create(SCF_VERSION)) == NULL) {
if (debug) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_handle_create() failed: %s",
UNEXPECTED_ERROR("scf_handle_create() failed: %s",
scf_strerror(scf_error()));
}
return (ISC_R_FAILURE);
@ -1415,8 +1416,7 @@ named_smf_get_instance(char **ins_name, int debug, isc_mem_t *mctx) {
if (scf_handle_bind(h) == -1) {
if (debug) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_handle_bind() failed: %s",
UNEXPECTED_ERROR("scf_handle_bind() failed: %s",
scf_strerror(scf_error()));
}
scf_handle_destroy(h);
@ -1425,8 +1425,7 @@ named_smf_get_instance(char **ins_name, int debug, isc_mem_t *mctx) {
if ((namelen = scf_myname(h, NULL, 0)) == -1) {
if (debug) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_myname() failed: %s",
UNEXPECTED_ERROR("scf_myname() failed: %s",
scf_strerror(scf_error()));
}
scf_handle_destroy(h);
@ -1434,8 +1433,7 @@ named_smf_get_instance(char **ins_name, int debug, isc_mem_t *mctx) {
}
if ((instance = isc_mem_allocate(mctx, namelen + 1)) == NULL) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"named_smf_get_instance memory "
UNEXPECTED_ERROR("named_smf_get_instance memory "
"allocation failed: %s",
isc_result_totext(ISC_R_NOMEMORY));
scf_handle_destroy(h);
@ -1444,8 +1442,7 @@ named_smf_get_instance(char **ins_name, int debug, isc_mem_t *mctx) {
if (scf_myname(h, instance, namelen + 1) == -1) {
if (debug) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_myname() failed: %s",
UNEXPECTED_ERROR("scf_myname() failed: %s",
scf_strerror(scf_error()));
}
scf_handle_destroy(h);
@ -1552,8 +1549,7 @@ main(int argc, char *argv[]) {
result = named_smf_get_instance(&instance, 1, named_g_mctx);
if (result == ISC_R_SUCCESS && instance != NULL) {
if (smf_disable_instance(instance, 0) != 0) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"smf_disable_instance() "
UNEXPECTED_ERROR("smf_disable_instance() "
"failed for %s : %s",
instance,
scf_strerror(scf_error()));

View file

@ -4765,8 +4765,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
maps, AF_INET6, &dispatch6, &dscp6,
(ISC_LIST_PREV(view, link) == NULL)));
if (dispatch4 == NULL && dispatch6 == NULL) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"unable to obtain either an IPv4 or"
UNEXPECTED_ERROR("unable to obtain either an IPv4 or"
" an IPv6 dispatch");
result = ISC_R_UNEXPECTED;
goto cleanup;

View file

@ -133,7 +133,7 @@ beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
UNUSED(db);
UNUSED(callbacks);
fatal_error("current implementation should never call beginload()");
FATAL_ERROR("current implementation should never call beginload()");
/* Not reached */
return (ISC_R_SUCCESS);
@ -149,7 +149,7 @@ endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
UNUSED(db);
UNUSED(callbacks);
fatal_error("current implementation should never call endload()");
FATAL_ERROR("current implementation should never call endload()");
/* Not reached */
return (ISC_R_SUCCESS);
@ -163,7 +163,7 @@ dump(dns_db_t *db, dns_dbversion_t *version, const char *filename,
UNUSED(filename);
UNUSED(masterformat);
fatal_error("current implementation should never call dump()");
FATAL_ERROR("current implementation should never call dump()");
/* Not reached */
return (ISC_R_SUCCESS);

View file

@ -34,8 +34,6 @@
#include <dns/log.h>
#define fatal_error(...) isc_error_fatal(__FILE__, __LINE__, __VA_ARGS__)
#define log_error_r(fmt, ...) \
log_error(fmt ": %s", ##__VA_ARGS__, isc_result_totext(result))

View file

@ -157,7 +157,7 @@ syncptr_find_zone(sample_instance_t *inst, dns_rdata_t *rdata, dns_name_t *name,
break;
default:
fatal_error("unsupported address type 0x%x", rdata->type);
FATAL_ERROR("unsupported address type 0x%x", rdata->type);
break;
}

View file

@ -37,8 +37,7 @@ not, we call UNEXPECTED_ERROR(). E.g.
void foo() {
if (some_unix_thang() < 0) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"some_unix_thang() failed: %s",
UNEXPECTED_ERROR("some_unix_thang() failed: %s",
strerror(errno));
return (ISC_R_UNEXPECTED);
}

View file

@ -471,8 +471,7 @@ cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
if (taskmgr != NULL) {
result = isc_task_create(taskmgr, &cleaner->task, 0);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_task_create() failed: %s",
UNEXPECTED_ERROR("isc_task_create() failed: %s",
isc_result_totext(result));
result = ISC_R_UNEXPECTED;
goto cleanup_iterator;
@ -534,8 +533,7 @@ begin_cleaning(cache_cleaner_t *cleaner) {
* so there is nothing to be cleaned.
*/
if (result != ISC_R_NOMORE && cleaner->iterator != NULL) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"cache cleaner: "
UNEXPECTED_ERROR("cache cleaner: "
"dns_dbiterator_first() failed: %s",
isc_result_totext(result));
dns_dbiterator_destroy(&cleaner->iterator);
@ -674,10 +672,8 @@ incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
result = dns_dbiterator_current(cleaner->iterator, &node, NULL);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"cache cleaner: "
"dns_dbiterator_current() "
"failed: %s",
UNEXPECTED_ERROR("cache cleaner: "
"dns_dbiterator_current() failed: %s",
isc_result_totext(result));
end_cleaning(cleaner, event);
@ -703,8 +699,7 @@ incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
* keep trying to clean it, otherwise stop cleaning.
*/
if (result != ISC_R_NOMORE) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"cache cleaner: "
UNEXPECTED_ERROR("cache cleaner: "
"dns_dbiterator_next() "
"failed: %s",
isc_result_totext(result));
@ -779,8 +774,7 @@ dns_cache_clean(dns_cache_t *cache, isc_stdtime_t now) {
*/
result = dns_db_expirenode(cache->db, node, now);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"cache cleaner: dns_db_expirenode() "
UNEXPECTED_ERROR("cache cleaner: dns_db_expirenode() "
"failed: %s",
isc_result_totext(result));
/*

View file

@ -176,8 +176,7 @@ dns_diff_appendminimal(dns_diff_t *diff, dns_difftuple_t **tuplep) {
{
ISC_LIST_UNLINK(diff->tuples, ot, link);
if ((*tuplep)->op == ot->op) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"unexpected non-minimal diff");
UNEXPECTED_ERROR("unexpected non-minimal diff");
} else {
dns_difftuple_free(tuplep);
}

View file

@ -168,7 +168,7 @@ dns_db_createsoatuple(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
freenode:
dns_db_detachnode(db, &node);
nonode:
UNEXPECTED_ERROR(__FILE__, __LINE__, "missing SOA");
UNEXPECTED_ERROR("missing SOA");
return (result);
}

View file

@ -445,8 +445,7 @@ loadctx_destroy(dns_loadctx_t *lctx) {
if (lctx->f != NULL) {
isc_result_t result = isc_stdio_close(lctx->f);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_stdio_close() failed: %s",
UNEXPECTED_ERROR("isc_stdio_close() failed: %s",
isc_result_totext(result));
}
}
@ -1281,8 +1280,7 @@ load_text(dns_loadctx_t *lctx) {
}
dump_time = (isc_stdtime_t)dump_time64;
if (dump_time != dump_time64) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"%s: %s:%lu: $DATE "
UNEXPECTED_ERROR("%s: %s:%lu: $DATE "
"outside epoch",
"dns_master_load",
source, line);
@ -1290,8 +1288,7 @@ load_text(dns_loadctx_t *lctx) {
goto insist_and_cleanup;
}
if (dump_time > current_time) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"%s: %s:%lu: "
UNEXPECTED_ERROR("%s: %s:%lu: "
"$DATE in future, "
"using current date",
"dns_master_load",
@ -1570,8 +1567,7 @@ load_text(dns_loadctx_t *lctx) {
ictx->drop = false;
}
} else {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"%s:%lu: isc_lex_gettoken() returned "
UNEXPECTED_ERROR("%s:%lu: isc_lex_gettoken() returned "
"unexpected token type (%d)",
source, line, token.type);
result = ISC_R_UNEXPECTED;
@ -1663,8 +1659,7 @@ load_text(dns_loadctx_t *lctx) {
}
if (token.type != isc_tokentype_string) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_lex_gettoken() returned "
UNEXPECTED_ERROR("isc_lex_gettoken() returned "
"unexpected token type");
result = ISC_R_UNEXPECTED;
if (MANYERRS(lctx, result)) {
@ -1685,8 +1680,7 @@ load_text(dns_loadctx_t *lctx) {
}
if (token.type != isc_tokentype_string) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_lex_gettoken() returned "
UNEXPECTED_ERROR("isc_lex_gettoken() returned "
"unexpected token type");
result = ISC_R_UNEXPECTED;
if (MANYERRS(lctx, result)) {
@ -2273,8 +2267,7 @@ load_header(dns_loadctx_t *lctx) {
result = isc_stdio_read(data, 1, commonlen, lctx->f, NULL);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_stdio_read failed: %s",
UNEXPECTED_ERROR("isc_stdio_read failed: %s",
isc_result_totext(result));
return (result);
}
@ -2306,8 +2299,7 @@ load_header(dns_loadctx_t *lctx) {
result = isc_stdio_read(data + commonlen, 1, remainder, lctx->f, NULL);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_stdio_read failed: %s",
UNEXPECTED_ERROR("isc_stdio_read failed: %s",
isc_result_totext(result));
return (result);
}
@ -2332,8 +2324,7 @@ openfile_raw(dns_loadctx_t *lctx, const char *master_file) {
result = isc_stdio_open(master_file, "rb", &lctx->f);
if (result != ISC_R_SUCCESS && result != ISC_R_FILENOTFOUND) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_stdio_open() failed: %s",
UNEXPECTED_ERROR("isc_stdio_open() failed: %s",
isc_result_totext(result));
}

View file

@ -857,8 +857,7 @@ dns_rdataset_totext(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
isc_result_t result;
result = totext_ctx_init(&dns_master_style_debug, NULL, &ctx);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"could not set master file style");
UNEXPECTED_ERROR("could not set master file style");
return (ISC_R_UNEXPECTED);
}
@ -890,8 +889,7 @@ dns_master_rdatasettotext(const dns_name_t *owner_name,
isc_result_t result;
result = totext_ctx_init(style, indent, &ctx);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"could not set master file style");
UNEXPECTED_ERROR("could not set master file style");
return (ISC_R_UNEXPECTED);
}
@ -907,8 +905,7 @@ dns_master_questiontotext(const dns_name_t *owner_name,
isc_result_t result;
result = totext_ctx_init(style, NULL, &ctx);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"could not set master file style");
UNEXPECTED_ERROR("could not set master file style");
return (ISC_R_UNEXPECTED);
}
@ -983,8 +980,7 @@ dump_rdataset(isc_mem_t *mctx, const dns_name_t *name, dns_rdataset_t *rdataset,
result = isc_stdio_write(r.base, 1, (size_t)r.length, f, NULL);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"master file write failed: %s",
UNEXPECTED_ERROR("master file write failed: %s",
isc_result_totext(result));
return (result);
}
@ -1266,8 +1262,7 @@ restart:
result = isc_stdio_write(r.base, 1, (size_t)r.length, f, NULL);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"raw master file write failed: %s",
UNEXPECTED_ERROR("raw master file write failed: %s",
isc_result_totext(result));
return (result);
}
@ -1582,8 +1577,7 @@ dumpctx_create(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
result = totext_ctx_init(style, NULL, &dctx->tctx);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"could not set master file style");
UNEXPECTED_ERROR("could not set master file style");
goto cleanup;
}
@ -1973,8 +1967,7 @@ dns_master_dumpnodetostream(isc_mem_t *mctx, dns_db_t *db,
result = totext_ctx_init(style, NULL, &ctx);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"could not set master file style");
UNEXPECTED_ERROR("could not set master file style");
return (ISC_R_UNEXPECTED);
}

View file

@ -1058,8 +1058,7 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source,
}
break;
default:
FATAL_ERROR(__FILE__, __LINE__, "Unexpected state %d",
state);
FATAL_ERROR("Unexpected state %d", state);
/* Does not return. */
}
}
@ -1279,8 +1278,7 @@ dns_name_totext2(const dns_name_t *name, unsigned int options,
count--;
}
} else {
FATAL_ERROR(__FILE__, __LINE__,
"Unexpected label type %02x", count);
FATAL_ERROR("Unexpected label type %02x", count);
UNREACHABLE();
}
@ -1402,8 +1400,7 @@ dns_name_tofilenametext(const dns_name_t *name, bool omit_final_dot,
count--;
}
} else {
FATAL_ERROR(__FILE__, __LINE__,
"Unexpected label type %02x", count);
FATAL_ERROR("Unexpected label type %02x", count);
UNREACHABLE();
}
@ -1659,8 +1656,7 @@ dns_name_fromwire(dns_name_t *name, isc_buffer_t *source, dns_decompress_t dctx,
state = fw_start;
break;
default:
FATAL_ERROR(__FILE__, __LINE__, "Unknown state %d",
state);
FATAL_ERROR("Unknown state %d", state);
/* Does not return. */
}
}

View file

@ -4426,7 +4426,7 @@ zone_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
UNUSED(rdataset);
UNUSED(sigrdataset);
FATAL_ERROR(__FILE__, __LINE__, "zone_findzonecut() called!");
FATAL_ERROR("zone_findzonecut() called!");
UNREACHABLE();
return (ISC_R_NOTIMPLEMENTED);

View file

@ -4880,8 +4880,7 @@ fctx_create(dns_resolver_t *res, const dns_name_t *name, dns_rdatatype_t type,
if (!dns_name_issubdomain(fctx->name, fctx->domain)) {
dns_name_format(fctx->domain, buf, sizeof(buf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"'%s' is not subdomain of '%s'", fctx->info,
UNEXPECTED_ERROR("'%s' is not subdomain of '%s'", fctx->info,
buf);
result = ISC_R_UNEXPECTED;
goto cleanup_fcount;
@ -4897,8 +4896,7 @@ fctx_create(dns_resolver_t *res, const dns_name_t *name, dns_rdatatype_t type,
res->query_timeout % 1000 * 1000000);
iresult = isc_time_nowplusinterval(&fctx->expires, &interval);
if (iresult != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_time_nowplusinterval: %s",
UNEXPECTED_ERROR("isc_time_nowplusinterval: %s",
isc_result_totext(iresult));
result = ISC_R_UNEXPECTED;
goto cleanup_qmessage;
@ -4925,8 +4923,7 @@ fctx_create(dns_resolver_t *res, const dns_name_t *name, dns_rdatatype_t type,
iresult = isc_time_nowplusinterval(&fctx->expires_try_stale,
&interval);
if (iresult != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_time_nowplusinterval: %s",
UNEXPECTED_ERROR("isc_time_nowplusinterval: %s",
isc_result_totext(iresult));
result = ISC_R_UNEXPECTED;
goto cleanup_timer;

View file

@ -207,7 +207,7 @@ dns_rpz_type2str(dns_rpz_type_t type) {
case DNS_RPZ_TYPE_BAD:
break;
}
FATAL_ERROR(__FILE__, __LINE__, "impossible rpz type %d", type);
FATAL_ERROR("impossible rpz type %d", type);
return ("impossible");
}

View file

@ -138,8 +138,7 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, const char *name,
view->zonetable = NULL;
result = dns_zt_create(mctx, rdclass, &view->zonetable);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"dns_zt_create() failed: %s",
UNEXPECTED_ERROR("dns_zt_create() failed: %s",
isc_result_totext(result));
result = ISC_R_UNEXPECTED;
goto cleanup_mutex;
@ -147,8 +146,7 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, const char *name,
result = dns_fwdtable_create(mctx, &view->fwdtable);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"dns_fwdtable_create() failed: %s",
UNEXPECTED_ERROR("dns_fwdtable_create() failed: %s",
isc_result_totext(result));
result = ISC_R_UNEXPECTED;
goto cleanup_zt;

View file

@ -5240,8 +5240,7 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
break;
default:
UNEXPECTED_ERROR(__FILE__, __LINE__, "unexpected zone type %d",
zone->type);
UNEXPECTED_ERROR("unexpected zone type %d", zone->type);
result = ISC_R_UNEXPECTED;
goto cleanup;
}

View file

@ -26,7 +26,6 @@ isc__condition_waituntil(pthread_cond_t *c, pthread_mutex_t *m, isc_time_t *t) {
int presult;
isc_result_t result;
struct timespec ts;
char strbuf[ISC_STRERRORSIZE];
REQUIRE(c != NULL && m != NULL && t != NULL);
@ -61,8 +60,6 @@ isc__condition_waituntil(pthread_cond_t *c, pthread_mutex_t *m, isc_time_t *t) {
}
} while (presult == EINTR);
strerror_r(presult, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"pthread_cond_timedwait() returned %s", strbuf);
UNEXPECTED_SYSERROR(presult, "pthread_cond_timedwait()");
return (ISC_R_UNEXPECTED);
}

View file

@ -21,12 +21,12 @@
/*% Default unexpected callback. */
static void
default_unexpected_callback(const char *, int, const char *, va_list)
ISC_FORMAT_PRINTF(3, 0);
default_unexpected_callback(const char *, int, const char *, const char *,
va_list) ISC_FORMAT_PRINTF(4, 0);
/*% Default fatal callback. */
static void
default_fatal_callback(const char *, int, const char *, va_list)
default_fatal_callback(const char *, int, const char *, const char *, va_list)
ISC_FORMAT_PRINTF(3, 0);
/*% unexpected_callback */
@ -52,42 +52,39 @@ isc_error_setfatal(isc_errorcallback_t cb) {
}
void
isc_error_unexpected(const char *file, int line, const char *format, ...) {
isc_error_unexpected(const char *file, int line, const char *func,
const char *format, ...) {
va_list args;
va_start(args, format);
(unexpected_callback)(file, line, format, args);
(unexpected_callback)(file, line, func, format, args);
va_end(args);
}
void
isc_error_fatal(const char *file, int line, const char *format, ...) {
isc_error_fatal(const char *file, int line, const char *func,
const char *format, ...) {
va_list args;
va_start(args, format);
(fatal_callback)(file, line, format, args);
(fatal_callback)(file, line, func, format, args);
va_end(args);
abort();
}
void
isc_error_runtimecheck(const char *file, int line, const char *expression) {
isc_error_fatal(file, line, "RUNTIME_CHECK(%s) failed", expression);
}
static void
default_unexpected_callback(const char *file, int line, const char *format,
va_list args) {
fprintf(stderr, "%s:%d: ", file, line);
default_unexpected_callback(const char *file, int line, const char *func,
const char *format, va_list args) {
fprintf(stderr, "%s:%d:%s(): ", file, line, func);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
}
static void
default_fatal_callback(const char *file, int line, const char *format,
va_list args) {
fprintf(stderr, "%s:%d: fatal error: ", file, line);
default_fatal_callback(const char *file, int line, const char *func,
const char *format, va_list args) {
fprintf(stderr, "%s:%d:%s(): fatal error: ", file, line, func);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);

View file

@ -23,7 +23,8 @@
ISC_LANG_BEGINDECLS
typedef void (*isc_errorcallback_t)(const char *, int, const char *, va_list);
typedef void (*isc_errorcallback_t)(const char *, int, const char *,
const char *, va_list);
/*% set unexpected error */
void isc_error_setunexpected(isc_errorcallback_t);
@ -33,19 +34,12 @@ void isc_error_setfatal(isc_errorcallback_t);
/*% unexpected error */
void
isc_error_unexpected(const char *, int, const char *, ...)
ISC_FORMAT_PRINTF(3, 4);
isc_error_unexpected(const char *, int, const char *, const char *, ...)
ISC_FORMAT_PRINTF(4, 5);
/*% fatal error */
noreturn void
isc_error_fatal(const char *, int, const char *, ...) ISC_FORMAT_PRINTF(3, 4);
/*% runtimecheck error */
noreturn void
isc_error_runtimecheck(const char *, int, const char *);
#define ISC_ERROR_RUNTIMECHECK(cond) \
((void)((cond) || \
((isc_error_runtimecheck)(__FILE__, __LINE__, #cond), 0)))
isc_error_fatal(const char *, int, const char *, const char *, ...)
ISC_FORMAT_PRINTF(4, 5);
ISC_LANG_ENDDECLS

View file

@ -315,22 +315,36 @@ mock_assert(const int result, const char *const expression,
#include <isc/error.h> /* Contractual promise. */
#include <isc/strerr.h> /* for ISC_STRERRORSIZE */
/*% Unexpected Error */
#define UNEXPECTED_ERROR isc_error_unexpected
/*% Fatal Error */
#define FATAL_ERROR isc_error_fatal
#define UNEXPECTED_ERROR(...) \
isc_error_unexpected(__FILE__, __LINE__, __func__, __VA_ARGS__)
#define FATAL_ERROR(...) \
isc_error_fatal(__FILE__, __LINE__, __func__, __VA_ARGS__)
#define REPORT_SYSERROR(report, err, fmt, ...) \
{ \
char strerr[ISC_STRERRORSIZE]; \
strerror_r(err, strerr, sizeof(strerr)); \
report(__FILE__, __LINE__, __func__, fmt ": %s (%d)", \
##__VA_ARGS__, strerr, err); \
}
#define UNEXPECTED_SYSERROR(err, ...) \
REPORT_SYSERROR(isc_error_unexpected, err, __VA_ARGS__)
#define FATAL_SYSERROR(err, ...) \
REPORT_SYSERROR(isc_error_fatal, err, __VA_ARGS__)
#ifdef UNIT_TESTING
#define RUNTIME_CHECK(expression) \
((!(expression)) \
? (mock_assert(0, #expression, __FILE__, __LINE__), abort()) \
: (void)0)
#define RUNTIME_CHECK(cond) \
((cond) ? (void)0 \
: (mock_assert(0, #cond, __FILE__, __LINE__), abort()))
#else /* UNIT_TESTING */
/*% Runtime Check */
#define RUNTIME_CHECK(cond) ISC_ERROR_RUNTIMECHECK(cond)
#define RUNTIME_CHECK(cond) \
((cond) ? (void)0 : FATAL_ERROR("RUNTIME_CHECK(%s) failed", #cond))
#endif /* UNIT_TESTING */
@ -338,13 +352,9 @@ mock_assert(const int result, const char *const expression,
* Runtime check which logs the error value returned by a POSIX Threads
* function and the error string that corresponds to it
*/
#define PTHREADS_RUNTIME_CHECK(func, ret) \
if ((ret) != 0) { \
char _strerrorbuf[ISC_STRERRORSIZE]; \
strerror_r(ret, _strerrorbuf, sizeof(_strerrorbuf)); \
isc_error_fatal(__FILE__, __LINE__, \
"%s(): %s() failed with error %d (%s)", \
__func__, #func, ret, _strerrorbuf); \
#define PTHREADS_RUNTIME_CHECK(func, ret) \
if ((ret) != 0) { \
FATAL_SYSERROR(ret, "%s()", #func); \
}
/*%

View file

@ -46,10 +46,9 @@
* These are used with all versions of libuv:
*/
#define UV_RUNTIME_CHECK(func, ret) \
if (ret != 0) { \
isc_error_fatal(__FILE__, __LINE__, "%s failed: %s\n", #func, \
uv_strerror(ret)); \
#define UV_RUNTIME_CHECK(func, ret) \
if (ret != 0) { \
FATAL_ERROR("%s failed: %s\n", #func, uv_strerror(ret)); \
}
#define isc_uverr2result(x) \

View file

@ -202,8 +202,7 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
if (getifaddrs(&iter->ifaddrs) < 0) {
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"getting interface addresses: getifaddrs: %s",
UNEXPECTED_ERROR("getting interface addresses: getifaddrs: %s",
strbuf);
result = ISC_R_UNEXPECTED;
goto failure;

View file

@ -902,8 +902,7 @@ isc_lex_gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *tokenp) {
remaining--;
break;
default:
FATAL_ERROR(__FILE__, __LINE__, "Unexpected state %d",
state);
FATAL_ERROR("Unexpected state %d", state);
}
} while (!done);

View file

@ -45,14 +45,10 @@
static void
ignore_signal(int sig, void (*handler)(int)) {
struct sigaction sa;
struct sigaction sa = { .sa_handler = handler };
sa = (struct sigaction){ .sa_handler = handler };
if (sigfillset(&sa.sa_mask) != 0 || sigaction(sig, &sa, NULL) < 0) {
char strbuf[ISC_STRERRORSIZE];
strerror_r(errno, strbuf, sizeof(strbuf));
isc_error_fatal(__FILE__, __LINE__, "%s() %d setup: %s",
__func__, sig, strbuf);
FATAL_SYSERROR(errno, "ignore_signal(%d)", sig);
}
}

View file

@ -1249,10 +1249,7 @@ isc__mempool_destroy(isc_mempool_t **restrict mpctxp FLARG) {
#endif
if (mpctx->allocated > 0) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_mempool_destroy(): mempool %s "
"leaked memory",
mpctx->name);
UNEXPECTED_ERROR("mempool %s leaked memory", mpctx->name);
}
REQUIRE(mpctx->allocated == 0);

View file

@ -122,7 +122,6 @@ static isc_result_t
try_proto(int domain) {
int s;
isc_result_t result = ISC_R_SUCCESS;
char strbuf[ISC_STRERRORSIZE];
s = socket(domain, SOCK_STREAM, 0);
if (s == -1) {
@ -141,9 +140,7 @@ try_proto(int domain) {
#endif /* ifdef EINVAL */
return (ISC_R_NOTFOUND);
default:
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"socket() failed: %s", strbuf);
UNEXPECTED_SYSERROR(errno, "socket()");
return (ISC_R_UNEXPECTED);
}
}
@ -223,7 +220,6 @@ static void
try_ipv6only(void) {
#ifdef IPV6_V6ONLY
int s, on;
char strbuf[ISC_STRERRORSIZE];
#endif /* ifdef IPV6_V6ONLY */
isc_result_t result;
@ -240,9 +236,7 @@ try_ipv6only(void) {
/* check for TCP sockets */
s = socket(PF_INET6, SOCK_STREAM, 0);
if (s == -1) {
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__, "socket() failed: %s",
strbuf);
UNEXPECTED_SYSERROR(errno, "socket()");
ipv6only_result = ISC_R_UNEXPECTED;
return;
}
@ -258,9 +252,7 @@ try_ipv6only(void) {
/* check for UDP sockets */
s = socket(PF_INET6, SOCK_DGRAM, 0);
if (s == -1) {
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__, "socket() failed: %s",
strbuf);
UNEXPECTED_SYSERROR(errno, "socket()");
ipv6only_result = ISC_R_UNEXPECTED;
return;
}
@ -288,7 +280,6 @@ initialize_ipv6only(void) {
static void
try_ipv6pktinfo(void) {
int s, on;
char strbuf[ISC_STRERRORSIZE];
isc_result_t result;
int optname;
@ -301,9 +292,7 @@ try_ipv6pktinfo(void) {
/* we only use this for UDP sockets */
s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
if (s == -1) {
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__, "socket() failed: %s",
strbuf);
UNEXPECTED_SYSERROR(errno, "socket()");
ipv6pktinfo_result = ISC_R_UNEXPECTED;
return;
}
@ -409,11 +398,10 @@ static isc_result_t
make_nonblock(int fd) {
int ret;
int flags;
char strbuf[ISC_STRERRORSIZE];
#ifdef USE_FIONBIO_IOCTL
int on = 1;
ret = ioctl(fd, FIONBIO, (char *)&on);
#ifdef USE_FIONBIO_IOCTL
flags = 1;
ret = ioctl(fd, FIONBIO, (char *)&flags);
#else /* ifdef USE_FIONBIO_IOCTL */
flags = fcntl(fd, F_GETFL, 0);
flags |= O_NONBLOCK;
@ -421,15 +409,11 @@ make_nonblock(int fd) {
#endif /* ifdef USE_FIONBIO_IOCTL */
if (ret == -1) {
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
#ifdef USE_FIONBIO_IOCTL
"ioctl(%d, FIONBIO, &on): %s", fd,
#else /* ifdef USE_FIONBIO_IOCTL */
"fcntl(%d, F_SETFL, %d): %s", fd, flags,
#endif /* ifdef USE_FIONBIO_IOCTL */
strbuf);
UNEXPECTED_SYSERROR(errno, "ioctl(%d, FIONBIO, &on)", fd);
#else
UNEXPECTED_SYSERROR(errno, "fcntl(%d, F_SETFL, %d)", fd, flags);
#endif
return (ISC_R_UNEXPECTED);
}
@ -508,8 +492,6 @@ cmsgsend(int s, int level, int type, struct addrinfo *res) {
}
if (sendmsg(s, &msg, 0) < 0) {
int debug = ISC_LOG_DEBUG(10);
const char *typestr;
switch (errno) {
#ifdef ENOPROTOOPT
case ENOPROTOOPT:
@ -519,21 +501,17 @@ cmsgsend(int s, int level, int type, struct addrinfo *res) {
#endif /* ifdef EOPNOTSUPP */
case EINVAL:
case EPERM:
break;
default:
debug = ISC_LOG_NOTICE;
}
strerror_r(errno, strbuf, sizeof(strbuf));
if (debug != ISC_LOG_NOTICE) {
strerror_r(errno, strbuf, sizeof(strbuf));
isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
ISC_LOGMODULE_SOCKET, ISC_LOG_DEBUG(10),
"sendmsg: %s", strbuf);
} else {
typestr = (type == IP_TOS) ? "IP_TOS" : "IPV6_TCLASS";
UNEXPECTED_ERROR(__FILE__, __LINE__,
"probing "
"sendmsg() with %s=%02x failed: %s",
typestr, dscp, strbuf);
break;
default:
UNEXPECTED_SYSERROR(
errno, "probing sendmsg() with %s=%02x failed",
(type == IP_TOS) ? "IP_TOS" : "IPV6_TCLASS",
dscp);
break;
}
return (false);
}
@ -593,7 +571,6 @@ try_dscp_v4(void) {
}
s = socket(res0->ai_family, res0->ai_socktype, res0->ai_protocol);
if (s == -1) {
strerror_r(errno, strbuf, sizeof(strbuf));
isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,

View file

@ -198,11 +198,10 @@ isc_netmgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr, isc_nm_t **netmgrp) {
isc_nm_t *netmgr = NULL;
if (uv_version() < MINIMAL_UV_VERSION) {
isc_error_fatal(__FILE__, __LINE__,
"libuv version too old: running with libuv %s "
"when compiled with libuv %s will lead to "
"libuv failures because of unknown flags",
uv_version_string(), UV_VERSION_STRING);
FATAL_ERROR("libuv version too old: running with libuv %s "
"when compiled with libuv %s will lead to "
"libuv failures because of unknown flags",
uv_version_string(), UV_VERSION_STRING);
}
netmgr = isc_mem_get(mctx, sizeof(*netmgr));

View file

@ -224,8 +224,7 @@ isc___rwlock_init(isc__rwlock_t *rwl, unsigned int read_quota,
rwl->readers_waiting = 0;
atomic_init(&rwl->write_granted, 0);
if (read_quota != 0) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"read quota is not supported");
UNEXPECTED_ERROR("read quota is not supported");
}
if (write_quota == 0) {
write_quota = RWLOCK_DEFAULT_WRITE_QUOTA;

View file

@ -234,8 +234,7 @@ isc_sockaddr_hash(const isc_sockaddr_t *sockaddr, bool address_only) {
p = ntohs(sockaddr->type.sin6.sin6_port);
break;
default:
UNEXPECTED_ERROR(__FILE__, __LINE__,
"unknown address family: %d",
UNEXPECTED_ERROR("unknown address family: %d",
(int)sockaddr->type.sa.sa_family);
s = (const unsigned char *)&sockaddr->type;
length = sockaddr->length;
@ -341,7 +340,7 @@ isc_sockaddr_pf(const isc_sockaddr_t *sockaddr) {
case AF_INET6:
return (PF_INET6);
default:
FATAL_ERROR(__FILE__, __LINE__, "unknown address family: %d",
FATAL_ERROR("unknown address family: %d",
(int)sockaddr->type.sa.sa_family);
}
#endif /* if (AF_INET == PF_INET && AF_INET6 == PF_INET6) */
@ -380,7 +379,7 @@ isc_sockaddr_setport(isc_sockaddr_t *sockaddr, in_port_t port) {
sockaddr->type.sin6.sin6_port = htons(port);
break;
default:
FATAL_ERROR(__FILE__, __LINE__, "unknown address family: %d",
FATAL_ERROR("unknown address family: %d",
(int)sockaddr->type.sa.sa_family);
}
}
@ -397,7 +396,7 @@ isc_sockaddr_getport(const isc_sockaddr_t *sockaddr) {
port = ntohs(sockaddr->type.sin6.sin6_port);
break;
default:
FATAL_ERROR(__FILE__, __LINE__, "unknown address family: %d",
FATAL_ERROR("unknown address family: %d",
(int)sockaddr->type.sa.sa_family);
}

View file

@ -41,10 +41,7 @@ isc_stdtime_get(isc_stdtime_t *t) {
struct timespec ts;
if (clock_gettime(CLOCKSOURCE, &ts) == -1) {
char strbuf[ISC_STRERRORSIZE];
strerror_r(errno, strbuf, sizeof(strbuf));
isc_error_fatal(__FILE__, __LINE__, "clock_gettime failed: %s",
strbuf);
FATAL_SYSERROR(errno, "clock_gettime()");
}
REQUIRE(ts.tv_sec > 0 && ts.tv_nsec >= 0 && ts.tv_nsec < NS_PER_S);

View file

@ -92,9 +92,7 @@ time_now(isc_time_t *t, clockid_t clock) {
REQUIRE(t != NULL);
if (clock_gettime(clock, &ts) == -1) {
char strbuf[ISC_STRERRORSIZE];
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strbuf);
UNEXPECTED_SYSERROR(errno, "clock_gettime()");
return (ISC_R_UNEXPECTED);
}
@ -136,9 +134,7 @@ isc_time_nowplusinterval(isc_time_t *t, const isc_interval_t *i) {
INSIST(i->nanoseconds < NS_PER_S);
if (clock_gettime(CLOCKSOURCE, &ts) == -1) {
char strbuf[ISC_STRERRORSIZE];
strerror_r(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strbuf);
UNEXPECTED_SYSERROR(errno, "clock_gettime()");
return (ISC_R_UNEXPECTED);
}

View file

@ -209,8 +209,7 @@ isc__tls_initialize(void) {
/* Protect ourselves against unseeded PRNG */
if (RAND_status() != 1) {
FATAL_ERROR(__FILE__, __LINE__,
"OpenSSL pseudorandom number generator "
FATAL_ERROR("OpenSSL pseudorandom number generator "
"cannot be initialized (see the `PRNG not "
"seeded' message in the OpenSSL FAQ)");
}

View file

@ -1319,8 +1319,7 @@ do_scan(ns_interfacemgr_t *mgr, bool verbose, bool config) {
continue;
}
if (result != ISC_R_NOMORE) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"interface iteration failed: %s",
UNEXPECTED_ERROR("interface iteration failed: %s",
isc_result_totext(result));
} else {
result = ((tried_listening && all_addresses_in_use)

View file

@ -173,10 +173,9 @@ ns_sortlist_byaddrsetup(dns_acl_t *sortlist_acl, dns_aclenv_t *env,
*orderp = NULL;
break;
default:
UNEXPECTED_ERROR(__FILE__, __LINE__,
"unexpected return from ns_sortlist_setup(): "
"%d",
sortlisttype);
UNEXPECTED_ERROR(
"unexpected return from ns_sortlist_setup(): %d",
sortlisttype);
break;
}
}

View file

@ -2745,10 +2745,9 @@ update_action(isc_task_t *task, isc_event_t *event) {
/* "temp<rr.name, rr.type> += rr;" */
result = temp_append(&temp, name, &rdata);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"temp entry creation failed: "
"%s",
isc_result_totext(result));
UNEXPECTED_ERROR(
"temp entry creation failed: %s",
isc_result_totext(result));
FAIL(ISC_R_UNEXPECTED);
}
} else {