]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - libratbox/src/devpoll.c
strip_colour(): strip ASCII 29 (mIRC 7 italics).
[irc/rqf/shadowircd.git] / libratbox / src / devpoll.c
index 162130fedd6f06843b1c47467412300d5ab79c1c..58770d9cf1c63328c2c39ec7aac41f8ff9ef1542 100644 (file)
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
  *  USA
  *
- *  $Id: devpoll.c 25038 2008-01-23 16:03:08Z androsyn $
  */
 #include <libratbox_config.h>
 #include <ratbox_lib.h>
 #include <commio-int.h>
 #include <fcntl.h>
 
-#if defined(HAVE_DEVPOLL) && (HAVE_DEVPOLL_H)
+#if defined(HAVE_DEVPOLL) && (HAVE_SYS_DEVPOLL_H)
 #include <sys/devpoll.h>
 
-
-static void devpoll_update_events(int, short, PF *);
 static int dpfd;
 static int maxfd;
 static short *fdmask;
-static void devpoll_update_events(int, short, PF *);
+static void devpoll_update_events(rb_fde_t *, short, PF *);
 static void devpoll_write_update(int, int);
 
 
-int 
+int
 rb_setup_fd_devpoll(rb_fde_t *F)
 {
-        return 0;
+       return 0;
 }
-        
-        
+
+
 /*
  * Write an update to the devpoll filter.
  * See, we end up having to do a seperate (?) remove before we do an
@@ -68,17 +65,18 @@ devpoll_write_update(int fd, int events)
        /* Write the thing to our poll fd */
        retval = write(dpfd, &pollfds[0], sizeof(struct pollfd));
        if(retval != sizeof(struct pollfd))
-               rb_lib_log("devpoll_write_update: dpfd write failed %d: %s", errno, strerror(errno));
+               rb_lib_log("devpoll_write_update: dpfd write failed %d: %s", errno,
+                          strerror(errno));
        /* Done! */
 }
 
 static void
-devpoll_update_events(int fd, short filter, PF * handler)
+devpoll_update_events(rb_fde_t *F, short filter, PF * handler)
 {
        int update_required = 0;
+       int fd = rb_get_fd(F);
        int cur_mask = fdmask[fd];
        PF *cur_handler;
-
        fdmask[fd] = 0;
        switch (filter)
        {
@@ -150,9 +148,10 @@ rb_init_netio_devpoll(void)
        {
                return errno;
        }
-       maxfd = getdtablesize() - 2; /* This makes more sense than HARD_FDLIMIT */
+       maxfd = getdtablesize() - 2;    /* This makes more sense than HARD_FDLIMIT */
        fdmask = rb_malloc(sizeof(fdmask) * maxfd + 1);
        rb_open(dpfd, RB_FD_UNKNOWN, "/dev/poll file descriptor");
+       return 0;
 }
 
 /*
@@ -162,20 +161,19 @@ rb_init_netio_devpoll(void)
  * and deregister interest in a pending IO state for a given FD.
  */
 void
-rb_setselect_devpoll(rb_fde_t *F, unsigned int type, PF * handler,
-              void *client_data)
+rb_setselect_devpoll(rb_fde_t *F, unsigned int type, PF * handler, void *client_data)
 {
        lrb_assert(IsFDOpen(F));
 
        if(type & RB_SELECT_READ)
        {
-               devpoll_update_events(fd, RB_SELECT_READ, handler);
+               devpoll_update_events(F, RB_SELECT_READ, handler);
                F->read_handler = handler;
                F->read_data = client_data;
        }
        if(type & RB_SELECT_WRITE)
        {
-               devpoll_update_events(fd, RB_SELECT_WRITE, handler);
+               devpoll_update_events(F, RB_SELECT_WRITE, handler);
                F->write_handler = handler;
                F->write_data = client_data;
        }
@@ -205,7 +203,7 @@ rb_select_devpoll(long delay)
 
        do
        {
-               for (;;)
+               for(;;)
                {
                        dopoll.dp_timeout = delay;
                        dopoll.dp_nfds = maxfd;
@@ -223,14 +221,13 @@ rb_select_devpoll(long delay)
                if(num == 0)
                        continue;
 
-               for (i = 0; i < num; i++)
+               for(i = 0; i < num; i++)
                {
                        int fd = dopoll.dp_fds[i].fd;
                        PF *hdl = NULL;
                        rb_fde_t *F = rb_find_fd(fd);
-                       if((dopoll.dp_fds[i].
-                           revents & (POLLRDNORM | POLLIN | POLLHUP |
-                                      POLLERR))
+                       if((dopoll.dp_fds[i].revents & (POLLRDNORM | POLLIN | POLLHUP |
+                                                       POLLERR))
                           && (dopoll.dp_fds[i].events & (POLLRDNORM | POLLIN)))
                        {
                                if((hdl = F->read_handler) != NULL)
@@ -243,16 +240,14 @@ rb_select_devpoll(long delay)
                                         * poll set *if* the handler changes state (active ->
                                         * NULL or vice versa.)
                                         */
-                                       devpoll_update_events(fd,
-                                                             RB_SELECT_READ, F->read_handler);
+                                       devpoll_update_events(F, RB_SELECT_READ, F->read_handler);
                                }
                        }
 
                        if(!IsFDOpen(F))
                                continue;       /* Read handler closed us..go on to do something more useful */
-                       if((dopoll.dp_fds[i].
-                           revents & (POLLWRNORM | POLLOUT | POLLHUP |
-                                      POLLERR))
+                       if((dopoll.dp_fds[i].revents & (POLLWRNORM | POLLOUT | POLLHUP |
+                                                       POLLERR))
                           && (dopoll.dp_fds[i].events & (POLLWRNORM | POLLOUT)))
                        {
                                if((hdl = F->write_handler) != NULL)
@@ -260,7 +255,7 @@ rb_select_devpoll(long delay)
                                        F->write_handler = NULL;
                                        hdl(F, F->write_data);
                                        /* See above similar code in the read case */
-                                       devpoll_update_events(fd,
+                                       devpoll_update_events(F,
                                                              RB_SELECT_WRITE, F->write_handler);
                                }
 
@@ -268,13 +263,13 @@ rb_select_devpoll(long delay)
                }
                return RB_OK;
        }
-       while (0);
+       while(0);
        /* XXX Get here, we broke! */
        return 0;
 }
 
 #else /* /dev/poll not supported */
-int 
+int
 rb_init_netio_devpoll(void)
 {
        return ENOSYS;
@@ -301,4 +296,3 @@ rb_setup_fd_devpoll(rb_fde_t *F)
        return -1;
 }
 #endif
-