AROS: We have to provide the correct nfds to WaitSelect
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sat, 13 Apr 2013 10:39:12 +0000 (03:39 -0700)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sat, 13 Apr 2013 10:39:12 +0000 (03:39 -0700)
When copying the poll() compatibility function from win32 to AROS
we need to update it to set nfds correctly.
While win32 does not care what nfds is set to and works even if nfds is always
0, other platforms, like AROS do care.

aros/aros_compat.c

index 955f8e382d5a5ce176ce1859ea1450c45a0d1e41..6e484f4cad79ab6935b8ec9986667e290a72ce88 100644 (file)
@@ -89,7 +89,7 @@ int aros_poll(struct pollfd *fds, unsigned int nfds, int timo)
 {
   struct timeval timeout, *toptr;
   fd_set ifds, ofds, efds, *ip, *op;
-  unsigned int i;
+  unsigned int i, maxfd = 0;
   int  rc;
 
   // Set up the file-descriptor sets in ifds, ofds and efds. 
@@ -110,6 +110,9 @@ int aros_poll(struct pollfd *fds, unsigned int nfds, int timo)
       FD_SET(fds[i].fd, op);
     }
     FD_SET(fds[i].fd, &efds);
+    if (fds[i].fd > maxfd) {
+      maxfd = fds[i].fd;
+    }
   } 
 
   // Set up the timeval structure for the timeout parameter
@@ -124,7 +127,7 @@ int aros_poll(struct pollfd *fds, unsigned int nfds, int timo)
     timeout.tv_usec = (timo - timeout.tv_sec * 1000) * 1000;
   }
 
-  rc = WaitSelect(0, ip, op, &efds, toptr, NULL);
+  rc = WaitSelect(maxfd + 1, ip, op, &efds, toptr, NULL);
 
   if(rc <= 0)
     return rc;