diff options
author | ache <ache@FreeBSD.org> | 1995-04-13 11:11:11 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1995-04-13 11:11:11 +0000 |
commit | fdacac9026b1aa66b01fab9a5394fe2f9f49aa65 (patch) | |
tree | ad11228f46e18f4de11967fbd62b3b80c989ad70 /sys/dev | |
parent | 8e8b125da97c80f30ce95c7a17fac7cda8203951 (diff) | |
download | FreeBSD-src-fdacac9026b1aa66b01fab9a5394fe2f9f49aa65.zip FreeBSD-src-fdacac9026b1aa66b01fab9a5394fe2f9f49aa65.tar.gz |
Move setcompat code to another place, initial/locked devices
not supposed to work with old style ioctls
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/sio/sio.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c index a3c8f2e..f652839 100644 --- a/sys/dev/sio/sio.c +++ b/sys/dev/sio/sio.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)com.c 7.5 (Berkeley) 5/16/91 - * $Id: sio.c,v 1.91 1995/04/12 22:00:41 phk Exp $ + * $Id: sio.c,v 1.92 1995/04/13 09:22:40 ache Exp $ */ #include "sio.h" @@ -1286,7 +1286,6 @@ sioioctl(dev, cmd, data, flag, p) int s; int tiocm_xxx; struct tty *tp; - struct termios *ct; #if defined(COMPAT_43) || defined(COMPAT_SUNOS) struct termios term; int oldcmd; @@ -1295,9 +1294,9 @@ sioioctl(dev, cmd, data, flag, p) mynor = minor(dev); com = com_addr(MINOR_TO_UNIT(mynor)); iobase = com->iobase; - tp = com->tp; - ct = NULL; if (mynor & CONTROL_MASK) { + struct termios *ct; + switch (mynor & CONTROL_MASK) { case CONTROL_INIT_STATE: ct = mynor & CALLOUT_MASK ? &com->it_out : &com->it_in; @@ -1308,16 +1307,6 @@ sioioctl(dev, cmd, data, flag, p) default: return (ENODEV); /* /dev/nodev */ } - } -#if defined(COMPAT_43) || defined(COMPAT_SUNOS) - term = ct != NULL ? *ct : tp->t_termios; - oldcmd = cmd; - if ((error = ttsetcompat(tp, &cmd, data, &term)) != 0) - return error; - if (cmd != oldcmd) - data = (caddr_t)&term; -#endif - if (mynor & CONTROL_MASK) { switch (cmd) { case TIOCSETA: error = suser(p->p_ucred, &p->p_acflag); @@ -1366,6 +1355,15 @@ sioioctl(dev, cmd, data, flag, p) return (ENOTTY); } } + tp = com->tp; +#if defined(COMPAT_43) || defined(COMPAT_SUNOS) + term = tp->t_termios; + oldcmd = cmd; + if ((error = ttsetcompat(tp, &cmd, data, &term)) != 0) + return error; + if (cmd != oldcmd) + data = (caddr_t)&term; +#endif if (cmd == TIOCSETA || cmd == TIOCSETAW || cmd == TIOCSETAF) { int cc; struct termios *dt = (struct termios *)data; |