]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
strerror() -> isc__strerror() [RT #1689]
authorMark Andrews <marka@isc.org>
Fri, 31 Aug 2001 05:57:58 +0000 (05:57 +0000)
committerMark Andrews <marka@isc.org>
Fri, 31 Aug 2001 05:57:58 +0000 (05:57 +0000)
bin/named/unix/os.c
lib/isc/pthreads/condition.c
lib/isc/unix/app.c
lib/isc/unix/entropy.c
lib/isc/unix/ifiter_ioctl.c
lib/isc/unix/ifiter_sysctl.c
lib/isc/unix/include/isc/strerror.h
lib/isc/unix/interfaceiter.c
lib/isc/unix/net.c
lib/isc/unix/socket.c
lib/isc/unix/time.c

index da1874f5e26b79637dee1cef9cbf96cdf1231cf2..f470fa7f26fcfa97e26256f889086cadf1d73af8 100644 (file)
@@ -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 <config.h>
 #include <stdarg.h>
@@ -36,6 +36,7 @@
 #include <isc/file.h>
 #include <isc/print.h>
 #include <isc/result.h>
+#include <isc/strerror.h>
 #include <isc/string.h>
 
 #include <named/main.h>
@@ -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
index fb3bdffe68a93e8f900310e3d11f58d351952e56..2f6eb0d472964b56bda95bde936c57b9c7d8d869 100644 (file)
@@ -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 <config.h>
 
@@ -23,6 +23,7 @@
 
 #include <isc/condition.h>
 #include <isc/msgs.h>
+#include <isc/strerror.h>
 #include <isc/string.h>
 #include <isc/time.h>
 #include <isc/util.h>
@@ -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);
 }
index a9f7359bb13c53eb1c8c5968b4d913efb28c7fab..f7bb18d41a5d8f7bc97171229c1b0444442569ca 100644 (file)
@@ -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 <config.h>
 
@@ -35,6 +35,7 @@
 #include <isc/mutex.h>
 #include <isc/event.h>
 #include <isc/platform.h>
+#include <isc/strerror.h>
 #include <isc/string.h>
 #include <isc/task.h>
 #include <isc/time.h>
@@ -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 */
 }
-
index c1c48b0bfe95656976e0d6f7990d0122422eb2d5..912392d25a8c4da559df90c6e0323729ccb38de4 100644 (file)
@@ -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 <unistd.h>
 
 #include <isc/platform.h>
+#include <isc/strerror.h>
 
 #ifdef ISC_PLATFORM_NEEDSYSSELECTH
 #include <sys/select.h>
@@ -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);
        }
index 33bfabca77d9605ad70c065e54905fa7ffd54206..2e235a6eeac6b9bd1a9cb439a7cfff0f0aa4abb8 100644 (file)
@@ -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,
index 67ee66cfc2ab336fef3d872254c5c782911985b1..6c2e4f06329db56bdde2ff3edc99bed802ad0de2 100644 (file)
@@ -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;
        }
index 50e290171b208f656491ac9623aa778d13161e15..0471adb53938d5e481ef45a8ee447e83a573ad95 100644 (file)
@@ -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.
index 0e3fe92ddee19b8c120621d23234f090dd78b8b2..8ec32ac55199f4312afd56c7cba18d041abd7ffe 100644 (file)
@@ -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 <config.h>
 
@@ -35,6 +35,7 @@
 #include <isc/msgs.h>
 #include <isc/net.h>
 #include <isc/result.h>
+#include <isc/strerror.h>
 #include <isc/string.h>
 #include <isc/types.h>
 #include <isc/interfaceiter.h>
index 6de3143ccfa3e9a151ab29399bc5a2a46770bead..6dafc5c602d33a2f777da679e432a19e5a30013a 100644 (file)
@@ -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 <config.h>
 
@@ -26,6 +26,7 @@
 #include <isc/msgs.h>
 #include <isc/net.h>
 #include <isc/once.h>
+#include <isc/strerror.h>
 #include <isc/string.h>
 #include <isc/util.h>
 
@@ -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);
                }
        }
index 81c1d7398080b8a297f1eb8604e2575a53f52a2a..01fe38ff5e175d7125233cdf9a15e1179e08574f 100644 (file)
@@ -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 <config.h>
 
@@ -46,6 +46,7 @@
 #include <isc/print.h>
 #include <isc/region.h>
 #include <isc/socket.h>
+#include <isc/strerror.h>
 #include <isc/task.h>
 #include <isc/thread.h>
 #include <isc/util.h>
@@ -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;
        }
index 4b0cb9275be23690f6570d3875ad46403f8652d7..b7fc32ce56f0002cc64d9887bd53ccfff7ab52f8 100644 (file)
@@ -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 <config.h>
 
@@ -27,6 +27,7 @@
 #include <sys/time.h>  /* Required for struct timeval on some platforms. */
 
 #include <isc/log.h>
+#include <isc/strerror.h>
 #include <isc/string.h>
 #include <isc/time.h>
 #include <isc/util.h>
@@ -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);
        }