+ if (copyout((caddr_t)&tun, addr, sizeof(struct tchars)))
+ u.u_error = EFAULT;
+ break;
+
+/* local ioctls */
+ case TIOCSLTC:
+ if (copyin(addr, (caddr_t)&tlun, sizeof (struct ltchars)))
+ u.u_error = EFAULT;
+ break;
+
+ case TIOCGLTC:
+ if (copyout((caddr_t)&tlun, addr, sizeof (struct ltchars)))
+ u.u_error = EFAULT;
+ break;
+
+ case FIONREAD: {
+ off_t nread;
+
+ switch (tp->t_line) {
+
+ case NETLDISC:
+ nread = tp->t_rec ? tp->t_inbuf : 0;
+ break;
+
+ case NTTYDISC:
+ nread = tp->t_canq.c_cc;
+ if (tp->t_flags & (RAW|CBREAK))
+ nread += tp->t_rawq.c_cc;
+ break;
+
+ case 0:
+ /* do something here ... */
+ ;
+ }
+ if (copyout((caddr_t)&nread, addr, sizeof (off_t)))
+ u.u_error = EFAULT;
+ break;
+ }
+
+ /*
+ * Should allow SPGRP and GPGRP only if tty open for reading.
+ */
+ case TIOCSPGRP:
+ tp->t_pgrp = (int)addr;
+ break;
+
+ case TIOCGPGRP:
+ if (copyout((caddr_t)&tp->t_pgrp, addr, sizeof(tp->t_pgrp)))
+ u.u_error = EFAULT;
+ break;
+
+ /*
+ * Modify local mode word.
+ */
+ case TIOCLBIS:
+ tp->t_local |= (int)addr;
+ break;
+
+ case TIOCLBIC:
+ tp->t_local &= ~(int)addr;
+ break;
+
+ case TIOCLSET:
+ tp->t_local = (int)addr;
+ break;
+
+ case TIOCLGET:
+ if (copyout((caddr_t)&tp->t_local, addr, sizeof(tp->t_local)))
+ u.u_error = EFAULT;
+ break;
+
+ case TIOCOUTQ:
+ if (copyout((caddr_t)&tp->t_outq.c_cc, addr, sizeof(tp->t_outq.c_cc)))