summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--src/mypoll.c14
-rw-r--r--src/mypoll.h11
3 files changed, 20 insertions, 7 deletions
diff --git a/configure.ac b/configure.ac
index 7de6087..cf2f19c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -141,7 +141,7 @@ AC_HEADER_STDC
AC_HEADER_TIME
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([sys/ioctl.h alloca.h memory.h malloc.h sysexits.h \
- values.h])
+ values.h poll.h])
dnl Checks for libary functions
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
diff --git a/src/mypoll.c b/src/mypoll.c
index 0e06805..495e2c3 100644
--- a/src/mypoll.c
+++ b/src/mypoll.c
@@ -1,8 +1,14 @@
#include "mypoll.h"
-#define MYPOLL_READ (1<<1)
-#define MYPOLL_WRITE (1<<2)
-
+#ifdef HAVE_POLL_H
+int mypoll(pollfd_struct* fds, int nfds, int timeout) {
+ int i, ret;
+ for(i=0; i<nfds; ++i) if(!fds[i].events) fds[i].fd=~fds[i].fd;
+ ret = poll(fds, nfds, timeout <= 0 ? timeout : timeout*1000);
+ for(i=0; i<nfds; ++i) if(!fds[i].events) fds[i].fd=~fds[i].fd;
+ return ret;
+}
+#else
int mypoll(pollfd_struct* fds, int nfds, int timeout) {
fd_set rset, wset, *r=0, *w=0;
int i, ret, maxfd=-1;
@@ -39,4 +45,4 @@ int mypoll(pollfd_struct* fds, int nfds, int timeout) {
}
return ret;
}
-
+#endif
diff --git a/src/mypoll.h b/src/mypoll.h
index 114c0f8..a336680 100644
--- a/src/mypoll.h
+++ b/src/mypoll.h
@@ -1,21 +1,28 @@
#ifndef MYPOLL_H
#define MYPOLL_H
-#include <sys/select.h>
+#include "config.h"
#ifdef HAVE_POLL_H
+
#include <poll.h>
typedef struct pollfd pollfd_struct;
+
+#define MYPOLL_READ POLLIN
+#define MYPOLL_WRITE POLLOUT
+
#else
+
+#include <sys/select.h>
typedef struct mypollfd {
int fd;
short events;
short revents;
} pollfd_struct;
-#endif
#define MYPOLL_READ (1<<1)
#define MYPOLL_WRITE (1<<2)
+#endif
int mypoll(pollfd_struct* fds, int nfds, int timeout);