err,logging,safeio: use strerror_r()
authorMarko Kreen <markokr@gmail.com>
Wed, 2 Sep 2009 14:28:48 +0000 (17:28 +0300)
committerMarko Kreen <markokr@gmail.com>
Wed, 2 Sep 2009 16:16:23 +0000 (19:16 +0300)
usual/err.c
usual/logging.c
usual/safeio.c

index eb15068a2139c2efa61d98d287ff7fb5cbcbaa6d..e1f2fb5587ce1fb9c9679cbbabb0a75693c9b4d1 100644 (file)
 #ifndef HAVE_ERR
 void err(int e, const char *fmt, ...)
 {
-       const char *serr = strerror(errno);
-       char buf[1024];
+       char buf[1024], ebuf[256];
        va_list ap;
        va_start(ap, fmt);
        vsnprintf(buf, sizeof(buf), fmt, ap);
        va_end(ap);
-       errx(e, "%s: %s", buf, serr);
+       errx(e, "%s: %s", buf, strerror_r(e, ebuf, sizeof(ebuf)));
 }
 #endif
 
@@ -51,13 +50,12 @@ void errx(int e, const char *fmt, ...)
 #ifndef HAVE_WARN
 void warn(const char *fmt, ...)
 {
-       const char *serr = strerror(errno);
-       char buf[1024];
+       char buf[1024], ebuf[256];
        va_list ap;
        va_start(ap, fmt);
        vsnprintf(buf, sizeof(buf), fmt, ap);
        va_end(ap);
-       warnx("%s: %s", buf, serr);
+       warnx("%s: %s", buf, strerror_r(e, ebuf, sizeof(ebuf)));
 }
 #endif
 
index 40ae5bd052975fda4fcfa12e227a5d661327a42e..1983f2622398249b6956d3cd071fc870c2634199 100644 (file)
@@ -92,6 +92,7 @@ static void start_syslog(void)
 void log_generic(enum LogLevel level, const char *fmt, ...)
 {
        char buf[2048];
+       char ebuf[256];
        char timebuf[64];
        const struct LevelInfo *lev = &log_level_list[level];
        unsigned pid = getpid();
@@ -112,7 +113,8 @@ void log_generic(enum LogLevel level, const char *fmt, ...)
                } else if (!cf_quiet && !error_reported) {
                        /* Unable to open, complain once */
                        fprintf(stderr, "%s %u %s %s: %s\n", timebuf, pid,
-                               log_level_list[2].tag, cf_logfile, strerror(errno));
+                               log_level_list[2].tag, cf_logfile,
+                               strerror_r(errno, ebuf, sizeof(ebuf)));
                        error_reported = 1;
                }
        }
