]> granicus.if.org Git - libevent/commitdiff
work around a bug in Solaris by using pwrite instead of write; reported by
authorNiels Provos <provos@gmail.com>
Tue, 10 Aug 2004 17:49:53 +0000 (17:49 +0000)
committerNiels Provos <provos@gmail.com>
Tue, 10 Aug 2004 17:49:53 +0000 (17:49 +0000)
michael.wookey at citrix.com.au

svn:r118

devpoll.c

index 99d054133aa2270cb394f75e3920b3c70f86a18d..5fafdf54962321736d3614622780b19477cffc48 100644 (file)
--- a/devpoll.c
+++ b/devpoll.c
@@ -278,7 +278,11 @@ devpoll_add(void *arg, struct event *ev)
        dpev.fd = fd;
        dpev.events = events;
        dpev.revents = 0;
-       if (write(devpollop->dpfd, &dpev, sizeof(dpev)) == -1)
+       /*
+        * Due to a bug in Solaris, we have to use pwrite with an offset of 0.
+        * Write is limited to 2GB of data, until it will fail.
+        */
+       if (pwrite(devpollop->dpfd, &dpev, sizeof(dpev), 0) == -1)
                        return (-1);
 
        /* Update events responsible */
@@ -327,7 +331,7 @@ devpoll_del(void *arg, struct event *ev)
        dpev.events = events | POLLREMOVE;
        dpev.revents = 0;
 
-       if (write(devpollop->dpfd, &dpev, sizeof(dpev)) == -1)
+       if (pwrite(devpollop->dpfd, &dpev, sizeof(dpev), 0) == -1)
                return (-1);
 
        if (needreaddelete)