summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorpooka <pooka@NetBSD.org>2007-12-03 15:24:06 +0000
committerpooka <pooka@NetBSD.org>2007-12-03 15:24:06 +0000
commitaf3b65635ecc364f5a4d81eb36b75398367d5abd (patch)
tree2431951fdc20daee3d2bb61f84c15694b7d940ef /sys/dev
parent01f5a6d143eadcb7a566eda1280b1987ad57e4be (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.c34
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.