mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
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;
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
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) {
|
||||
case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
|
||||
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 */
|
||||
return pty_signal(tty, (int) arg);
|
||||
}
|
||||
@ -512,6 +536,8 @@ static int pty_unix98_ioctl(struct tty_struct *tty,
|
||||
switch (cmd) {
|
||||
case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
|
||||
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 */
|
||||
return put_user(tty->index, (unsigned int __user *)arg);
|
||||
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,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
unsigned long flags;
|
||||
int retval;
|
||||
|
||||
switch (cmd) {
|
||||
@ -1153,26 +1152,6 @@ int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
||||
return 0;
|
||||
case TCFLSH:
|
||||
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:
|
||||
/* Try the mode commands */
|
||||
return tty_mode_ioctl(tty, file, cmd, arg);
|
||||
|
Loading…
Reference in New Issue
Block a user