about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2024-04-25 12:59:03 +0000
committerLaurent Bercot <ska@appnovation.com>2024-04-25 12:59:03 +0000
commita2f093bca2089bd6b3a7211e895a38e86ed8569d (patch)
tree0d4687001c26300fa84447f64f82bb0b81bca867
parent8839644def2c898730e21160e73bd3d265d1198b (diff)
downloads6-a2f093bca2089bd6b3a7211e895a38e86ed8569d.tar.gz
s6-a2f093bca2089bd6b3a7211e895a38e86ed8569d.tar.xz
s6-a2f093bca2089bd6b3a7211e895a38e86ed8569d.zip
bugfix: bad length computation in s6-ftrigrd
Signed-off-by: Laurent Bercot <ska@appnovation.com>
-rw-r--r--src/libs6/s6-ftrigrd.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/libs6/s6-ftrigrd.c b/src/libs6/s6-ftrigrd.c
index f5f4864..202ea31 100644
--- a/src/libs6/s6-ftrigrd.c
+++ b/src/libs6/s6-ftrigrd.c
@@ -28,7 +28,7 @@
 #include <skalibs/posixishard.h>
 
 #define FTRIGRD_MAXREADS 32
-#define FTRIGRD_BUFSIZE 17
+#define FTRIGRD_BUFSIZE 16
 
 #define dienomem() strerr_diefu1sys(111, "stralloc_catb")
 
@@ -184,9 +184,10 @@ int main (void)
 {
   PROG = "s6-ftrigrd" ;
 
-  if (ndelay_on(0) < 0) strerr_diefu2sys(111, "ndelay_on ", "0") ;
-  if (ndelay_on(1) < 0) strerr_diefu2sys(111, "ndelay_on ", "1") ;
-  if (!sig_ignore(SIGPIPE)) strerr_diefu1sys(111, "ignore SIGPIPE") ;
+  if (ndelay_on(0) == -1 || ndelay_on(1) == -1)
+    strerr_diefu1sys(111, "make fds nonblocking") ;
+  if (!sig_altignore(SIGPIPE))
+    strerr_diefu1sys(111, "ignore SIGPIPE") ;
 
   {
     tain deadline ;
@@ -198,9 +199,9 @@ int main (void)
 
   for (;;)
   {
-    iopause_fd x[3 + genalloc_len(ftrigio, &g)] ;
     size_t n = genalloc_len(ftrigio, &g) ;
     size_t i = 0 ;
+    iopause_fd x[3 + n] ;
 
     x[0].fd = 0 ; x[0].events = IOPAUSE_EXCEPT | IOPAUSE_READ ;
     x[1].fd = 1 ; x[1].events = IOPAUSE_EXCEPT | (textmessage_sender_isempty(textmessage_sender_1) ? 0 : IOPAUSE_WRITE) ;
@@ -208,8 +209,9 @@ int main (void)
     x[2].events = IOPAUSE_EXCEPT | (textmessage_sender_isempty(textmessage_sender_x) ? 0 : IOPAUSE_WRITE) ;
     for (; i < n ; i++)
     {
-      genalloc_s(ftrigio, &g)[i].xindex = 3 + i ;
-      x[3+i].fd = genalloc_s(ftrigio, &g)[i].trig.fd ;
+      ftrigio *p = genalloc_s(ftrigio, &g) + i ;
+      p->xindex = 3+i ;
+      x[3+i].fd = p->trig.fd ;
       x[3+i].events = IOPAUSE_READ ;
     }
 
@@ -228,7 +230,7 @@ int main (void)
         return 1 ;
 
    /* scan listening ftrigs */
-    for (i = 0 ; i < n ; i++)
+    for (i = 0 ; i < genalloc_len(ftrigio, &g) ; i++)
     {
       ftrigio *p = genalloc_s(ftrigio, &g) + i ;
       if (x[p->xindex].revents & IOPAUSE_READ)