From 245b8e671e7335aa2ac0c89ef5b0e1595486fb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Thu, 15 Mar 2018 22:05:42 +0000 Subject: [PATCH] Fix ctl_connect() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adrien Gallouët --- src/ctl.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/ctl.c b/src/ctl.c index 7352f32..0437461 100644 --- a/src/ctl.c +++ b/src/ctl.c @@ -133,13 +133,15 @@ ctl_create(const char *dir, const char *file) int ctl_connect(const char *dir, const char *file) { + DIR *dp = NULL; + if (str_empty(dir)) { errno = EINVAL; return -1; } if (!file) { - DIR *dp = opendir(dir); + dp = opendir(dir); if (!dp) return -1; @@ -151,20 +153,30 @@ ctl_connect(const char *dir, const char *file) continue; if (file) { - closedir(dp); - errno = ENOENT; - return -1; + file = NULL; + break; } file = &d->d_name[0]; } - closedir(dp); + if (!file) { + closedir(dp); + errno = ENOENT; + return -1; + } } struct sockaddr_un sun; + const int ret = ctl_setsun(&sun, dir, file); - if (ctl_setsun(&sun, dir, file)) + if (dp) { + int err = errno; + closedir(dp); + errno = err; + } + + if (ret) return -1; int fd = ctl_create(dir, NULL);