@@ -133,14 +135,14 @@ void log_generic(enum LogLevel level, const char *fmt, ...)
 
 void log_fatal(const char *file, int line, const char *func, bool show_perror, const char *fmt, ...)
 {
-       char buf[2048];
+       char buf[2048], ebuf[256];
        const char *estr = NULL;
        int old_errno = 0;
        va_list ap;
 
        if (show_perror) {
                old_errno = errno;
-               estr = strerror(errno);
+               estr = strerror_r(errno, ebuf, sizeof(ebuf));
        }
 
        va_start(ap, fmt);
index bc8d73b94c52eaaa9147686a9ab5db5c5af3a0e8..18e7a0eacadf5286974203888b4c92e146134c35 100644 (file)
@@ -49,12 +49,14 @@ loop:
 int safe_recv(int fd, void *buf, int len, int flags)
 {
        int res;
+       char ebuf[128];
 loop:
        res = recv(fd, buf, len, flags);
        if (res < 0 && errno == EINTR)
                goto loop;
        if (res < 0)
-               log_noise("safe_recv(%d, %d) = %s", fd, len, strerror(errno));
+               log_noise("safe_recv(%d, %d) = %s", fd, len,
+                         strerror_r(errno, ebuf, sizeof(ebuf)));
        else if (cf_verbose > 2)
                log_noise("safe_recv(%d, %d) = %d", fd, len, res);
        return res;
@@ -63,12 +65,14 @@ loop:
 int safe_send(int fd, const void *buf, int len, int flags)
 {
        int res;
+       char ebuf[128];
 loop:
        res = send(fd, buf, len, flags);
        if (res < 0 && errno == EINTR)
                goto loop;
        if (res < 0)
-               log_noise("safe_send(%d, %d) = %s", fd, len, strerror(errno));
+               log_noise("safe_send(%d, %d) = %s", fd, len,
+                         strerror_r(errno, ebuf, sizeof(ebuf)));
        else if (cf_verbose > 2)
                log_noise("safe_send(%d, %d) = %d", fd, len, res);
        return res;
@@ -95,12 +99,14 @@ loop:
 int safe_recvmsg(int fd, struct msghdr *msg, int flags)
 {
        int res;
+       char ebuf[128];
 loop:
        res = recvmsg(fd, msg, flags);
        if (res < 0 && errno == EINTR)
                goto loop;
        if (res < 0)
-               log_warning("safe_recvmsg(%d, msg, %d) = %s", fd, flags, strerror(errno));
+               log_warning("safe_recvmsg(%d, msg, %d) = %s", fd, flags,
+                           strerror_r(errno, ebuf, sizeof(ebuf)));
        else if (cf_verbose > 2)
                log_noise("safe_recvmsg(%d, msg, %d) = %d", fd, flags, res);
        return res;
@@ -110,6 +116,7 @@ int safe_sendmsg(int fd, const struct msghdr *msg, int flags)
 {
        int res;
        int msgerr_count = 0;
+       char ebuf[128];
 loop:
        res = sendmsg(fd, msg, flags);
        if (res < 0 && errno == EINTR)
@@ -119,7 +126,7 @@ loop:
                log_warning("safe_sendmsg(%d, msg[%d,%d], %d) = %s", fd,
                            (int)msg->msg_iov[0].iov_len,
                            (int)msg->msg_controllen,
-                           flags, strerror(errno));
+                           flags, strerror_r(errno, ebuf, sizeof(ebuf)));
 
                /* with ancillary data on blocking socket OSX returns
                 * EMSGSIZE instead of blocking.  try to solve it by waiting */
@@ -139,12 +146,15 @@ int safe_connect(int fd, const struct sockaddr *sa, socklen_t sa_len)
 {
        int res;
        char buf[128];
+       char ebuf[128];
 loop:
        res = connect(fd, sa, sa_len);
        if (res < 0 && errno == EINTR)
                goto loop;
        if (res < 0 && (errno != EINPROGRESS || cf_verbose > 2))
-               log_noise("connect(%d, %s) = %s", fd, sa2str(sa, buf, sizeof(buf)), strerror(errno));
+               log_noise("connect(%d, %s) = %s", fd,
+                         sa2str(sa, buf, sizeof(buf)),
+                         strerror_r(errno, ebuf, sizeof(ebuf)));
        else if (cf_verbose > 2)
                log_noise("connect(%d, %s) = %d", fd, sa2str(sa, buf, sizeof(buf)), res);
        return res;
@@ -154,12 +164,14 @@ int safe_accept(int fd, struct sockaddr *sa, socklen_t *sa_len_p)
 {
        int res;
        char buf[128];
+       char ebuf[128];
 loop:
        res = accept(fd, sa, sa_len_p);
        if (res < 0 && errno == EINTR)
                goto loop;
        if (res < 0)
-               log_noise("safe_accept(%d) = %s", fd, strerror(errno));
+               log_noise("safe_accept(%d) = %s", fd,
+                         strerror_r(errno, ebuf, sizeof(ebuf)));
        else if (cf_verbose > 2)
                log_noise("safe_accept(%d) = %d (%s)", fd, res, sa2str(sa, buf, sizeof(buf)));
        return res;