diff options
| author | pooka <pooka@NetBSD.org> | 2007-12-03 15:24:06 +0000 |
|---|---|---|
| committer | pooka <pooka@NetBSD.org> | 2007-12-03 15:24:06 +0000 |
| commit | af3b65635ecc364f5a4d81eb36b75398367d5abd (patch) | |
| tree | 2431951fdc20daee3d2bb61f84c15694b7d940ef /sys/dev | |
| parent | 01f5a6d143eadcb7a566eda1280b1987ad57e4be (diff) | |
Allow EVFILT_WRITE kqfilters to be registered and map them to
seltrue_filtops.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/putter/putter.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/sys/dev/putter/putter.c b/sys/dev/putter/putter.c index 55473dc9108..9f940ea5c72 100644 --- a/sys/dev/putter/putter.c +++ b/sys/dev/putter/putter.c @@ -1,4 +1,4 @@ -/* $NetBSD: putter.c,v 1.5 2007/11/20 18:35:22 pooka Exp $ */ +/* $NetBSD: putter.c,v 1.6 2007/12/03 15:24:06 pooka Exp $ */ /* * Copyright (c) 2006, 2007 Antti Kantee. All Rights Reserved. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: putter.c,v 1.5 2007/11/20 18:35:22 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: putter.c,v 1.6 2007/12/03 15:24:06 pooka Exp $"); #include <sys/param.h> #include <sys/conf.h> @@ -383,7 +383,7 @@ filt_putterdetach(struct knote *kn) } static int -filt_putterioctl(struct knote *kn, long hint) +filt_putter(struct knote *kn, long hint) { struct putter_instance *pi = kn->kn_hook; int error; @@ -401,8 +401,8 @@ filt_putterioctl(struct knote *kn, long hint) return kn->kn_data != 0; } -static const struct filterops putterioctl_filtops = - { 1, NULL, filt_putterdetach, filt_putterioctl }; +static const struct filterops putter_filtops = + { 1, NULL, filt_putterdetach, filt_putter }; static int putter_fop_kqfilter(struct file *fp, struct knote *kn) @@ -410,21 +410,27 @@ putter_fop_kqfilter(struct file *fp, struct knote *kn) struct putter_instance *pi = fp->f_data; struct klist *klist; - if (kn->kn_filter != EVFILT_READ) - return 1; + switch (kn->kn_filter) { + case EVFILT_READ: + klist = &pi->pi_sel.sel_klist; + kn->kn_fop = &putter_filtops; + kn->kn_hook = pi; - klist = &pi->pi_sel.sel_klist; - kn->kn_fop = &putterioctl_filtops; - kn->kn_hook = pi; + mutex_enter(&pi_mtx); + SLIST_INSERT_HEAD(klist, kn, kn_selnext); + mutex_exit(&pi_mtx); - mutex_enter(&pi_mtx); - SLIST_INSERT_HEAD(klist, kn, kn_selnext); - mutex_exit(&pi_mtx); + break; + case EVFILT_WRITE: + kn->kn_fop = &seltrue_filtops; + break; + default: + return EINVAL; + } return 0; } - /* * Device routines. These are for when /dev/puffs is initially * opened before it has been cloned. |
