diff options
author | swallace <swallace@FreeBSD.org> | 1996-03-28 19:53:21 +0000 |
---|---|---|
committer | swallace <swallace@FreeBSD.org> | 1996-03-28 19:53:21 +0000 |
commit | 36d7c0f69e83de877d0c68e381a22f89af81a7c2 (patch) | |
tree | bc15908c8989a32bbd1b2573a6c17582c3b8bfc7 /sys/i386/ibcs2/ibcs2_ioctl.c | |
parent | abe7f073d9f2b33d474721c03f3fa224c43e7fd7 (diff) | |
download | FreeBSD-src-36d7c0f69e83de877d0c68e381a22f89af81a7c2.zip FreeBSD-src-36d7c0f69e83de877d0c68e381a22f89af81a7c2.tar.gz |
Implement ioctl's IBCS2_TCFLSH and IBCS2_TCXONC. Improve termios conversion.
Implement xenix_eaccess() system call.
Obtained from: NetBSD
Diffstat (limited to 'sys/i386/ibcs2/ibcs2_ioctl.c')
-rw-r--r-- | sys/i386/ibcs2/ibcs2_ioctl.c | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/sys/i386/ibcs2/ibcs2_ioctl.c b/sys/i386/ibcs2/ibcs2_ioctl.c index 08e06c6..082d608 100644 --- a/sys/i386/ibcs2/ibcs2_ioctl.c +++ b/sys/i386/ibcs2/ibcs2_ioctl.c @@ -210,10 +210,15 @@ stios2btios(st, bt) st->c_cc[IBCS2_VERASE] ? st->c_cc[IBCS2_VERASE] : _POSIX_VDISABLE; bt->c_cc[VKILL] = st->c_cc[IBCS2_VKILL] ? st->c_cc[IBCS2_VKILL] : _POSIX_VDISABLE; - bt->c_cc[VEOF] = - st->c_cc[IBCS2_VEOF] ? st->c_cc[IBCS2_VEOF] : _POSIX_VDISABLE; - bt->c_cc[VEOL] = - st->c_cc[IBCS2_VEOL] ? st->c_cc[IBCS2_VEOL] : _POSIX_VDISABLE; + if (bt->c_lflag & ICANON) { + bt->c_cc[VEOF] = + st->c_cc[IBCS2_VEOF] ? st->c_cc[IBCS2_VEOF] : _POSIX_VDISABLE; + bt->c_cc[VEOL] = + st->c_cc[IBCS2_VEOL] ? st->c_cc[IBCS2_VEOL] : _POSIX_VDISABLE; + } else { + bt->c_cc[VMIN] = st->c_cc[IBCS2_VMIN]; + bt->c_cc[VTIME] = st->c_cc[IBCS2_VTIME]; + } bt->c_cc[VEOL2] = st->c_cc[IBCS2_VEOL2] ? st->c_cc[IBCS2_VEOL2] : _POSIX_VDISABLE; #if 0 @@ -301,10 +306,15 @@ btios2stios(bt, st) bt->c_cc[VERASE] != _POSIX_VDISABLE ? bt->c_cc[VERASE] : 0; st->c_cc[IBCS2_VKILL] = bt->c_cc[VKILL] != _POSIX_VDISABLE ? bt->c_cc[VKILL] : 0; - st->c_cc[IBCS2_VEOF] = - bt->c_cc[VEOF] != _POSIX_VDISABLE ? bt->c_cc[VEOF] : 0; - st->c_cc[IBCS2_VEOL] = - bt->c_cc[VEOL] != _POSIX_VDISABLE ? bt->c_cc[VEOL] : 0; + if (bt->c_lflag & ICANON) { + st->c_cc[IBCS2_VEOF] = + bt->c_cc[VEOF] != _POSIX_VDISABLE ? bt->c_cc[VEOF] : 0; + st->c_cc[IBCS2_VEOL] = + bt->c_cc[VEOL] != _POSIX_VDISABLE ? bt->c_cc[VEOL] : 0; + } else { + st->c_cc[IBCS2_VMIN] = bt->c_cc[VMIN]; + st->c_cc[IBCS2_VTIME] = bt->c_cc[VTIME]; + } st->c_cc[IBCS2_VEOL2] = bt->c_cc[VEOL2] != _POSIX_VDISABLE ? bt->c_cc[VEOL2] : 0; st->c_cc[IBCS2_VSWTCH] = @@ -470,12 +480,40 @@ ibcs2_ioctl(p, uap, retval) return ENOSYS; case IBCS2_TCXONC: - DPRINTF(("ibcs2_ioctl(%d): TCXONC ", p->p_pid)); - return ENOSYS; + { + switch ((int)SCARG(uap, data)) { + case 0: + case 1: + DPRINTF(("ibcs2_ioctl(%d): TCXONC ", p->p_pid)); + return ENOSYS; + case 2: + return (*ctl)(fp, TIOCSTOP, (caddr_t)0, p); + case 3: + return (*ctl)(fp, TIOCSTART, (caddr_t)1, p); + default: + return EINVAL; + } + } case IBCS2_TCFLSH: - DPRINTF(("ibcs2_ioctl(%d): TCFLSH ", p->p_pid)); - return ENOSYS; + { + int arg; + + switch ((int)SCARG(uap, data)) { + case 0: + arg = FREAD; + break; + case 1: + arg = FWRITE; + break; + case 2: + arg = FREAD | FWRITE; + break; + default: + return EINVAL; + } + return (*ctl)(fp, TIOCFLUSH, (caddr_t)&arg, p); + } case IBCS2_TIOCGWINSZ: SCARG(uap, cmd) = TIOCGWINSZ; |