~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/libs/port/poll.c

Version: ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * poll function
  3  *
  4  * Copyright 2008 Alexandre Julliard
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  */
 20 
 21 #include "config.h"
 22 #include "wine/port.h"
 23 
 24 #ifndef HAVE_POLL
 25 
 26 #ifdef HAVE_SYS_TIME_H
 27 #include <sys/time.h>
 28 #endif
 29 #ifdef HAVE_UNISTD_H
 30 #include <unistd.h>
 31 #endif
 32 
 33 /* we can't include winsock2.h here so we have to duplicate the definitions for Windows */
 34 #if defined(__MINGW32__) || defined(_MSC_VER)
 35 
 36 #define FD_SETSIZE 64
 37 
 38 typedef struct
 39 {
 40     unsigned int fd_count;
 41     int fd_array[FD_SETSIZE];   /* an array of SOCKETs */
 42 } fd_set;
 43 
 44 #define FD_ZERO(set)      ((set)->fd_count = 0)
 45 #define FD_ISSET(fd, set) __WSAFDIsSet((fd), (set))
 46 #define FD_SET(fd, set)   do { if ((set)->fd_count < FD_SETSIZE) (set)->fd_array[(set)->fd_count++]=(fd); } while(0)
 47 
 48 int __stdcall select(int,fd_set*,fd_set*,fd_set*,const struct timeval*);
 49 int __stdcall __WSAFDIsSet(int,fd_set*);
 50 
 51 #endif
 52 
 53 int poll( struct pollfd *fds, unsigned int count, int timeout )
 54 {
 55     fd_set read_set, write_set, except_set;
 56     unsigned int i;
 57     int maxfd = -1, ret;
 58 
 59     FD_ZERO( &read_set );
 60     FD_ZERO( &write_set );
 61     FD_ZERO( &except_set );
 62 
 63     for (i = 0; i < count; i++)
 64     {
 65         if (fds[i].fd == -1) continue;
 66         if (fds[i].events & (POLLIN|POLLPRI)) FD_SET( fds[i].fd, &read_set  );
 67         if (fds[i].events & POLLOUT) FD_SET( fds[i].fd, &write_set );
 68         FD_SET( fds[i].fd, &except_set );  /* POLLERR etc. are always selected */
 69         if (fds[i].fd > maxfd) maxfd = fds[i].fd;
 70     }
 71     if (timeout != -1)
 72     {
 73         struct timeval tv;
 74         tv.tv_sec = timeout / 1000;
 75         tv.tv_usec = timeout % 1000;
 76         ret = select( maxfd + 1, &read_set, &write_set, &except_set, &tv );
 77     }
 78     else ret = select( maxfd + 1, &read_set, &write_set, &except_set, NULL );
 79 
 80     if (ret >= 0)
 81     {
 82         for (i = 0; i < count; i++)
 83         {
 84             fds[i].revents = 0;
 85             if (fds[i].fd == -1) continue;
 86             if (FD_ISSET( fds[i].fd, &read_set )) fds[i].revents |= POLLIN;
 87             if (FD_ISSET( fds[i].fd, &write_set )) fds[i].revents |= POLLOUT;
 88             if (FD_ISSET( fds[i].fd, &except_set )) fds[i].revents |= POLLERR;
 89         }
 90     }
 91     return ret;
 92 }
 93 
 94 #endif /* HAVE_POLL */
 95 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.