From 064d124e19806b1074581cc0dd58c00f2315cc31 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 25 Feb 2021 17:38:46 +0100 Subject: [PATCH] Refactor, add new helper fn paste() to concat directory compoents Signed-off-by: Joachim Wiberg --- plugins/pidfile.c | 6 +++--- src/conf.c | 2 +- src/exec.c | 6 +++--- src/helpers.h | 11 +++++++++++ src/pid.h | 2 +- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/plugins/pidfile.c b/plugins/pidfile.c index c7f20458..19a4b907 100644 --- a/plugins/pidfile.c +++ b/plugins/pidfile.c @@ -67,8 +67,8 @@ static void pidfile_update_conds(char *dir, char *name, uint32_t mask) char fn[PATH_MAX]; svc_t *svc; - _d("Got dir: %s, name: %s, mask: %08x", dir, name, mask); - snprintf(fn, sizeof(fn), "%s%s%s", dir, fisslashdir(dir) ? "" : "/", name); + paste(fn, sizeof(fn), dir, name); + _d("path: %s, mask: %08x", fn, mask); if (fnmatch("*\\.pid", fn, 0) && fnmatch("*/pid", fn, 0)) return; @@ -131,7 +131,7 @@ static void pidfile_handle_dir(struct iwatch *iw, char *dir, char *name, int mas char path[strlen(dir) + strlen(name) + 2]; struct iwatch_path *iwp; - snprintf(path, sizeof(path), "%s%s%s", dir, fisslashdir(dir) ? "" : "/", name); + paste(path, sizeof(path), dir, name); _d("path: %s", path); iwp = iwatch_find_by_path(iw, path); diff --git a/src/conf.c b/src/conf.c index 32c6b612..ae7def33 100644 --- a/src/conf.c +++ b/src/conf.c @@ -775,7 +775,7 @@ static int do_change(char *dir, char *name, uint32_t mask) char fn[strlen(dir) + strlen(name) + 2]; struct conf_change *node; - snprintf(fn, sizeof(fn), "%s%s%s", dir, fisslashdir(dir) ? "" : "/", name); + paste(fn, sizeof(fn), dir, name); _d("path: %s mask: %08x", fn, mask); node = conf_find(fn); diff --git a/src/exec.c b/src/exec.c index 874816d5..155eaf2d 100644 --- a/src/exec.c +++ b/src/exec.c @@ -441,20 +441,20 @@ int run_parts(char *dir, char *cmd) } for (i = 0; i < num; i++) { + const char *name = e[i]->d_name; + char path[strlen(dir) + strlen(name) + 2]; struct stat st; - char path[512]; char *argv[4] = { "sh", "-c", path, NULL }; - char *name = e[i]->d_name; pid_t pid = 0; int status; int exit_status; - snprintf(path, sizeof(path), "%s%s%s", dir, fisslashdir(dir) ? "" : "/", name); + paste(path, sizeof(path), dir, name); if (stat(path, &st)) { _d("Failed stat(%s): %s", path, strerror(errno)); continue; diff --git a/src/helpers.h b/src/helpers.h index e4fc1595..7c734d9f 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -103,6 +103,17 @@ static inline int create(char *path, mode_t mode, uid_t uid, gid_t gid) return 0; } +/* paste dir/file into buf */ +static inline int paste(char *buf, size_t len, const char *dir, const char *file) +{ + if (!dir) + dir = ""; + if (!file) + file = ""; + + return snprintf(buf, len, "%s%s%s", dir, fisslashdir(dir) ? "" : "/", file); +} + int ismnt (char *file, char *dir, char *mode); int fismnt (char *dir); diff --git a/src/pid.h b/src/pid.h index b0ca3325..6bf96ce2 100644 --- a/src/pid.h +++ b/src/pid.h @@ -62,7 +62,7 @@ static inline char *pid_runpath(const char *file, char *path, size_t len) else if (!strncmp(file, "/run/", 5)) file += 5; - rc = snprintf(path, len, "%s/%s", prefix, file); + rc = paste(path, len, prefix, file); if (rc < 0 || (size_t)rc >= len) _e("File path '%s' truncated, should end with '%s'", path, file);