tty: pty - Move TIOCPKT handling into pty.c
Since this ioctl is for pty devices only move it to pty.c. v2: - drop PTY_TYPE_MASTER test since it's master peer ioctl anyway (by jslaby@) Suggested-by: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> CC: "H. Peter Anvin" <hpa@zytor.com> CC: Pavel Emelyanov <xemul@parallels.com> CC: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ab72fa5523
commit
06026d911c
|
@ -171,6 +171,28 @@ static int pty_set_lock(struct tty_struct *tty, int __user *arg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the packet mode on a pty */
|
||||||
|
static int pty_set_pktmode(struct tty_struct *tty, int __user *arg)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
int pktmode;
|
||||||
|
|
||||||
|
if (get_user(pktmode, arg))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&tty->ctrl_lock, flags);
|
||||||
|
if (pktmode) {
|
||||||
|
if (!tty->packet) {
|
||||||
|
tty->packet = 1;
|
||||||
|
tty->link->ctrl_status = 0;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
tty->packet = 0;
|
||||||
|
spin_unlock_irqrestore(&tty->ctrl_lock, flags);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Send a signal to the slave */
|
/* Send a signal to the slave */
|
||||||
static int pty_signal(struct tty_struct *tty, int sig)
|
static int pty_signal(struct tty_struct *tty, int sig)
|
||||||
{
|
{
|
||||||
|
@ -398,6 +420,8 @@ static int pty_bsd_ioctl(struct tty_struct *tty,
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
|
case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
|
||||||
return pty_set_lock(tty, (int __user *) arg);
|
return pty_set_lock(tty, (int __user *) arg);
|
||||||
|
case TIOCPKT: /* Set PT packet mode */
|
||||||
|
return pty_set_pktmode(tty, (int __user *)arg);
|
||||||
case TIOCSIG: /* Send signal to other side of pty */
|
case TIOCSIG: /* Send signal to other side of pty */
|
||||||
return pty_signal(tty, (int) arg);
|
return pty_signal(tty, (int) arg);
|
||||||
}
|
}
|
||||||
|
@ -512,6 +536,8 @@ static int pty_unix98_ioctl(struct tty_struct *tty,
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
|
case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
|
||||||
return pty_set_lock(tty, (int __user *)arg);
|
return pty_set_lock(tty, (int __user *)arg);
|
||||||
|
case TIOCPKT: /* Set PT packet mode */
|
||||||
|
return pty_set_pktmode(tty, (int __user *)arg);
|
||||||
case TIOCGPTN: /* Get PT Number */
|
case TIOCGPTN: /* Get PT Number */
|
||||||
return put_user(tty->index, (unsigned int __user *)arg);
|
return put_user(tty->index, (unsigned int __user *)arg);
|
||||||
case TIOCSIG: /* Send signal to other side of pty */
|
case TIOCSIG: /* Send signal to other side of pty */
|
||||||
|
|
|
@ -1118,7 +1118,6 @@ EXPORT_SYMBOL_GPL(tty_perform_flush);
|
||||||
int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
||||||
unsigned int cmd, unsigned long arg)
|
unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
@ -1153,26 +1152,6 @@ int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
||||||
return 0;
|
return 0;
|
||||||
case TCFLSH:
|
case TCFLSH:
|
||||||
return tty_perform_flush(tty, arg);
|
return tty_perform_flush(tty, arg);
|
||||||
case TIOCPKT:
|
|
||||||
{
|
|
||||||
int pktmode;
|
|
||||||
|
|
||||||
if (tty->driver->type != TTY_DRIVER_TYPE_PTY ||
|
|
||||||
tty->driver->subtype != PTY_TYPE_MASTER)
|
|
||||||
return -ENOTTY;
|
|
||||||
if (get_user(pktmode, (int __user *) arg))
|
|
||||||
return -EFAULT;
|
|
||||||
spin_lock_irqsave(&tty->ctrl_lock, flags);
|
|
||||||
if (pktmode) {
|
|
||||||
if (!tty->packet) {
|
|
||||||
tty->packet = 1;
|
|
||||||
tty->link->ctrl_status = 0;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
tty->packet = 0;
|
|
||||||
spin_unlock_irqrestore(&tty->ctrl_lock, flags);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
/* Try the mode commands */
|
/* Try the mode commands */
|
||||||
return tty_mode_ioctl(tty, file, cmd, arg);
|
return tty_mode_ioctl(tty, file, cmd, arg);
|
||||||
|
|
Loading…
Reference in New Issue