diff options
author | peter <peter@FreeBSD.org> | 1997-09-14 02:46:44 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1997-09-14 02:46:44 +0000 |
commit | 4a2b1a3ff1be799e69773c3f24571970cfe92203 (patch) | |
tree | 9a6202f4270d34a61c8e70a388e51c6b60ad226b /sys/kern | |
parent | 84169dafe13181317abdf92a749f1de64b953727 (diff) | |
download | FreeBSD-src-4a2b1a3ff1be799e69773c3f24571970cfe92203.zip FreeBSD-src-4a2b1a3ff1be799e69773c3f24571970cfe92203.tar.gz |
Extend select hook to support poll
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/subr_log.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/sys/kern/subr_log.c b/sys/kern/subr_log.c index 1418709..13807bf 100644 --- a/sys/kern/subr_log.c +++ b/sys/kern/subr_log.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)subr_log.c 8.1 (Berkeley) 6/10/93 - * $Id: subr_log.c,v 1.21 1997/03/23 03:36:22 bde Exp $ + * $Id: subr_log.c,v 1.22 1997/03/24 11:52:25 bde Exp $ */ /* @@ -49,6 +49,7 @@ #include <sys/fcntl.h> #include <sys/signalvar.h> #include <sys/kernel.h> +#include <sys/poll.h> #ifdef DEVFS #include <sys/devfsext.h> #endif /*DEVFS*/ @@ -62,13 +63,13 @@ static d_open_t logopen; static d_close_t logclose; static d_read_t logread; static d_ioctl_t logioctl; -static d_select_t logselect; +static d_poll_t logpoll; #define CDEV_MAJOR 7 static struct cdevsw log_cdevsw = { logopen, logclose, logread, nowrite, /*7*/ logioctl, nostop, nullreset, nodevtotty,/* klog */ - logselect, nommap, NULL, "log", NULL, -1 }; + logpoll, nommap, NULL, "log", NULL, -1 }; static struct logsoftc { int sc_state; /* see above for possibilities */ @@ -153,25 +154,24 @@ logread(dev, uio, flag) /*ARGSUSED*/ static int -logselect(dev, rw, p) +logpoll(dev, events, p) dev_t dev; - int rw; + int events; struct proc *p; { - int s = splhigh(); + int s; + int revents = 0; - switch (rw) { + s = splhigh(); + + if (events & (POLLIN | POLLRDNORM)) + if (msgbufp->msg_bufr != msgbufp->msg_bufx) + revents |= events & (POLLIN | POLLRDNORM); + else + selrecord(p, &logsoftc.sc_selp); - case FREAD: - if (msgbufp->msg_bufr != msgbufp->msg_bufx) { - splx(s); - return (1); - } - selrecord(p, &logsoftc.sc_selp); - break; - } splx(s); - return (0); + return (revents); } void |