diff options
author | ed <ed@FreeBSD.org> | 2009-08-23 08:04:40 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-08-23 08:04:40 +0000 |
commit | 503bd5d6c51e4b39865925d17eb7f6d7708b93c6 (patch) | |
tree | 832ce47945c34ffc3c6cc8881a39f32c034bfb8a /sys/kern/tty_ttydisc.c | |
parent | 659df31c6cd55ed551bd24d090e55b1df6e9f152 (diff) | |
download | FreeBSD-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.c | 16 |
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; |