* 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>
#include <isc/file.h>
#include <isc/print.h>
#include <isc/result.h>
+#include <isc/strerror.h>
#include <isc/string.h>
#include <named/main.h>
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;
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
#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)
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);
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
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;
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;
"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();
FILE *lockfile;
size_t len;
pid_t pid;
+ char strbuf[ISC_STRERRORSIZE];
/*
* The caller must ensure any required synchronization.
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
* 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>
#include <isc/condition.h>
#include <isc/msgs.h>
+#include <isc/strerror.h>
#include <isc/string.h>
#include <isc/time.h>
#include <isc/util.h>
int presult;
isc_result_t result;
struct timespec ts;
+ char strbuf[ISC_STRERRORSIZE];
REQUIRE(c != NULL && m != NULL && t != NULL);
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);
}
* 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>
#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>
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);
}
isc_result_t result;
int presult;
sigset_t sset;
+ char strbuf[ISC_STRERRORSIZE];
/*
* Start an ISC library application.
*/
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
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 */
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 */
isc_task_t *task;
#ifdef ISC_PLATFORM_USETHREADS
sigset_t sset;
+ char strbuf[ISC_STRERRORSIZE];
#endif /* ISC_PLATFORM_USETHREADS */
#ifdef HAVE_SIGWAIT
int sig;
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);
}
* 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);
isc_result_t
isc_app_shutdown(void) {
isc_boolean_t want_kill = ISC_TRUE;
+ char strbuf[ISC_STRERRORSIZE];
LOCK(&lock);
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
isc_result_t
isc_app_reload(void) {
isc_boolean_t want_kill = ISC_TRUE;
+ char strbuf[ISC_STRERRORSIZE];
LOCK(&lock);
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
RUNTIME_CHECK(pthread_sigmask(SIG_BLOCK, &sset, NULL) == 0);
#endif /* ISC_PLATFORM_USETHREADS */
}
-
* 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.
#include <unistd.h>
#include <isc/platform.h>
+#include <isc/strerror.h>
#ifdef ISC_PLATFORM_NEEDSYSSELECTH
#include <sys/select.h>
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);
}
* 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.
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);
* 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;
}
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;
}
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);
* 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);
}
*/
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,
*/
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,
* 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.
isc_result_t result;
size_t bufsize;
size_t bufused;
+ char strbuf[ISC_STRERRORSIZE];
+
REQUIRE(mctx != NULL);
REQUIRE(iterp != NULL);
REQUIRE(*iterp == NULL);
*/
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;
}
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;
}
* 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
ISC_LANG_BEGINDECLS
+#define ISC_STRERRORSIZE 128
+
/*
* Provide a thread safe wrapper to strerrror().
* 'buf' is always returned.
* 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>
#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>
* 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>
#include <isc/msgs.h>
#include <isc/net.h>
#include <isc/once.h>
+#include <isc/strerror.h>
#include <isc/string.h>
#include <isc/util.h>
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) {
#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);
}
}
* 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>
#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>
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;
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));
}
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) {
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;
}
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);
}
#else
char *cmsg = NULL;
#endif
+ char strbuf[ISC_STRERRORSIZE];
build_msghdr_recv(sock, dev, &msghdr, cmsg, iov, &read_count);
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) { \
#endif
int attempts = 0;
int send_errno;
+ char strbuf[ISC_STRERRORSIZE];
build_msghdr_send(sock, dev, &msghdr, cmsg, iov, &write_count);
* 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);
}
#if defined(USE_CMSG) || defined(SO_BSDCOMPAT)
int on = 1;
#endif
+ char strbuf[ISC_STRERRORSIZE];
REQUIRE(VALID_MANAGER(manager));
REQUIRE(socketp != NULL && *socketp == NULL);
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);
}
}
#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
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,
ISC_MSGSET_GENERAL,
ISC_MSG_FAILED,
"failed"),
- strerror(errno));
+ strbuf);
/* Press on... */
}
#endif /* SO_TIMESTAMP */
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,
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,
ISC_MSGSET_GENERAL,
ISC_MSG_FAILED,
"failed"),
- strerror(errno));
+ strbuf);
}
#endif /* IPV6_RECVPKTINFO */
#ifdef IPV6_USE_MIN_MTU /*2292bis, not too common yet*/
ISC_SOCKADDR_LEN_T addrlen;
int fd;
isc_result_t result = ISC_R_SUCCESS;
+ char strbuf[ISC_STRERRORSIZE];
UNUSED(me);
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;
}
fd_set writefds;
int msg, fd;
int maxfd;
+ char strbuf[ISC_STRERRORSIZE];
/*
* Get the control fd here. This will never change.
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);
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);
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);
}
isc_result_t
isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) {
+ char strbuf[ISC_STRERRORSIZE];
int on = 1;
LOCK(&sock->lock);
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);
}
}
*/
isc_result_t
isc_socket_listen(isc_socket_t *sock, unsigned int backlog) {
+ char strbuf[ISC_STRERRORSIZE];
+
REQUIRE(VALID_SOCKET(sock));
LOCK(&sock->lock);
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);
}
isc_task_t *ntask = NULL;
isc_socketmgr_t *manager;
int cc;
+ char strbuf[ISC_STRERRORSIZE];
REQUIRE(VALID_SOCKET(sock));
REQUIRE(addr != NULL);
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);
isc_task_t *task;
int cc;
ISC_SOCKADDR_LEN_T optlen;
+ char strbuf[ISC_STRERRORSIZE];
UNUSED(me);
INSIST(ev->ev_type == ISC_SOCKEVENT_INTW);
#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;
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);
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;
}
* 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>
#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>
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);
}
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);
}