diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2021-08-30 19:11:44 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2021-08-30 19:11:44 +0000 |
| commit | 691c69e626e4ceb85567a5288348bd04378fd410 (patch) | |
| tree | 9ae1c3f2c2984aafa2b9caf7987fe0011fcf6828 /src/libs6/s6_supervise_link_names.c | |
| parent | 1719a60278cf36558b568349c0c9f9b5eb91c999 (diff) | |
| download | s6-691c69e626e4ceb85567a5288348bd04378fd410.tar.gz | |
s6-svlink, s6-svunlink, .h changes
Renamed from s6-svdir-(un)link.
Doc added. Full functionality added.
Still need to be tested.
Unrelated: .h names simplified.
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libs6/s6_supervise_link_names.c')
| -rw-r--r-- | src/libs6/s6_supervise_link_names.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/libs6/s6_supervise_link_names.c b/src/libs6/s6_supervise_link_names.c index 74392b9..71fff1d 100644 --- a/src/libs6/s6_supervise_link_names.c +++ b/src/libs6/s6_supervise_link_names.c @@ -6,6 +6,7 @@ #include <errno.h> #include <sys/stat.h> +#include <skalibs/posixplz.h> #include <skalibs/bitarray.h> #include <skalibs/tai.h> #include <skalibs/stralloc.h> @@ -13,7 +14,7 @@ #include <s6/ftrigr.h> #include <s6/ftrigw.h> -#include <s6/s6-supervise.h> +#include <s6/supervise.h> static inline void do_unlink (char const *scdir, char const *const *names, size_t n, uint32_t killopts) { @@ -36,6 +37,13 @@ static uint16_t registerit (ftrigr_t *a, char *fn, size_t len, gid_t gid, uint32 return ftrigr_subscribe(a, fn, "s", 0, deadline, stamp) ; } +/* + options: bit 0: force event/ mode + bit 1: make event/ public + bit 2: don't start the service + bit 3: remove down files after starting supervisors +*/ + int s6_supervise_link_names (char const *scdir, char const *const *servicedirs, char const *const *names, size_t n, uint32_t options, tain const *deadline, tain *stamp) { size_t maxnlen = 0, maxlen = 0 ; @@ -86,7 +94,7 @@ int s6_supervise_link_names (char const *scdir, char const *const *servicedirs, uint32_t killopts = 0 ; int r ; uint16_t ids[ntotal] ; - char lname[scdirlen + maxnlen + 2] ; + char lname[scdirlen + maxnlen + 7] ; char fn[maxlen + 5 + (sizeof(S6_SUPERVISE_EVENTDIR) > 5 ? sizeof(S6_SUPERVISE_EVENTDIR) : 5)] ; if (!ftrigr_startf(&a, deadline, stamp)) return -1 ; memcpy(lname, scdir, scdirlen) ; @@ -124,6 +132,16 @@ int s6_supervise_link_names (char const *scdir, char const *const *servicedirs, killopts = 3 ; if (ftrigr_wait_and(&a, ids, m, deadline, stamp) < 0) goto errsa ; ftrigr_end(&a) ; + if (options & 8) + { + for (size_t i = 0 ; i < n ; i++) + { + size_t nlen = strlen(names[i]) ; + memcpy(lname + scdirlen + 1, names[i], nlen) ; + memcpy(lname + scdirlen + 1 + nlen, "/down", 6) ; + unlink_void(lname) ; + } + } return m ; err: |
