aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-03-18 01:57:01 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-03-18 01:57:01 +0000
commit24637cd3776cda5fd0a919ba9343ba86d82d3e04 (patch)
treedac9d66860d763fedc999ace6e1a5f37d3add229 /src
parent4cdcab0506e76666800d2bc111c602bb3154cc30 (diff)
downloads6-24637cd3776cda5fd0a919ba9343ba86d82d3e04.tar.gz
More fixes, ftrigr_string addition, doc update
Diffstat (limited to 'src')
-rw-r--r--src/include/s6/ftrigr.h13
-rw-r--r--src/libs6/deps-lib/s61
-rw-r--r--src/libs6/ftrigr_peek.c7
-rw-r--r--src/libs6/ftrigr_peek1.c14
-rw-r--r--src/libs6/ftrigr_wait_and.c4
-rw-r--r--src/libs6/ftrigr_wait_or.c5
-rw-r--r--src/pipe-tools/s6-ftrig-listen.c4
-rw-r--r--src/pipe-tools/s6-ftrig-listen1.c6
-rw-r--r--src/pipe-tools/s6-ftrig-wait.c6
-rw-r--r--src/supervision/s6-notifyoncheck.c6
-rw-r--r--src/supervision/s6_svlisten_loop.c13
11 files changed, 35 insertions, 44 deletions
diff --git a/src/include/s6/ftrigr.h b/src/include/s6/ftrigr.h
index 30a7ca6..2e0f340 100644
--- a/src/include/s6/ftrigr.h
+++ b/src/include/s6/ftrigr.h
@@ -3,7 +3,6 @@
#ifndef S6_FTRIGR_H
#define S6_FTRIGR_H
-#include <sys/uio.h>
#include <stdint.h>
#include <skalibs/tai.h>
@@ -21,6 +20,13 @@ struct ftrigr_s
} ;
#define FTRIGR_ZERO { .client = SASSCLIENT_ZERO, .data = GENALLOC_ZERO }
+typedef struct ftrigr_string_s ftrigr_string, *ftrigr_string_ref ;
+struct ftrigr_string_s
+{
+ char *s ;
+ uint32_t len ;
+} ;
+
extern int ftrigr_startf (ftrigr *, tain const *, tain *) ;
#define ftrigr_startf_g(a, deadline) ftrigr_startf(a, (deadline), &STAMP)
extern int ftrigr_start (ftrigr *, unsigned int) ;
@@ -28,8 +34,7 @@ extern void ftrigr_end (ftrigr *) ;
#define ftrigr_fd(a) sassclient_fd(&(a)->client)
extern int ftrigr_update (ftrigr *) ;
-extern int ftrigr_peek (ftrigr *, uint32_t, struct iovec *) ;
-extern int ftrigr_peek1 (ftrigr *, uint32_t, char *) ;
+extern int ftrigr_peek (ftrigr *, uint32_t, ftrigr_string *) ;
extern int ftrigr_ack (ftrigr *, uint32_t) ;
extern void ftrigr_release (ftrigr *, uint32_t) ;
@@ -41,7 +46,7 @@ extern int ftrigr_unsubscribe (ftrigr *, uint32_t, tain const *, tain *) ;
extern int ftrigr_wait_and (ftrigr *, uint32_t const *, unsigned int, tain const *, tain *) ;
#define ftrigr_wait_and_g(a, list, len, deadline) ftrigr_wait_and(a, list, len, (deadline), &STAMP)
-extern int ftrigr_wait_or (ftrigr *, uint32_t const *, unsigned int, struct iovec *, tain const *, tain *) ;
+extern int ftrigr_wait_or (ftrigr *, uint32_t const *, unsigned int, ftrigr_string *, tain const *, tain *) ;
#define ftrigr_wait_or_g(a, list, n, v, deadline) ftrigr_wait_or(a, list, n, v, (deadline), &STAMP)
#endif
diff --git a/src/libs6/deps-lib/s6 b/src/libs6/deps-lib/s6
index 74a30a7..6590d83 100644
--- a/src/libs6/deps-lib/s6
+++ b/src/libs6/deps-lib/s6
@@ -1,7 +1,6 @@
ftrigr_ack.o
ftrigr_end.o
ftrigr_peek.o
-ftrigr_peek1.o
ftrigr_release.o
ftrigr_start.o
ftrigr_startf.o
diff --git a/src/libs6/ftrigr_peek.c b/src/libs6/ftrigr_peek.c
index 155fce3..5107bae 100644
--- a/src/libs6/ftrigr_peek.c
+++ b/src/libs6/ftrigr_peek.c
@@ -1,6 +1,5 @@
/* ISC license. */
-#include <sys/uio.h>
#include <errno.h>
#include <skalibs/genalloc.h>
@@ -8,7 +7,7 @@
#include <s6/ftrigr.h>
#include "ftrigr-internal.h"
-int ftrigr_peek (ftrigr *a, uint32_t id, struct iovec *v)
+int ftrigr_peek (ftrigr *a, uint32_t id, ftrigr_string *fs)
{
ftrigr_data *p = genalloc_s(ftrigr_data, &a->data) + id ;
switch (p->status)
@@ -16,8 +15,8 @@ int ftrigr_peek (ftrigr *a, uint32_t id, struct iovec *v)
case EAGAIN : return 0 ;
case 0 :
{
- v->iov_base = p->sa.s ;
- v->iov_len = p->sa.len ;
+ fs->s = p->sa.s ;
+ fs->len = p->sa.len ;
return 1 ;
}
default: break ;
diff --git a/src/libs6/ftrigr_peek1.c b/src/libs6/ftrigr_peek1.c
deleted file mode 100644
index 81059f7..0000000
--- a/src/libs6/ftrigr_peek1.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* ISC license. */
-
-#include <sys/uio.h>
-
-#include <s6/ftrigr.h>
-
-int ftrigr_peek1 (ftrigr *a, uint32_t id, char *c)
-{
- struct iovec v ;
- int r = ftrigr_peek(a, id, &v) ;
- if (r <= 0) return r ;
- *c = ((char *)v.iov_base)[v.iov_len - 1] ;
- return 1 ;
-}
diff --git a/src/libs6/ftrigr_wait_and.c b/src/libs6/ftrigr_wait_and.c
index 24e722f..0619b08 100644
--- a/src/libs6/ftrigr_wait_and.c
+++ b/src/libs6/ftrigr_wait_and.c
@@ -14,8 +14,8 @@ int ftrigr_wait_and (ftrigr *a, uint32_t const *list, unsigned int n, tain const
{
for (;;)
{
- struct iovec v ;
- int r = ftrigr_peek(a, list[i], &v) ;
+ ftrigr_string fs ;
+ int r = ftrigr_peek(a, list[i], &fs) ;
if (r == -1) return -1 ;
if (r) break ;
r = iopause_stamp(&x, 1, deadline, stamp) ;
diff --git a/src/libs6/ftrigr_wait_or.c b/src/libs6/ftrigr_wait_or.c
index 0ed41b7..799e2e0 100644
--- a/src/libs6/ftrigr_wait_or.c
+++ b/src/libs6/ftrigr_wait_or.c
@@ -1,13 +1,12 @@
/* ISC license. */
-#include <sys/uio.h>
#include <errno.h>
#include <skalibs/iopause.h>
#include <s6/ftrigr.h>
-int ftrigr_wait_or (ftrigr *a, uint32_t const *list, unsigned int n, struct iovec *v, tain const *deadline, tain *stamp)
+int ftrigr_wait_or (ftrigr *a, uint32_t const *list, unsigned int n, ftrigr_string *fs, tain const *deadline, tain *stamp)
{
iopause_fd x = { .fd = ftrigr_fd(a), .events = IOPAUSE_READ } ;
for (;;)
@@ -15,7 +14,7 @@ int ftrigr_wait_or (ftrigr *a, uint32_t const *list, unsigned int n, struct iove
int r ;
for (unsigned int i = 0 ; i < n ; i++)
{
- r = ftrigr_peek(a, list[i], v) ;
+ r = ftrigr_peek(a, list[i], fs) ;
if (r == -1) return -1 ;
if (r) return i ;
}
diff --git a/src/pipe-tools/s6-ftrig-listen.c b/src/pipe-tools/s6-ftrig-listen.c
index 5fa3e33..48f5f6b 100644
--- a/src/pipe-tools/s6-ftrig-listen.c
+++ b/src/pipe-tools/s6-ftrig-listen.c
@@ -107,8 +107,8 @@ int main (int argc, char const **argv)
unsigned int i = 0 ;
while (i < n)
{
- struct iovec v ;
- r = ftrigr_peek(&a, ids[i], &v) ;
+ ftrigr_string fs ;
+ r = ftrigr_peek(&a, ids[i], &fs) ;
if (r == -1) strerr_diefu1sys(111, "ftrigr_check") ;
else if (!r) i++ ;
else if (wgolb & GOLB_OR) n = 0 ;
diff --git a/src/pipe-tools/s6-ftrig-listen1.c b/src/pipe-tools/s6-ftrig-listen1.c
index 1a08e6d..9ebd5ca 100644
--- a/src/pipe-tools/s6-ftrig-listen1.c
+++ b/src/pipe-tools/s6-ftrig-listen1.c
@@ -1,5 +1,6 @@
/* ISC license. */
+#include <sys/uio.h>
#include <stdint.h>
#include <errno.h>
#include <signal.h>
@@ -51,7 +52,7 @@ int main (int argc, char const *const *argv)
ftrigr a = FTRIGR_ZERO ;
pid_t pid ;
uint32_t id ;
- struct iovec v[2] = { [1] = { .iov_base = "\n", .iov_len = 1 } } ;
+ ftrigr_string fs ;
unsigned int golc ;
PROG = "s6-ftrig-listen1" ;
@@ -84,7 +85,7 @@ int main (int argc, char const *const *argv)
for (;;)
{
- int r = ftrigr_peek(&a, id, &v[0]) ;
+ int r = ftrigr_peek(&a, id, &fs) ;
if (r == -1) strerr_diefu1sys(111, "ftrigr_peek") ;
if (r) break ;
r = iopause_g(x, 2, &deadline) ;
@@ -99,6 +100,7 @@ int main (int argc, char const *const *argv)
if (ftrigr_update(&a) == -1) strerr_diefu1sys(111, "ftrigr_update") ;
}
+ struct iovec v[2] = { { .iov_base = fs.s, .iov_len = fs.len }, { .iov_base = "\n", .iov_len = 1 } } ;
if (allwritev(1, v, 2) < 2) strerr_diefu1sys(111, "write to stdout") ;
_exit(0) ;
}
diff --git a/src/pipe-tools/s6-ftrig-wait.c b/src/pipe-tools/s6-ftrig-wait.c
index 87b573d..e36fa2d 100644
--- a/src/pipe-tools/s6-ftrig-wait.c
+++ b/src/pipe-tools/s6-ftrig-wait.c
@@ -32,9 +32,9 @@ int main (int argc, char const *const *argv)
tain deadline ;
tain tto = TAIN_INFINITE_RELATIVE ;
ftrigr a = FTRIGR_ZERO ;
+ ftrigr_string fs ;
uint32_t id ;
unsigned int golc ;
- struct iovec v[2] = { [1] = { .iov_base = "\n", .iov_len = 1 } } ;
PROG = "s6-ftrig-wait" ;
golc = gol_main(argc, argv, 0, 0, rgola, GOLA_N, 0, wgola) ;
@@ -54,8 +54,10 @@ int main (int argc, char const *const *argv)
if (!ftrigr_startf_g(&a, &deadline)) strerr_diefu1sys(111, "ftrigr_startf") ;
if (!ftrigr_subscribe_g(&a, &id, 0, 0, argv[0], argv[1], &deadline))
strerr_diefu4sys(111, "subscribe to ", argv[0], " with regexp ", argv[1]) ;
- if (ftrigr_wait_or_g(&a, &id, 1, &v[0], &deadline) == -1)
+ if (ftrigr_wait_or_g(&a, &id, 1, &fs, &deadline) == -1)
strerr_diefu2sys((errno == ETIMEDOUT) ? 99 : 111, "match regexp on ", argv[1]) ;
+
+ struct iovec v[2] = { { .iov_base = fs.s, .iov_len = fs.len }, { .iov_base = "\n", .iov_len = 1 } } ;
if (allwritev(1, v, 2) < siovec_len(v, 2)) strerr_diefu1sys(111, "write to stdout") ;
_exit(0) ;
}
diff --git a/src/supervision/s6-notifyoncheck.c b/src/supervision/s6-notifyoncheck.c
index f86b1e0..ba8e91d 100644
--- a/src/supervision/s6-notifyoncheck.c
+++ b/src/supervision/s6-notifyoncheck.c
@@ -85,13 +85,13 @@ static inline int handle_signals (pid_t pid, int *w)
static int handle_event (ftrigr *a, uint32_t id, pid_t pid)
{
int r ;
- struct iovec v ;
+ ftrigr_string fs ;
if (ftrigr_update(a) == -1) strerr_diefu1sys(111, "ftrigr_update") ;
- r = ftrigr_peek(a, id, &v) ;
+ r = ftrigr_peek(a, id, &fs) ;
if (r == -1) strerr_diefu1sys(111, "ftrigr_check") ;
if (r)
{
- if (memchr(v.iov_base, 'd', v.iov_len))
+ if (memchr(fs.s, 'd', fs.len))
{
if (pid) kill(pid, SIGTERM) ;
ftrigr_ack(a, id) ;
diff --git a/src/supervision/s6_svlisten_loop.c b/src/supervision/s6_svlisten_loop.c
index 4a3e4cf..60e77ad 100644
--- a/src/supervision/s6_svlisten_loop.c
+++ b/src/supervision/s6_svlisten_loop.c
@@ -70,15 +70,14 @@ unsigned int s6_svlisten_loop (s6_svlisten_t *foo, int wantup, int wantready, in
if (ftrigr_update(&foo->a) < 0) strerr_diefu1sys(111, "ftrigr_update") ;
for (unsigned int i = 0 ; i < foo->n ; i++)
{
- struct iovec v ;
- r = ftrigr_peek(&foo->a, foo->ids[i], &v) ;
+ ftrigr_string fs ;
+ r = ftrigr_peek(&foo->a, foo->ids[i], &fs) ;
if (r == -1) strerr_diefu1sys(111, "ftrigr_check") ;
else if (r)
{
- char const *s = v.iov_base ;
- for (size_t j = 0 ; j < v.iov_len ; j++)
+ for (uint32_t j = 0 ; j < fs.len ; j++)
{
- if (s[j] == 'x')
+ if (fs.s[j] == 'x')
{
if (bitarray_peek(foo->upstate, i) != wantup
|| bitarray_peek(foo->readystate, i) != wantready)
@@ -86,7 +85,7 @@ unsigned int s6_svlisten_loop (s6_svlisten_t *foo, int wantup, int wantready, in
bitarray_poke(foo->upstate, i, wantup) ;
bitarray_poke(foo->readystate, i, wantready) ;
}
- else if (s[j] == 'O')
+ else if (fs.s[j] == 'O')
{
if (wantup)
{
@@ -97,7 +96,7 @@ unsigned int s6_svlisten_loop (s6_svlisten_t *foo, int wantup, int wantready, in
}
else
{
- unsigned int d = byte_chr("dDuU", 4, s[j]) ;
+ unsigned int d = byte_chr("dDuU", 4, fs.s[j]) ;
bitarray_poke(foo->upstate, i, d & 2) ;
bitarray_poke(foo->readystate, i, d & 1) ;
}