The following diff cleans up the parameters of pselregister(), making
its parameter use similar to that of pselcollect(). In addition, this
removes from pselregister() the assumption that all the fd_set kinds
are in one continuous array.

OK?

Index: kern/sys_generic.c
===================================================================
RCS file: src/sys/kern/sys_generic.c,v
retrieving revision 1.133
diff -u -p -r1.133 sys_generic.c
--- kern/sys_generic.c  22 Dec 2020 13:24:45 -0000      1.133
+++ kern/sys_generic.c  25 Dec 2020 15:10:05 -0000
@@ -79,7 +79,7 @@ int kqpoll_debug = 0;
        printf(x);                                                      \
 }
 
-int pselregister(struct proc *, fd_set *, int, int, int *);
+int pselregister(struct proc *, fd_set *[], int, int *);
 int pselcollect(struct proc *, struct kevent *, fd_set *[]);
 
 int pollout(struct pollfd *, struct pollfd *, u_int);
@@ -652,7 +652,7 @@ dopselect(struct proc *p, int nd, fd_set
                dosigsuspend(p, *sigmask &~ sigcantmask);
 
        /* Register kqueue events */
-       error = pselregister(p, pibits[0], nd, ni, &nevents);
+       error = pselregister(p, pibits, nd, &nevents);
        if (error != 0)
                goto done;
 
@@ -738,20 +738,17 @@ dopselect(struct proc *p, int nd, fd_set
  * per-thread queue.
  */
 int
-pselregister(struct proc *p, fd_set *ibits, int nfd, int ni, int *nregistered)
+pselregister(struct proc *p, fd_set *pibits[3], int nfd, int *nregistered)
 {
        static const int evf[] = { EVFILT_READ, EVFILT_WRITE, EVFILT_EXCEPT };
        static const int evff[] = { 0, 0, NOTE_OOB };
-       caddr_t cibits = (caddr_t)ibits;
        int msk, i, j, fd, nevents = 0, error = 0;
        struct kevent kev;
        fd_mask bits;
 
        for (msk = 0; msk < 3; msk++) {
-               fd_set *pibits = (fd_set *)&cibits[msk*ni];
-
                for (i = 0; i < nfd; i += NFDBITS) {
-                       bits = pibits->fds_bits[i/NFDBITS];
+                       bits = pibits[msk]->fds_bits[i / NFDBITS];
                        while ((j = ffs(bits)) && (fd = i + --j) < nfd) {
                                bits &= ~(1 << j);
 

Reply via email to