From 1d65938d5266dd6c14e379690e78c31842b1aa71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Wed, 8 Jul 1998 18:56:35 -0700
Subject: [PATCH] file->peek can now use poll()

Rev: src/modules/files/file.c:1.108
---
 src/modules/files/file.c | 38 +++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/src/modules/files/file.c b/src/modules/files/file.c
index e729a61ca7..fee7a5a3c2 100644
--- a/src/modules/files/file.c
+++ b/src/modules/files/file.c
@@ -5,7 +5,7 @@
 \*/
 
 #include "global.h"
-RCSID("$Id: file.c,v 1.107 1998/07/09 01:39:15 hubbe Exp $");
+RCSID("$Id: file.c,v 1.108 1998/07/09 01:56:35 hubbe Exp $");
 #include "fdlib.h"
 #include "interpret.h"
 #include "svalue.h"
@@ -658,33 +658,61 @@ static void file_read(INT32 args)
     push_int(0);
 }
 
+#ifdef HAVE_AND_USE_POLL
+#include <poll.h>
+#else
+
 #ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
 #endif
+#endif
 
 #ifndef __NT__
 static void file_peek(INT32 args)
 {
+#ifdef HAVE_AND_USE_POLL
+  struct pollfd fds;
+  int ret;
+
+  fds.fd=THIS->fd;
+  fds.events=POLLIN;
+  fds.revents=0;
+
+  THREADS_ALLOW();
+  ret=poll(&fds, 1, 0);
+  THREADS_DISALLOW();
+
+  if(ret < 0)
+  {
+    ERRNO=errno;
+    ret=-1;
+  }else{
+    ret = ret>=0 && (fds.revents & POLLIN);
+  }
+#else
   int ret;
   fd_set tmp;
   struct timeval tv;
+
   tv.tv_usec=0;
   tv.tv_sec=0;
   fd_FD_ZERO(&tmp);
   fd_FD_SET(ret=THIS->fd, &tmp);
+
   THREADS_ALLOW();
   ret=select(ret+1,&tmp,0,0,&tv);
   THREADS_DISALLOW();
 
-  pop_n_elems(args);
-
   if(ret < 0)
   {
     ERRNO=errno;
-    push_int(-1);
+    ret=-1;
   }else{
-    push_int( ret>0 && fd_FD_ISSET(THIS->fd, &tmp));
+    ret= ret>0 && fd_FD_ISSET(THIS->fd, &tmp);
   }
+#endif
+  pop_n_elems(args);
+  push_int(ret);
 }
 #endif
 
-- 
GitLab