From 72d81c4768a4731a1dd6a7c50a29286193105980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= Date: Tue, 12 Mar 2019 13:20:11 +0100 Subject: [PATCH] Remove few lines in unix socket handling Reuse the same checks two times, make difference minimal. --- lib/isc/unix/socket.c | 43 +++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index ff1f147871..3972c4dd86 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -4242,22 +4242,33 @@ isc_socket_cleanunix(const isc_sockaddr_t *sockaddr, bool active) { #define S_ISSOCK(mode) 0 #endif /* ifndef S_ISSOCK */ - if (active) { - if (stat(sockaddr->type.sunix.sun_path, &sb) < 0) { + if (stat(sockaddr->type.sunix.sun_path, &sb) < 0) { + switch (errno) { + case ENOENT: + if (active) /* We exited cleanly last time */ + break; + /* intentional falltrough */ + default: strerror_r(errno, strbuf, sizeof(strbuf)); isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, ISC_LOG_ERROR, + ISC_LOGMODULE_SOCKET, + active ? ISC_LOG_ERROR : ISC_LOG_WARNING, "isc_socket_cleanunix: stat(%s): %s", sockaddr->type.sunix.sun_path, strbuf); return; } + } else { if (!(S_ISSOCK(sb.st_mode) || S_ISFIFO(sb.st_mode))) { isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, ISC_LOG_ERROR, + ISC_LOGMODULE_SOCKET, + active ? ISC_LOG_ERROR : ISC_LOG_WARNING, "isc_socket_cleanunix: %s: not a socket", sockaddr->type.sunix.sun_path); return; } + } + + if (active) { if (unlink(sockaddr->type.sunix.sun_path) < 0) { strerror_r(errno, strbuf, sizeof(strbuf)); isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, @@ -4278,29 +4289,6 @@ isc_socket_cleanunix(const isc_sockaddr_t *sockaddr, bool active) { return; } - if (stat(sockaddr->type.sunix.sun_path, &sb) < 0) { - switch (errno) { - case ENOENT: /* We exited cleanly last time */ - break; - default: - strerror_r(errno, strbuf, sizeof(strbuf)); - isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, ISC_LOG_WARNING, - "isc_socket_cleanunix: stat(%s): %s", - sockaddr->type.sunix.sun_path, strbuf); - break; - } - goto cleanup; - } - - if (!(S_ISSOCK(sb.st_mode) || S_ISFIFO(sb.st_mode))) { - isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, ISC_LOG_WARNING, - "isc_socket_cleanunix: %s: not a socket", - sockaddr->type.sunix.sun_path); - goto cleanup; - } - if (connect(s, (const struct sockaddr *)&sockaddr->type.sunix, sizeof(sockaddr->type.sunix)) < 0) { @@ -4326,7 +4314,6 @@ isc_socket_cleanunix(const isc_sockaddr_t *sockaddr, bool active) { break; } } -cleanup: close(s); #else /* ifndef _WIN32 */ UNUSED(sockaddr); -- GitLab