to avoid mucking in the iov's; switch to u_char so we don't have to mask
SCCS-vsn: sys/kern/tty_pty.c 7.17
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)tty_pty.c 7.16 (Berkeley) %G%
+ * @(#)tty_pty.c 7.17 (Berkeley) %G%
register struct uio *uio;
{
register struct tty *tp = &pt_tty[minor(dev)];
register struct uio *uio;
{
register struct tty *tp = &pt_tty[minor(dev)];
- register struct iovec *iov;
- register char *cp;
int cnt = 0;
struct pt_ioctl *pti = &pt_ioctl[minor(dev)];
int error = 0;
int cnt = 0;
struct pt_ioctl *pti = &pt_ioctl[minor(dev)];
int error = 0;
if (pti->pt_flags & PF_REMOTE) {
if (tp->t_canq.c_cc)
goto block;
if (pti->pt_flags & PF_REMOTE) {
if (tp->t_canq.c_cc)
goto block;
- while (uio->uio_iovcnt > 0 && tp->t_canq.c_cc < TTYHOG - 1) {
- iov = uio->uio_iov;
- if (iov->iov_len == 0) {
- uio->uio_iovcnt--;
- uio->uio_iov++;
- continue;
- }
+ while (uio->uio_resid > 0 && tp->t_canq.c_cc < TTYHOG - 1) {
- cc = MIN(iov->iov_len, BUFSIZ);
- cc = MIN(cc, TTYHOG - 1 - tp->t_canq.c_cc);
+ cc = min(uio->uio_resid, BUFSIZ);
+ cc = min(cc, TTYHOG - 1 - tp->t_canq.c_cc);
- error = uiomove(cp, cc, uio);
+ error = uiomove((caddr_t)cp, cc, uio);
if (error)
return (error);
/* check again for safety */
if (error)
return (error);
/* check again for safety */
- (void) b_to_q(cp, cc, &tp->t_canq);
+ (void) b_to_q((char *)cp, cc, &tp->t_canq);
cc = 0;
}
(void) putc(0, &tp->t_canq);
cc = 0;
}
(void) putc(0, &tp->t_canq);
wakeup((caddr_t)&tp->t_canq);
return (0);
}
wakeup((caddr_t)&tp->t_canq);
return (0);
}
- while (uio->uio_iovcnt > 0) {
- iov = uio->uio_iov;
+ while (uio->uio_resid > 0) {
- if (iov->iov_len == 0) {
- uio->uio_iovcnt--;
- uio->uio_iov++;
- continue;
- }
- cc = MIN(iov->iov_len, BUFSIZ);
+ cc = min(uio->uio_resid, BUFSIZ);
- error = uiomove(cp, cc, uio);
+ error = uiomove((caddr_t)cp, cc, uio);
if (error)
return (error);
/* check again for safety */
if (error)
return (error);
/* check again for safety */
wakeup((caddr_t)&tp->t_rawq);
goto block;
}
wakeup((caddr_t)&tp->t_rawq);
goto block;
}
- (*linesw[tp->t_line].l_rint)(*cp++&0377, tp);
+ (*linesw[tp->t_line].l_rint)(*cp++, tp);
*/
if ((tp->t_state&TS_CARR_ON) == 0)
return (EIO);
*/
if ((tp->t_state&TS_CARR_ON) == 0)
return (EIO);
- if ((pti->pt_flags & PF_NBIO) || (flag & IO_NDELAY)) {
- iov->iov_base -= cc;
- iov->iov_len += cc;
+ if (flag & IO_NDELAY) {
+ /* adjust for data copied in but not written */
if (cnt == 0)
return (EWOULDBLOCK);
return (0);
}
if (error = tsleep((caddr_t)&tp->t_rawq.c_cf, TTOPRI | PCATCH,
if (cnt == 0)
return (EWOULDBLOCK);
return (0);
}
if (error = tsleep((caddr_t)&tp->t_rawq.c_cf, TTOPRI | PCATCH,
+ ttyout, 0)) {
+ /* adjust for data copied in but not written */
+ uio->uio_resid += cc;
ttyflush(tp, FREAD|FWRITE);
return (0);
ttyflush(tp, FREAD|FWRITE);
return (0);
- case FIONBIO:
- if (*(int *)data)
- pti->pt_flags |= PF_NBIO;
- else
- pti->pt_flags &= ~PF_NBIO;
- return (0);
-
case FIONREAD:
*(int *)data = tp->t_outq.c_cc;
return (0);
case FIONREAD:
*(int *)data = tp->t_outq.c_cc;
return (0);
case TIOCSETA:
case TIOCSETAW:
case TIOCSETAF:
case TIOCSETA:
case TIOCSETAW:
case TIOCSETAF:
- case JUNK_TIOCSETAS:
- case JUNK_TIOCSETAWS:
- case JUNK_TIOCSETAFS:
+ case JUNK_TIOCSETAS: /* XXX */
+ case JUNK_TIOCSETAWS: /* XXX */
+ case JUNK_TIOCSETAFS: /* XXX */
while (getc(&tp->t_outq) >= 0)
;
break;
while (getc(&tp->t_outq) >= 0)
;
break;
*/
if (linesw[tp->t_line].l_rint != ttyinput) {
(*linesw[tp->t_line].l_close)(tp);
*/
if (linesw[tp->t_line].l_rint != ttyinput) {
(*linesw[tp->t_line].l_close)(tp);
(void)(*linesw[tp->t_line].l_open)(dev, tp, flag);
error = ENOTTY;
}
(void)(*linesw[tp->t_line].l_open)(dev, tp, flag);
error = ENOTTY;
}
case TIOCSETA:
case TIOCSETAW:
case TIOCSETAF:
case TIOCSETA:
case TIOCSETAW:
case TIOCSETAF:
- case JUNK_TIOCSETAS:
- case JUNK_TIOCSETAWS:
- case JUNK_TIOCSETAFS:
+ case JUNK_TIOCSETAS: /* XXX */
+ case JUNK_TIOCSETAWS: /* XXX */
+ case JUNK_TIOCSETAFS: /* XXX */
case TIOCSETP:
case TIOCSETN:
#ifdef COMPAT_43
case TIOCSETP:
case TIOCSETN:
#ifdef COMPAT_43