]> Pileus Git - ~andy/linux/blobdiff - drivers/tty/pty.c
tty: Add get- ioctls to fetch tty status v3
[~andy/linux] / drivers / tty / pty.c
index df3c64272d21561485dbd0feb1a838f88e79f7f3..0ce0b3ec2bb026905a32414dfe880d26e529499d 100644 (file)
@@ -171,6 +171,12 @@ static int pty_set_lock(struct tty_struct *tty, int __user *arg)
        return 0;
 }
 
+static int pty_get_lock(struct tty_struct *tty, int __user *arg)
+{
+       int locked = test_bit(TTY_PTY_LOCK, &tty->flags);
+       return put_user(locked, arg);
+}
+
 /* Set the packet mode on a pty */
 static int pty_set_pktmode(struct tty_struct *tty, int __user *arg)
 {
@@ -193,6 +199,13 @@ static int pty_set_pktmode(struct tty_struct *tty, int __user *arg)
        return 0;
 }
 
+/* Get the packet mode of a pty */
+static int pty_get_pktmode(struct tty_struct *tty, int __user *arg)
+{
+       int pktmode = tty->packet;
+       return put_user(pktmode, arg);
+}
+
 /* Send a signal to the slave */
 static int pty_signal(struct tty_struct *tty, int sig)
 {
@@ -420,8 +433,12 @@ 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 TIOCGPTLCK: /* Get PT Lock status */
+               return pty_get_lock(tty, (int __user *)arg);
        case TIOCPKT: /* Set PT packet mode */
                return pty_set_pktmode(tty, (int __user *)arg);
+       case TIOCGPKT: /* Get PT packet mode */
+               return pty_get_pktmode(tty, (int __user *)arg);
        case TIOCSIG:    /* Send signal to other side of pty */
                return pty_signal(tty, (int) arg);
        }
@@ -536,8 +553,12 @@ 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 TIOCGPTLCK: /* Get PT Lock status */
+               return pty_get_lock(tty, (int __user *)arg);
        case TIOCPKT: /* Set PT packet mode */
                return pty_set_pktmode(tty, (int __user *)arg);
+       case TIOCGPKT: /* Get PT packet mode */
+               return pty_get_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 */