Files
infix/package/finit/0009-initctl-touch-does-not-support-template-services.patch

77 lines
1.9 KiB
Diff

From 7b501f255b5730ce9da5c72aa6abd87bbf20ba11 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Wed, 3 Apr 2024 06:46:18 +0200
Subject: [PATCH 09/12] initctl: touch does not support template services
Organization: Addiva Elektronik
Fixes #403
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
---
src/serv.c | 10 ++++++++++
src/util.h | 20 ++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/src/serv.c b/src/serv.c
index 1cace46..6344ce3 100644
--- a/src/serv.c
+++ b/src/serv.c
@@ -374,6 +374,15 @@ int serv_touch(char *arg)
return serv_list("enabled");
}
+ /* 1. Try /etc/finit.d/enabled/$arg.conf to handle template@.conf */
+ paste(path, sizeof(path), finit_rcsd, "enabled/");
+ strlcat(path, arg, sizeof(path));
+ if (!suffix(path, sizeof(path), ".conf") && fexist(path)) {
+ fn = path;
+ goto touchit;
+ }
+
+ /* 2. Try /etc/finit.d/available/$arg.conf and other combos (legacy) */
fn = conf(path, sizeof(path), arg, 0);
if (!fexist(fn)) {
if (!strstr(arg, "finit.conf"))
@@ -385,6 +394,7 @@ int serv_touch(char *arg)
fn = path;
}
+touchit:
/* libite:touch() follows symlinks */
if (utimensat(AT_FDCWD, fn, NULL, AT_SYMLINK_NOFOLLOW))
ERR(noerr ? 0 : 71, "failed marking %s for reload", fn);
diff --git a/src/util.h b/src/util.h
index 9f0cbf0..80e1c51 100644
--- a/src/util.h
+++ b/src/util.h
@@ -109,6 +109,26 @@ static inline int paste(char *buf, size_t len, const char *dir, const char *file
fisslashdir(dir) ? "" : file[0] == '/' ? "" : "/", file);
}
+/* ensure path has suffix */
+static inline int suffix(char *path, size_t len, const char *sfx)
+{
+ size_t slen = strlen(sfx);
+ size_t plen = strlen(path);
+
+ if (plen < slen)
+ slen = strlcat(path, sfx, len);
+ else {
+ plen -= slen;
+ if (strcmp(&path[plen], sfx))
+ slen = strlcat(path, sfx, len);
+ }
+
+ if (slen >= len)
+ return -1;
+
+ return 0;
+}
+
#endif /* FINIT_UTIL_H_ */
/**
--
2.34.1