]> git.alsa-project.org Git - alsa-oss.git/commitdiff
fixes in select() mangling
authorJaroslav Kysela <perex@perex.cz>
Sat, 14 Feb 2004 18:42:17 +0000 (18:42 +0000)
committerJaroslav Kysela <perex@perex.cz>
Sat, 14 Feb 2004 18:42:17 +0000 (18:42 +0000)
alsa/pcm.c
oss-redir/oss-redir.c

index 197d40a187821fb89f516b4c2b2c9c4407eb594f..7ad7e6680c816c253d0c3c35f16890f1a6bb1029 100644 (file)
@@ -1294,15 +1294,21 @@ int lib_oss_pcm_select_prepare(int fd, fd_set *readfds, fd_set *writefds, fd_set
                        for (j = 0; j < count; j++) {
                                int fd = ufds[j].fd;
                                unsigned short events = ufds[j].events;
-                               FD_CLR(fd, readfds);
-                               FD_CLR(fd, writefds);
-                               FD_CLR(fd, exceptfds);
-                               if (events & POLLIN)
-                                       FD_SET(fd, readfds);
-                               if (events & POLLOUT)
-                                       FD_SET(fd, writefds);
-                               if (events & (POLLERR|POLLNVAL))
-                                       FD_SET(fd, exceptfds);
+                               if (readfds) {
+                                       FD_CLR(fd, readfds);
+                                       if (events & POLLIN)
+                                               FD_SET(fd, readfds);
+                               }
+                               if (writefds) {
+                                       FD_CLR(fd, writefds);
+                                       if (events & POLLOUT)
+                                               FD_SET(fd, writefds);
+                               }
+                               if (exceptfds) {
+                                       FD_CLR(fd, exceptfds);
+                                       if (events & (POLLERR|POLLNVAL))
+                                               FD_SET(fd, exceptfds);
+                               }
                        }
                }
        }       
@@ -1340,11 +1346,11 @@ int lib_oss_pcm_select_result(int fd, fd_set *readfds, fd_set *writefds, fd_set
                        for (j = 0; j < count; j++) {
                                int fd = ufds[j].fd;
                                revents = 0;
-                               if (FD_ISSET(fd, readfds))
+                               if (readfds && FD_ISSET(fd, readfds))
                                        revents |= POLLIN;
-                               if (FD_ISSET(fd, writefds))
+                               if (writefds && FD_ISSET(fd, writefds))
                                        revents |= POLLOUT;
-                               if (FD_ISSET(fd, exceptfds))
+                               if (exceptfds && FD_ISSET(fd, exceptfds))
                                        revents |= POLLERR;
                                ufds[j].revents = revents;
                        }
index d3128beb6a73984c1d8c86625c5243fe3f9cff28..666eda37e377838beb2b4b30274ee116eb2650fa 100644 (file)
@@ -81,11 +81,13 @@ static int native_pcm_select_prepare(int fd, fd_set *readfds, fd_set *writefds,
                return -EINVAL;
        if (readfds) {
                FD_SET(fd, readfds);
-               FD_SET(fd, exceptfds);
+               if (exceptfds)
+                       FD_SET(fd, exceptfds);
        }
        if (writefds) {
                FD_SET(fd, writefds);
-               FD_SET(fd, exceptfds);
+               if (exceptfds)
+                       FD_SET(fd, exceptfds);
        }
        return 0;
 }