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