summaryrefslogtreecommitdiffstats
path: root/sys/kern/tty_ttydisc.c
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2009-08-23 08:04:40 +0000
committered <ed@FreeBSD.org>2009-08-23 08:04:40 +0000
commit503bd5d6c51e4b39865925d17eb7f6d7708b93c6 (patch)
tree832ce47945c34ffc3c6cc8881a39f32c034bfb8a /sys/kern/tty_ttydisc.c
parent659df31c6cd55ed551bd24d090e55b1df6e9f152 (diff)
downloadFreeBSD-src-503bd5d6c51e4b39865925d17eb7f6d7708b93c6.zip
FreeBSD-src-503bd5d6c51e4b39865925d17eb7f6d7708b93c6.tar.gz
Add ttydisc_rint_simple().
I noticed several drivers in our tree don't actually care about parity and framing, such as pts(4), snp(4) (and my partially finished console driver). Instead of duplicating a lot of code, I think we'd better add a utility function for those drivers to quickly process a buffer of input. Also change pts(4) and snp(4) to use this function.
Diffstat (limited to 'sys/kern/tty_ttydisc.c')
-rw-r--r--sys/kern/tty_ttydisc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/kern/tty_ttydisc.c b/sys/kern/tty_ttydisc.c
index debaa1c..d79a2b7 100644
--- a/sys/kern/tty_ttydisc.c
+++ b/sys/kern/tty_ttydisc.c
@@ -1045,6 +1045,22 @@ print:
}
size_t
+ttydisc_rint_simple(struct tty *tp, const void *buf, size_t len)
+{
+ const char *cbuf;
+
+ if (ttydisc_can_bypass(tp))
+ return (ttydisc_rint_bypass(tp, buf, len));
+
+ for (cbuf = buf; len-- > 0; cbuf++) {
+ if (ttydisc_rint(tp, *cbuf, 0) != 0)
+ break;
+ }
+
+ return (cbuf - (const char *)buf);
+}
+
+size_t
ttydisc_rint_bypass(struct tty *tp, const void *buf, size_t len)
{
size_t ret;
OpenPOWER on IntegriCloud