-/* $NetBSD: input.c,v 1.6 2002/09/19 21:12:10 mycroft Exp $ */
+/* $NetBSD: input.c,v 1.8 2002/12/29 15:12:17 kristerw Exp $ */
/*-
* Copyright (c) 1992, 1993
}
/*
- * Do a `read wait': select for reading from stdin, with timeout *tvp.
+ * Do a `read wait': poll for reading from stdin, with timeout *tvp.
* On return, modify *tvp to reflect the amount of time spent waiting.
* It will be positive only if input appeared before the time ran out;
* otherwise it will be zero or perhaps negative.
*
- * If tvp is nil, wait forever, but return if select is interrupted.
+ * If tvp is nil, wait forever, but return if poll is interrupted.
*
* Return 0 => no input, 1 => can read() from stdin
*/
struct timeval *tvp;
{
struct pollfd set[1];
- struct timeval starttv, endtv, *s;
+ struct timeval starttv, endtv;
+ int timeout;
#define NILTZ ((struct timezone *)0)
- /*
- * Someday, select() will do this for us.
- * Just in case that day is now, and no one has
- * changed this, we use a temporary.
- */
if (tvp) {
(void) gettimeofday(&starttv, NILTZ);
endtv = *tvp;
- s = &endtv;
+ timeout = tvp->tv_sec * 1000 + tvp->tv_usec / 1000;
} else
- s = 0;
+ timeout = INFTIM;
again:
set[0].fd = STDIN_FILENO;
set[0].events = POLLIN;
- switch (poll(set, 1, s->tv_sec * 1000 + s->tv_usec / 1000)) {
+ switch (poll(set, 1, timeout)) {
case -1:
if (tvp == 0)
return (-1);
if (errno == EINTR)
goto again;
- stop("select failed, help");
+ stop("poll failed, help");
/* NOTREACHED */
case 0: /* timed out */
}
/*
- * `sleep' for the current turn time (using select).
+ * `sleep' for the current turn time.
* Eat any input that might be available.
*/
void