From: Mark Andrews Date: Fri, 31 Aug 2001 05:57:58 +0000 (+0000) Subject: strerror() -> isc__strerror() [RT #1689] X-Git-Tag: v9.2.2rc1^3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b87939256ede703385e9cab92d3c58d03c31098;p=thirdparty%2Fbind9.git strerror() -> isc__strerror() [RT #1689] --- diff --git a/bin/named/unix/os.c b/bin/named/unix/os.c index da1874f5e26..f470fa7f26f 100644 --- a/bin/named/unix/os.c +++ b/bin/named/unix/os.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: os.c,v 1.46 2001/08/29 18:03:36 gson Exp $ */ +/* $Id: os.c,v 1.47 2001/08/31 05:57:45 marka Exp $ */ #include #include @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -133,6 +134,7 @@ static void linux_setcaps(unsigned int caps) { struct __user_cap_header_struct caphead; struct __user_cap_data_struct cap; + char strbuf[ISC_STRERRORSIZE]; if ((getuid() != 0 && !non_root_caps) || non_root) return; @@ -144,8 +146,10 @@ linux_setcaps(unsigned int caps) { cap.effective = caps; cap.permitted = caps; cap.inheritable = caps; - if (syscall(SYS_capset, &caphead, &cap) < 0) - ns_main_earlyfatal("capset failed: %s", strerror(errno)); + if (syscall(SYS_capset, &caphead, &cap) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("capset failed: %s", strbuf); + } } static void @@ -233,15 +237,17 @@ linux_minprivs(void) { #ifdef HAVE_SYS_PRCTL_H static void linux_keepcaps(void) { + char strbuf[ISC_STRERRORSIZE]; /* * Ask the kernel to allow us to keep our capabilities after we * setuid(). */ if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) { - if (errno != EINVAL) - ns_main_earlyfatal("prctl() failed: %s", - strerror(errno)); + if (errno != EINVAL) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("prctl() failed: %s", strbuf); + } } else { non_root_caps = ISC_TRUE; if (getuid() != 0) @@ -280,10 +286,13 @@ void ns_os_daemonize(void) { pid_t pid; int fd; + char strbuf[ISC_STRERRORSIZE]; pid = fork(); - if (pid == -1) - ns_main_earlyfatal("fork(): %s", strerror(errno)); + if (pid == -1) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("fork(): %s", strbuf); + } if (pid != 0) _exit(0); @@ -295,8 +304,10 @@ ns_os_daemonize(void) { mainpid = getpid(); #endif - if (setsid() == -1) - ns_main_earlyfatal("setsid(): %s", strerror(errno)); + if (setsid() == -1) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("setsid(): %s", strbuf); + } /* * Try to set stdin, stdout, and stderr to /dev/null, but press @@ -337,16 +348,22 @@ all_digits(const char *s) { void ns_os_chroot(const char *root) { + char strbuf[ISC_STRERRORSIZE]; if (root != NULL) { - if (chroot(root) < 0) - ns_main_earlyfatal("chroot(): %s", strerror(errno)); - if (chdir("/") < 0) - ns_main_earlyfatal("chdir(/): %s", strerror(errno)); + if (chroot(root) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("chroot(): %s", strbuf); + } + if (chdir("/") < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("chdir(/): %s", strbuf); + } } } void ns_os_inituserinfo(const char *username) { + char strbuf[ISC_STRERRORSIZE]; if (username == NULL) return; @@ -360,14 +377,17 @@ ns_os_inituserinfo(const char *username) { ns_main_earlyfatal("user '%s' unknown", username); if (getuid() == 0) { - if (initgroups(runas_pw->pw_name, runas_pw->pw_gid) < 0) - ns_main_earlyfatal("initgroups(): %s", strerror(errno)); + if (initgroups(runas_pw->pw_name, runas_pw->pw_gid) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("initgroups(): %s", strbuf); + } } } void ns_os_changeuser(void) { + char strbuf[ISC_STRERRORSIZE]; if (runas_pw == NULL || done_setuid) return; @@ -382,11 +402,15 @@ ns_os_changeuser(void) { "2.3.99-pre3 or 2.2.18 when using threads"); #endif - if (setgid(runas_pw->pw_gid) < 0) - ns_main_earlyfatal("setgid(): %s", strerror(errno)); + if (setgid(runas_pw->pw_gid) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("setgid(): %s", strbuf); + } - if (setuid(runas_pw->pw_uid) < 0) - ns_main_earlyfatal("setuid(): %s", strerror(errno)); + if (setuid(runas_pw->pw_uid) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlyfatal("setuid(): %s", strbuf); + } #if defined(HAVE_LINUX_CAPABILITY_H) && !defined(HAVE_LINUXTHREADS) linux_minprivs(); @@ -447,6 +471,7 @@ ns_os_writepidfile(const char *filename) { FILE *lockfile; size_t len; pid_t pid; + char strbuf[ISC_STRERRORSIZE]; /* * The caller must ensure any required synchronization. @@ -456,20 +481,26 @@ ns_os_writepidfile(const char *filename) { len = strlen(filename); pidfile = malloc(len + 1); - if (pidfile == NULL) + if (pidfile == NULL) { + isc__strerror(errno, strbuf, sizeof(strbuf)); ns_main_earlyfatal("couldn't malloc '%s': %s", - filename, strerror(errno)); + filename, strbuf); + } /* This is safe. */ strcpy(pidfile, filename); fd = safe_open(filename, ISC_FALSE); - if (fd < 0) + if (fd < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); ns_main_earlyfatal("couldn't open pid file '%s': %s", - filename, strerror(errno)); + filename, strbuf); + } lockfile = fdopen(fd, "w"); - if (lockfile == NULL) + if (lockfile == NULL) { + isc__strerror(errno, strbuf, sizeof(strbuf)); ns_main_earlyfatal("could not fdopen() pid file '%s': %s", - filename, strerror(errno)); + filename, strbuf); + } #ifdef HAVE_LINUXTHREADS pid = mainpid; #else diff --git a/lib/isc/pthreads/condition.c b/lib/isc/pthreads/condition.c index fb3bdffe68a..2f6eb0d4729 100644 --- a/lib/isc/pthreads/condition.c +++ b/lib/isc/pthreads/condition.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: condition.c,v 1.30 2001/01/23 02:27:19 bwelling Exp $ */ +/* $Id: condition.c,v 1.31 2001/08/31 05:57:46 marka Exp $ */ #include @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -32,6 +33,7 @@ isc_condition_waituntil(isc_condition_t *c, isc_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); @@ -60,10 +62,11 @@ isc_condition_waituntil(isc_condition_t *c, isc_mutex_t *m, isc_time_t *t) { return (ISC_R_TIMEDOUT); } while (presult == EINTR); + isc__strerror(presult, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "pthread_cond_timedwait() %s %s", isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_RETURNED, "returned"), - strerror(presult)); + strbuf); return (ISC_R_UNEXPECTED); } diff --git a/lib/isc/unix/app.c b/lib/isc/unix/app.c index a9f7359bb13..f7bb18d41a5 100644 --- a/lib/isc/unix/app.c +++ b/lib/isc/unix/app.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: app.c,v 1.43 2001/07/09 21:05:57 gson Exp $ */ +/* $Id: app.c,v 1.44 2001/08/31 05:57:47 marka Exp $ */ #include @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -97,17 +98,19 @@ reload_action(int arg) { static isc_result_t handle_signal(int sig, void (*handler)(int)) { struct sigaction sa; + char strbuf[ISC_STRERRORSIZE]; memset(&sa, 0, sizeof sa); sa.sa_handler = handler; if (sigfillset(&sa.sa_mask) != 0 || sigaction(sig, &sa, NULL) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_APP, ISC_MSG_SIGNALSETUP, "handle_signal() %d setup: %s"), - sig, strerror(errno)); + sig, strbuf); return (ISC_R_UNEXPECTED); } @@ -119,6 +122,7 @@ isc_app_start(void) { isc_result_t result; int presult; sigset_t sset; + char strbuf[ISC_STRERRORSIZE]; /* * Start an ISC library application. @@ -130,9 +134,9 @@ isc_app_start(void) { */ presult = pthread_init(); if (presult != 0) { + isc__strerror(presult, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_start() pthread_init: %s", - strerror(presult)); + "isc_app_start() pthread_init: %s", strbuf); return (ISC_R_UNEXPECTED); } #endif @@ -204,16 +208,17 @@ isc_app_start(void) { sigaddset(&sset, SIGHUP) != 0 || sigaddset(&sset, SIGINT) != 0 || sigaddset(&sset, SIGTERM) != 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_start() sigsetops: %s", - strerror(errno)); + "isc_app_start() sigsetops: %s", strbuf); return (ISC_R_UNEXPECTED); } presult = pthread_sigmask(SIG_BLOCK, &sset, NULL); if (presult != 0) { + isc__strerror(presult, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "isc_app_start() pthread_sigmask: %s", - strerror(presult)); + strbuf); return (ISC_R_UNEXPECTED); } #else /* ISC_PLATFORM_USETHREADS */ @@ -228,16 +233,16 @@ isc_app_start(void) { sigaddset(&sset, SIGHUP) != 0 || sigaddset(&sset, SIGINT) != 0 || sigaddset(&sset, SIGTERM) != 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_start() sigsetops: %s", - strerror(errno)); + "isc_app_start() sigsetops: %s", strbuf); return (ISC_R_UNEXPECTED); } presult = sigprocmask(SIG_UNBLOCK, &sset, NULL); if (presult != 0) { + isc__strerror(presult, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_start() sigprocmask: %s", - strerror(presult)); + "isc_app_start() sigprocmask: %s", strbuf); return (ISC_R_UNEXPECTED); } #endif /* ISC_PLATFORM_USETHREADS */ @@ -405,6 +410,7 @@ isc_app_run(void) { isc_task_t *task; #ifdef ISC_PLATFORM_USETHREADS sigset_t sset; + char strbuf[ISC_STRERRORSIZE]; #endif /* ISC_PLATFORM_USETHREADS */ #ifdef HAVE_SIGWAIT int sig; @@ -464,9 +470,9 @@ isc_app_run(void) { sigaddset(&sset, SIGHUP) != 0 || sigaddset(&sset, SIGINT) != 0 || sigaddset(&sset, SIGTERM) != 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_run() sigsetops: %s", - strerror(errno)); + "isc_app_run() sigsetops: %s", strbuf); return (ISC_R_UNEXPECTED); } @@ -496,9 +502,9 @@ isc_app_run(void) { * Listen for all signals. */ if (sigemptyset(&sset) != 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_run() sigsetops: %s", - strerror(errno)); + "isc_app_run() sigsetops: %s", strbuf); return (ISC_R_UNEXPECTED); } result = sigsuspend(&sset); @@ -532,6 +538,7 @@ isc_app_run(void) { isc_result_t isc_app_shutdown(void) { isc_boolean_t want_kill = ISC_TRUE; + char strbuf[ISC_STRERRORSIZE]; LOCK(&lock); @@ -550,16 +557,17 @@ isc_app_shutdown(void) { result = pthread_kill(main_thread, SIGTERM); if (result != 0) { + isc__strerror(result, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "isc_app_shutdown() pthread_kill: %s", - strerror(result)); + strbuf); return (ISC_R_UNEXPECTED); } #else if (kill(getpid(), SIGTERM) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_shutdown() kill: %s", - strerror(errno)); + "isc_app_shutdown() kill: %s", strbuf); return (ISC_R_UNEXPECTED); } #endif @@ -571,6 +579,7 @@ isc_app_shutdown(void) { isc_result_t isc_app_reload(void) { isc_boolean_t want_kill = ISC_TRUE; + char strbuf[ISC_STRERRORSIZE]; LOCK(&lock); @@ -590,16 +599,17 @@ isc_app_reload(void) { result = pthread_kill(main_thread, SIGHUP); if (result != 0) { + isc__strerror(result, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "isc_app_reload() pthread_kill: %s", - strerror(result)); + strbuf); return (ISC_R_UNEXPECTED); } #else if (kill(getpid(), SIGHUP) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_app_reload() kill: %s", - strerror(errno)); + "isc_app_reload() kill: %s", strbuf); return (ISC_R_UNEXPECTED); } #endif @@ -651,4 +661,3 @@ isc_app_unblock(void) { RUNTIME_CHECK(pthread_sigmask(SIG_BLOCK, &sset, NULL) == 0); #endif /* ISC_PLATFORM_USETHREADS */ } - diff --git a/lib/isc/unix/entropy.c b/lib/isc/unix/entropy.c index c1c48b0bfe9..912392d25a8 100644 --- a/lib/isc/unix/entropy.c +++ b/lib/isc/unix/entropy.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: entropy.c,v 1.60 2001/07/18 01:31:13 gson Exp $ */ +/* $Id: entropy.c,v 1.61 2001/08/31 05:57:49 marka Exp $ */ /* * This is the system depenedent part of the ISC entropy API. @@ -29,6 +29,7 @@ #include #include +#include #ifdef ISC_PLATFORM_NEEDSYSSELECTH #include @@ -267,15 +268,17 @@ static isc_result_t make_nonblock(int fd) { int ret; int flags; + char strbuf[ISC_STRERRORSIZE]; flags = fcntl(fd, F_GETFL, 0); flags |= O_NONBLOCK; ret = fcntl(fd, F_SETFL, flags); if (ret == -1) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "fcntl(%d, F_SETFL, %d): %s", - fd, flags, strerror(errno)); + fd, flags, strbuf); return (ISC_R_UNEXPECTED); } diff --git a/lib/isc/unix/ifiter_ioctl.c b/lib/isc/unix/ifiter_ioctl.c index 33bfabca77d..2e235a6eeac 100644 --- a/lib/isc/unix/ifiter_ioctl.c +++ b/lib/isc/unix/ifiter_ioctl.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: ifiter_ioctl.c,v 1.19 2001/07/09 21:05:58 gson Exp $ */ +/* $Id: ifiter_ioctl.c,v 1.20 2001/08/31 05:57:50 marka Exp $ */ /* * Obtain the list of network interfaces using the SIOCGLIFCONF ioctl. @@ -73,6 +73,7 @@ isc_result_t isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { isc_interfaceiter_t *iter; isc_result_t result; + char strbuf[ISC_STRERRORSIZE]; REQUIRE(mctx != NULL); REQUIRE(iterp != NULL); @@ -89,13 +90,14 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { * Create an unbound datagram socket to do the SIOCGLIFADDR ioctl on. */ if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_IFITERIOCTL, ISC_MSG_MAKESCANSOCKET, "making interface " "scan socket: %s"), - strerror(errno)); + strbuf); result = ISC_R_UNEXPECTED; goto socket_failure; } @@ -130,13 +132,14 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { if (ioctl(iter->socket, SIOCGLIFCONF, (char *)&iter->ifc) == -1) { if (errno != EINVAL) { + isc__strerror(errno, strbuf, sizeof(strbuf))); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_IFITERIOCTL, ISC_MSG_GETIFCONFIG, "get interface " "configuration: %s"), - strerror(errno)); + strbuf); result = ISC_R_UNEXPECTED; goto ioctl_failure; } @@ -209,6 +212,7 @@ internal_current(isc_interfaceiter_t *iter) { struct lifreq *ifrp; struct lifreq lifreq; int family; + char strbuf[ISC_STRERRORSIZE]; REQUIRE(VALID_IFITER(iter)); REQUIRE (iter->pos < (unsigned int) iter->ifc.lifc_len); @@ -244,10 +248,10 @@ internal_current(isc_interfaceiter_t *iter) { * and is really hard to shut up. */ if (ioctl(iter->socket, SIOCGLIFFLAGS, (char *) &lifreq) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "%s: getting interface flags: %s", - lifreq.lifr_name, - strerror(errno)); + lifreq.lifr_name, strbuf); return (ISC_R_IGNORE); } @@ -271,14 +275,14 @@ internal_current(isc_interfaceiter_t *iter) { */ if (ioctl(iter->socket, SIOCGLIFDSTADDR, (char *)&lifreq) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_IFITERIOCTL, ISC_MSG_GETDESTADDR, "%s: getting " "destination address: %s"), - lifreq.lifr_name, - strerror(errno)); + lifreq.lifr_name, strbuf); return (ISC_R_IGNORE); } get_addr(family, &iter->current.dstaddress, @@ -299,13 +303,13 @@ internal_current(isc_interfaceiter_t *iter) { */ if (ioctl(iter->socket, SIOCGLIFNETMASK, (char *)&lifreq) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_IFITERIOCTL, ISC_MSG_GETNETMASK, "%s: getting netmask: %s"), - lifreq.lifr_name, - strerror(errno)); + lifreq.lifr_name, strbuf); return (ISC_R_IGNORE); } get_addr(family, &iter->current.netmask, diff --git a/lib/isc/unix/ifiter_sysctl.c b/lib/isc/unix/ifiter_sysctl.c index 67ee66cfc2a..6c2e4f06329 100644 --- a/lib/isc/unix/ifiter_sysctl.c +++ b/lib/isc/unix/ifiter_sysctl.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: ifiter_sysctl.c,v 1.14 2001/06/04 19:33:34 tale Exp $ */ +/* $Id: ifiter_sysctl.c,v 1.15 2001/08/31 05:57:51 marka Exp $ */ /* * Obtain the list of network interfaces using sysctl. @@ -69,6 +69,8 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { isc_result_t result; size_t bufsize; size_t bufused; + char strbuf[ISC_STRERRORSIZE]; + REQUIRE(mctx != NULL); REQUIRE(iterp != NULL); REQUIRE(*iterp == NULL); @@ -85,13 +87,14 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { */ bufsize = 0; if (sysctl(mib, 6, NULL, &bufsize, NULL, (size_t) 0) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_IFITERSYSCTL, ISC_MSG_GETIFLISTSIZE, "getting interface " "list size: sysctl: %s"), - strerror(errno)); + strbuf); result = ISC_R_UNEXPECTED; goto failure; } @@ -105,13 +108,14 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { bufused = bufsize; if (sysctl(mib, 6, iter->buf, &bufused, NULL, (size_t) 0) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_IFITERSYSCTL, ISC_MSG_GETIFLIST, "getting interface list: " "sysctl: %s"), - strerror(errno)); + strbuf); result = ISC_R_UNEXPECTED; goto failure; } diff --git a/lib/isc/unix/include/isc/strerror.h b/lib/isc/unix/include/isc/strerror.h index 50e290171b2..0471adb5393 100644 --- a/lib/isc/unix/include/isc/strerror.h +++ b/lib/isc/unix/include/isc/strerror.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: strerror.h,v 1.1 2001/08/30 04:33:19 marka Exp $ */ +/* $Id: strerror.h,v 1.2 2001/08/31 05:57:58 marka Exp $ */ #ifndef ISC_STRERROR_H #define ISC_STRERROR_H @@ -26,6 +26,8 @@ ISC_LANG_BEGINDECLS +#define ISC_STRERRORSIZE 128 + /* * Provide a thread safe wrapper to strerrror(). * 'buf' is always returned. diff --git a/lib/isc/unix/interfaceiter.c b/lib/isc/unix/interfaceiter.c index 0e3fe92ddee..8ec32ac5519 100644 --- a/lib/isc/unix/interfaceiter.c +++ b/lib/isc/unix/interfaceiter.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: interfaceiter.c,v 1.22 2001/06/05 06:34:11 bwelling Exp $ */ +/* $Id: interfaceiter.c,v 1.23 2001/08/31 05:57:53 marka Exp $ */ #include @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include diff --git a/lib/isc/unix/net.c b/lib/isc/unix/net.c index 6de3143ccfa..6dafc5c602d 100644 --- a/lib/isc/unix/net.c +++ b/lib/isc/unix/net.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: net.c,v 1.22 2001/07/09 21:05:59 gson Exp $ */ +/* $Id: net.c,v 1.23 2001/08/31 05:57:54 marka Exp $ */ #include @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -42,6 +43,7 @@ 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) { @@ -57,13 +59,14 @@ try_proto(int domain) { #endif return (ISC_R_NOTFOUND); default: + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "socket() %s: %s", isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); return (ISC_R_UNEXPECTED); } } diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 81c1d739808..01fe38ff5e1 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: socket.c,v 1.207 2001/08/16 07:27:48 marka Exp $ */ +/* $Id: socket.c,v 1.208 2001/08/31 05:57:55 marka Exp $ */ #include @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -372,6 +373,7 @@ static void select_poke(isc_socketmgr_t *mgr, int fd, int msg) { int cc; int buf[2]; + char strbuf[ISC_STRERRORSIZE]; buf[0] = fd; buf[1] = msg; @@ -380,13 +382,15 @@ select_poke(isc_socketmgr_t *mgr, int fd, int msg) { cc = write(mgr->pipe_fds[1], buf, sizeof(buf)); } while (cc < 0 && SOFT_ERROR(errno)); - if (cc < 0) + if (cc < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); FATAL_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_SOCKET, ISC_MSG_WRITEFAILED, "write() failed " "during watcher poke: %s"), - strerror(errno)); + strbuf); + } INSIST(cc == sizeof(buf)); } @@ -398,6 +402,7 @@ static void select_readmsg(isc_socketmgr_t *mgr, int *fd, int *msg) { int buf[2]; int cc; + char strbuf[ISC_STRERRORSIZE]; cc = read(mgr->pipe_fds[0], buf, sizeof(buf)); if (cc < 0) { @@ -405,12 +410,13 @@ select_readmsg(isc_socketmgr_t *mgr, int *fd, int *msg) { if (SOFT_ERROR(errno)) return; + isc__strerror(errno, strbuf, sizeof(strbuf)); FATAL_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, ISC_MSGSET_SOCKET, ISC_MSG_READFAILED, "read() failed " "during watcher poke: %s"), - strerror(errno)); + strbuf); return; } @@ -440,15 +446,17 @@ static isc_result_t make_nonblock(int fd) { int ret; int flags; + char strbuf[ISC_STRERRORSIZE]; flags = fcntl(fd, F_GETFL, 0); flags |= O_NONBLOCK; ret = fcntl(fd, F_SETFL, flags); if (ret == -1) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "fcntl(%d, F_SETFL, %d): %s", - fd, flags, strerror(errno)); + fd, flags, strbuf); return (ISC_R_UNEXPECTED); } @@ -879,6 +887,7 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) { #else char *cmsg = NULL; #endif + char strbuf[ISC_STRERRORSIZE]; build_msghdr_recv(sock, dev, &msghdr, cmsg, iov, &read_count); @@ -894,12 +903,12 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) { return (DOIO_SOFT); if (isc_log_wouldlog(isc_lctx, IOEVENT_LEVEL)) + isc__strerror(recv_errno, strbuf, sizeof(strbuf)); socket_log(sock, NULL, IOEVENT, isc_msgcat, ISC_MSGSET_SOCKET, ISC_MSG_DOIORECV, "doio_recv: recvmsg(%d) %d bytes, err %d/%s", - sock->fd, cc, recv_errno, - strerror(recv_errno)); + sock->fd, cc, recv_errno, strbuf); #define SOFT_OR_HARD(_system, _isc) \ if (recv_errno == _system) { \ @@ -1025,6 +1034,7 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) { #endif int attempts = 0; int send_errno; + char strbuf[ISC_STRERRORSIZE]; build_msghdr_send(sock, dev, &msghdr, cmsg, iov, &write_count); @@ -1082,9 +1092,9 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) { * a status. */ isc_sockaddr_format(&dev->address, addrbuf, sizeof(addrbuf)); - UNEXPECTED_ERROR(__FILE__, __LINE__, - "internal_send: %s: %s", - addrbuf, strerror(send_errno)); + isc__strerror(send_errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, "internal_send: %s: %s", + addrbuf, strbuf); dev->result = isc__errno2result(send_errno); return (DOIO_HARD); } @@ -1272,6 +1282,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, #if defined(USE_CMSG) || defined(SO_BSDCOMPAT) int on = 1; #endif + char strbuf[ISC_STRERRORSIZE]; REQUIRE(VALID_MANAGER(manager)); REQUIRE(socketp != NULL && *socketp == NULL); @@ -1323,13 +1334,14 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, return (ISC_R_FAMILYNOSUPPORT); default: + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "socket() %s: %s", isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); return (ISC_R_UNEXPECTED); } } @@ -1342,12 +1354,13 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, #ifdef SO_BSDCOMPAT if (setsockopt(sock->fd, SOL_SOCKET, SO_BSDCOMPAT, (void *)&on, sizeof on) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "setsockopt(%d, SO_BSDCOMPAT) %s: %s", sock->fd, isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); /* Press on... */ } #endif @@ -1359,6 +1372,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, if (setsockopt(sock->fd, SOL_SOCKET, SO_TIMESTAMP, (void *)&on, sizeof on) < 0 && errno != ENOPROTOOPT) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "setsockopt(%d, SO_TIMESTAMP) %s: %s", sock->fd, @@ -1366,7 +1380,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); /* Press on... */ } #endif /* SO_TIMESTAMP */ @@ -1377,6 +1391,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, if ((pf == AF_INET6) && (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, (void *)&on, sizeof (on)) < 0)) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "setsockopt(%d, IPV6_RECVPKTINFO) " "%s: %s", sock->fd, @@ -1384,13 +1399,14 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); } #else /* 2292 */ if ((pf == AF_INET6) && (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_PKTINFO, (void *)&on, sizeof (on)) < 0)) { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "setsockopt(%d, IPV6_PKTINFO) %s: %s", sock->fd, @@ -1398,7 +1414,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); } #endif /* IPV6_RECVPKTINFO */ #ifdef IPV6_USE_MIN_MTU /*2292bis, not too common yet*/ @@ -1658,6 +1674,7 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { ISC_SOCKADDR_LEN_T addrlen; int fd; isc_result_t result = ISC_R_SUCCESS; + char strbuf[ISC_STRERRORSIZE]; UNUSED(me); @@ -1710,13 +1727,14 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { if (SOFT_ERROR(errno) || errno == ECONNRESET) { goto soft_error; } else { + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "internal_accept: accept() %s: %s", isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); fd = -1; result = ISC_R_UNEXPECTED; } @@ -2033,6 +2051,7 @@ watcher(void *uap) { fd_set writefds; int msg, fd; int maxfd; + char strbuf[ISC_STRERRORSIZE]; /* * Get the control fd here. This will never change. @@ -2051,14 +2070,17 @@ watcher(void *uap) { cc = select(maxfd, &readfds, &writefds, NULL, NULL); if (cc < 0) { - if (!SOFT_ERROR(errno)) + if (!SOFT_ERROR(errno)) { + isc__strerror(errno, strbuf, + sizeof(strbuf)); FATAL_ERROR(__FILE__, __LINE__, "select() %s: %s", isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); + } } LOCK(&manager->lock); @@ -2125,6 +2147,9 @@ watcher(void *uap) { isc_result_t isc_socketmgr_create(isc_mem_t *mctx, isc_socketmgr_t **managerp) { isc_socketmgr_t *manager; +#ifdef ISC_PLATFORM_USETHREADS + char strbuf[ISC_STRERRORSIZE]; +#endif REQUIRE(managerp != NULL && *managerp == NULL); @@ -2170,11 +2195,12 @@ isc_socketmgr_create(isc_mem_t *mctx, isc_socketmgr_t **managerp) { if (pipe(manager->pipe_fds) != 0) { DESTROYLOCK(&manager->lock); isc_mem_put(mctx, manager, sizeof *manager); + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "pipe() %s: %s", isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_FAILED, "failed"), - strerror(errno)); + strbuf); return (ISC_R_UNEXPECTED); } @@ -2690,6 +2716,7 @@ isc_socket_sendto2(isc_socket_t *sock, isc_region_t *region, isc_result_t isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) { + char strbuf[ISC_STRERRORSIZE]; int on = 1; LOCK(&sock->lock); @@ -2720,8 +2747,9 @@ isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) { case EINVAL: return (ISC_R_BOUND); default: - UNEXPECTED_ERROR(__FILE__, __LINE__, - "bind: %s", strerror(errno)); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, "bind: %s", + strbuf); return (ISC_R_UNEXPECTED); } } @@ -2746,6 +2774,8 @@ isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) { */ isc_result_t isc_socket_listen(isc_socket_t *sock, unsigned int backlog) { + char strbuf[ISC_STRERRORSIZE]; + REQUIRE(VALID_SOCKET(sock)); LOCK(&sock->lock); @@ -2759,8 +2789,9 @@ isc_socket_listen(isc_socket_t *sock, unsigned int backlog) { if (listen(sock->fd, (int)backlog) < 0) { UNLOCK(&sock->lock); - UNEXPECTED_ERROR(__FILE__, __LINE__, "listen: %s", - strerror(errno)); + isc__strerror(errno, strbuf, sizeof(strbuf)); + + UNEXPECTED_ERROR(__FILE__, __LINE__, "listen: %s", strbuf); return (ISC_R_UNEXPECTED); } @@ -2848,6 +2879,7 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr, isc_task_t *ntask = NULL; isc_socketmgr_t *manager; int cc; + char strbuf[ISC_STRERRORSIZE]; REQUIRE(VALID_SOCKET(sock)); REQUIRE(addr != NULL); @@ -2904,8 +2936,8 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr, sock->connected = 0; - UNEXPECTED_ERROR(__FILE__, __LINE__, "%d/%s", - errno, strerror(errno)); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, "%d/%s", errno, strbuf); UNLOCK(&sock->lock); isc_event_free((isc_event_t **)&dev); @@ -2967,6 +2999,7 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { isc_task_t *task; int cc; ISC_SOCKADDR_LEN_T optlen; + char strbuf[ISC_STRERRORSIZE]; UNUSED(me); INSIST(ev->ev_type == ISC_SOCKEVENT_INTW); @@ -3046,9 +3079,10 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { #undef ERROR_MATCH default: dev->result = ISC_R_UNEXPECTED; + isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "internal_connect: connect() %s", - strerror(errno)); + strbuf); } } else { dev->result = ISC_R_SUCCESS; @@ -3090,6 +3124,7 @@ isc_result_t isc_socket_getsockname(isc_socket_t *sock, isc_sockaddr_t *addressp) { ISC_SOCKADDR_LEN_T len; isc_result_t ret; + char strbuf[ISC_STRERRORSIZE]; REQUIRE(VALID_SOCKET(sock)); REQUIRE(addressp != NULL); @@ -3105,8 +3140,9 @@ isc_socket_getsockname(isc_socket_t *sock, isc_sockaddr_t *addressp) { len = sizeof addressp->type; if (getsockname(sock->fd, &addressp->type.sa, (void *)&len) < 0) { - UNEXPECTED_ERROR(__FILE__, __LINE__, - "getsockname: %s", strerror(errno)); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, "getsockname: %s", + strbuf); ret = ISC_R_UNEXPECTED; goto out; } diff --git a/lib/isc/unix/time.c b/lib/isc/unix/time.c index 4b0cb9275be..b7fc32ce56f 100644 --- a/lib/isc/unix/time.c +++ b/lib/isc/unix/time.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: time.c,v 1.35 2001/08/31 04:47:59 marka Exp $ */ +/* $Id: time.c,v 1.36 2001/08/31 05:57:57 marka Exp $ */ #include @@ -27,6 +27,7 @@ #include /* Required for struct timeval on some platforms. */ #include +#include #include #include #include @@ -141,11 +142,13 @@ isc_time_isepoch(isc_time_t *t) { isc_result_t isc_time_now(isc_time_t *t) { struct timeval tv; + char strbuf[ISC_STRERRORSIZE]; REQUIRE(t != NULL); if (gettimeofday(&tv, NULL) == -1) { - UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strerror(errno)); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strbuf); return (ISC_R_UNEXPECTED); } @@ -181,13 +184,15 @@ isc_time_now(isc_time_t *t) { isc_result_t isc_time_nowplusinterval(isc_time_t *t, isc_interval_t *i) { struct timeval tv; + char strbuf[ISC_STRERRORSIZE]; REQUIRE(t != NULL); REQUIRE(i != NULL); INSIST(i->nanoseconds < NS_PER_S); if (gettimeofday(&tv, NULL) == -1) { - UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strerror(errno)); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strbuf); return (ISC_R_UNEXPECTED); }