chiark / gitweb /
regress: fuzzraw: Fixes to fdsets
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Nov 2016 19:32:29 +0000 (19:32 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Jun 2020 15:13:02 +0000 (16:13 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
regress/hfuzzraw.c.m4
regress/hplayback.c.m4

index a1a9d0fb7645520e2ad8cefadfa2e12ba76c2ca3..faab75947a0010e38299e52925708e562147a428 100644 (file)
@@ -161,23 +161,30 @@ static int Pbytes(byte *buf, int maxlen) {
 }
 
 static void Pfdset(fd_set *set, int max, int *r_io) {
-  uint16_t got;
-  int fd, ngot=0;
+  uint16_t fdmap;
+  int fd, nfdmap=0;
+
+  if (!set)
+    return;
+
+  for (fd=max-1; fd>=0; fd--) {
+    if (nfdmap==0) {
+      P_READ(fdmap);
+      nfdmap= 16;
+    }
+    _Bool y = fdmap & 1u;
+    fdmap >>= 1;
+    nfdmap--;
 
-  for (fd=0; fd<max; fd++) {
     if (!FD_ISSET(fd,set)) continue;
+
     P_fdf(fd);
-    if (ngot==0) {
-      P_READ(got);
-      ngot= 16;
-    }
-    if (got & 1u) {
+
+    if (y) {
       (*r_io)++;
     } else {
       FD_CLR(fd,set);
     }
-    got >>= 1;
-    ngot--;
   }
 }
 
index f6034cb9fd9c5cec04fb88537637a3cbd10e174f..0c39945bd1c08003f8c38f8240dee8e69678f816 100644 (file)
@@ -205,6 +205,20 @@ static void Pfdset(fd_set *set, int max) {
     if (c == hm_squote]hm_squote) break;
     if (c != hm_squote,hm_squote) Psyntax("fd set separator not ,");
   }
+
+  uint16_t accum;
+  int inaccum=0, fd;
+  for (fd=0; ; fd++) {
+    if (fd>=max || inaccum==16) {
+      FR_WRITE(accum);
+      inaccum= 0;
+    }
+    if (fd>=max)
+      break;
+    accum <<= 1;
+    accum |= !!FD_ISSET(fd,set);
+    inaccum++;
+  }
 }
 
 #ifdef HAVE_POLL