[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] term: fix receiver lookups in the tioctl server function
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/2] term: fix receiver lookups in the tioctl server functions |
Date: |
Fri, 28 Feb 2014 15:02:25 -0500 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Justus Winter, le Fri 28 Feb 2014 20:12:24 +0100, a écrit :
> * term/mig-mutate.h: New file.
> * term/Makefile: Set tioctl-MIGSFLAGS.
> * term/ptyio.c: Fix receiver lookups in the tioctl server functions.
> * term/users.c: Likewise.
Ack.
> ---
> term/Makefile | 2 +
> term/mig-mutate.h | 24 ++++++
> term/ptyio.c | 48 +++++-------
> term/users.c | 225
> ++++++++++++++++++++----------------------------------
> 4 files changed, 130 insertions(+), 169 deletions(-)
> create mode 100644 term/mig-mutate.h
>
> diff --git a/term/Makefile b/term/Makefile
> index 025a9b3..9537c60 100644
> --- a/term/Makefile
> +++ b/term/Makefile
> @@ -32,3 +32,5 @@ OBJS = $(subst .c,.o,$(SRCS)) termServer.o
> device_replyServer.o tioctlServer.o o
> include ../Makeconf
>
> device_replyServer-CPPFLAGS = -DTypeCheck=0 -Wno-unused # XXX
> +
> +tioctl-MIGSFLAGS = -imacros $(srcdir)/mig-mutate.h
> diff --git a/term/mig-mutate.h b/term/mig-mutate.h
> new file mode 100644
> index 0000000..7cc13aa
> --- /dev/null
> +++ b/term/mig-mutate.h
> @@ -0,0 +1,24 @@
> +/*
> + Copyright (C) 2014 Free Software Foundation, Inc.
> + Written by Justus Winter.
> +
> + This file is part of the GNU Hurd.
> +
> + The GNU Hurd is free software; you can redistribute it and/or
> + modify it under the terms of the GNU General Public License as
> + published by the Free Software Foundation; either version 2, or (at
> + your option) any later version.
> +
> + The GNU Hurd is distributed in the hope that it will be useful, but
> + WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + General Public License for more details.
> +
> + You should have received a copy of the GNU General Public License
> + along with the GNU Hurd. If not, see <http://www.gnu.org/licenses/>. */
> +
> +/* Only CPP macro definitions should go in this file. */
> +
> +#define IO_INTRAN trivfs_protid_t trivfs_begin_using_protid (io_t)
> +#define IO_DESTRUCTOR trivfs_end_using_protid (trivfs_protid_t)
> +#define TIOCTL_IMPORTS import "../libtrivfs/mig-decls.h";
> diff --git a/term/ptyio.c b/term/ptyio.c
> index 2da7d6c..211e70a 100644
> --- a/term/ptyio.c
> +++ b/term/ptyio.c
> @@ -512,12 +512,12 @@ pty_io_select (struct trivfs_protid *cred, mach_port_t
> reply,
> }
>
> error_t
> -S_tioctl_tiocsig (io_t port,
> +S_tioctl_tiocsig (struct trivfs_protid *cred,
> int sig)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> - port, pty_class);
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket
> + || cred->pi.class != pty_class)
> return EOPNOTSUPP;
>
> pthread_mutex_lock (&global_lock);
> @@ -529,20 +529,18 @@ S_tioctl_tiocsig (io_t port,
> send_signal (sig);
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
>
> return 0;
> }
>
> error_t
> -S_tioctl_tiocpkt (io_t port,
> +S_tioctl_tiocpkt (struct trivfs_protid *cred,
> int mode)
> {
> error_t err;
> -
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> - port, pty_class);
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket
> + || cred->pi.class != pty_class)
> return EOPNOTSUPP;
>
> pthread_mutex_lock (&global_lock);
> @@ -559,20 +557,18 @@ S_tioctl_tiocpkt (io_t port,
> }
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
>
> return err;
> }
>
> error_t
> -S_tioctl_tiocucntl (io_t port,
> +S_tioctl_tiocucntl (struct trivfs_protid *cred,
> int mode)
> {
> error_t err;
> -
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> - port, pty_class);
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket
> + || cred->pi.class != pty_class)
> return EOPNOTSUPP;
>
> pthread_mutex_lock (&global_lock);
> @@ -589,19 +585,17 @@ S_tioctl_tiocucntl (io_t port,
> }
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
>
> return err;
> }
>
> error_t
> -S_tioctl_tiocremote (io_t port,
> +S_tioctl_tiocremote (struct trivfs_protid *cred,
> int how)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> - port, pty_class);
> -
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket
> + || cred->pi.class != pty_class)
> return EOPNOTSUPP;
>
> pthread_mutex_lock (&global_lock);
> @@ -611,17 +605,16 @@ S_tioctl_tiocremote (io_t port,
> clear_queue (rawq);
> ptyio_notice_input_flushed ();
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return 0;
> }
>
> error_t
> -S_tioctl_tiocext (io_t port,
> +S_tioctl_tiocext (struct trivfs_protid *cred,
> int mode)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket,
> - port, pty_class);
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket
> + || cred->pi.class != pty_class)
> return EOPNOTSUPP;
>
> pthread_mutex_lock (&global_lock);
> @@ -646,6 +639,5 @@ S_tioctl_tiocext (io_t port,
> termstate.c_lflag &= ~EXTPROC;
> }
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return 0;
> }
> diff --git a/term/users.c b/term/users.c
> index eacd150..3f55839 100644
> --- a/term/users.c
> +++ b/term/users.c
> @@ -902,19 +902,18 @@ trivfs_S_io_revoke (struct trivfs_protid *cred,
>
> /* TIOCMODG ioctl -- Get modem state */
> kern_return_t
> -S_tioctl_tiocmodg (io_t port,
> +S_tioctl_tiocmodg (struct trivfs_protid *cred,
> int *state)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err = 0;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -922,24 +921,22 @@ S_tioctl_tiocmodg (io_t port,
> err = (*bottom->mdmstate) (state);
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCMODS ioctl -- Set modem state */
> kern_return_t
> -S_tioctl_tiocmods (io_t port,
> +S_tioctl_tiocmods (struct trivfs_protid *cred,
> int state)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -952,23 +949,21 @@ S_tioctl_tiocmods (io_t port,
>
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCEXCL ioctl -- Set exclusive use */
> kern_return_t
> -S_tioctl_tiocexcl (io_t port)
> +S_tioctl_tiocexcl (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -983,24 +978,22 @@ S_tioctl_tiocexcl (io_t port)
> }
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCNXCL ioctl -- Clear exclusive use */
> kern_return_t
> -S_tioctl_tiocnxcl (io_t port)
> +S_tioctl_tiocnxcl (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1014,25 +1007,23 @@ S_tioctl_tiocnxcl (io_t port)
> }
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCFLUSH ioctl -- Flush input, output, or both */
> kern_return_t
> -S_tioctl_tiocflush (io_t port,
> +S_tioctl_tiocflush (struct trivfs_protid *cred,
> int flags)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err = 0;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1056,26 +1047,23 @@ S_tioctl_tiocflush (io_t port,
> }
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCGETA ioctl -- Get termios state */
> kern_return_t
> -S_tioctl_tiocgeta (io_t port,
> +S_tioctl_tiocgeta (struct trivfs_protid *cred,
> tcflag_t *modes,
> cc_t *ccs,
> speed_t *speeds)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> -
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1089,30 +1077,28 @@ S_tioctl_tiocgeta (io_t port,
> speeds[1] = termstate.__ospeed;
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return 0;
> }
>
> /* Common code for the varios TIOCSET* commands. */
> static error_t
> -set_state (io_t port,
> +set_state (struct trivfs_protid *cred,
> tcflag_t *modes,
> cc_t *ccs,
> speed_t *speeds,
> int draino,
> int flushi)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
> struct termios state;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1181,80 +1167,75 @@ set_state (io_t port,
>
> leave:
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
>
> /* TIOCSETA -- Set termios state */
> kern_return_t
> -S_tioctl_tiocseta (io_t port,
> +S_tioctl_tiocseta (struct trivfs_protid *cred,
> tcflag_t *modes,
> cc_t *ccs,
> speed_t *speeds)
> {
> - return set_state (port, modes, ccs, speeds, 0, 0);
> + return set_state (cred, modes, ccs, speeds, 0, 0);
> }
>
> /* Drain output, then set term state. */
> kern_return_t
> -S_tioctl_tiocsetaw (io_t port,
> +S_tioctl_tiocsetaw (struct trivfs_protid *cred,
> tcflag_t *modes,
> cc_t *ccs,
> speed_t *speeds)
> {
> - return set_state (port, modes, ccs, speeds, 1, 0);
> + return set_state (cred, modes, ccs, speeds, 1, 0);
> }
>
> /* Flush input, drain output, then set term state. */
> kern_return_t
> -S_tioctl_tiocsetaf (io_t port,
> +S_tioctl_tiocsetaf (struct trivfs_protid *cred,
> tcflag_t *modes,
> cc_t *ccs,
> speed_t *speeds)
>
> {
> - return set_state (port, modes, ccs, speeds, 1, 1);
> + return set_state (cred, modes, ccs, speeds, 1, 1);
> }
>
> /* TIOCGETD -- Return line discipline */
> kern_return_t
> -S_tioctl_tiocgetd (io_t port,
> +S_tioctl_tiocgetd (struct trivfs_protid *cred,
> int *disc)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> -
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> *disc = 0;
>
> - ports_port_deref (cred);
> return 0;
> }
>
> /* TIOCSETD -- Set line discipline */
> kern_return_t
> -S_tioctl_tiocsetd (io_t port,
> +S_tioctl_tiocsetd (struct trivfs_protid *cred,
> int disc)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1268,24 +1249,22 @@ S_tioctl_tiocsetd (io_t port,
> else
> err = 0;
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCDRAIN -- Wait for output to drain */
> kern_return_t
> -S_tioctl_tiocdrain (io_t port)
> +S_tioctl_tiocdrain (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1293,31 +1272,28 @@ S_tioctl_tiocdrain (io_t port)
> if (!(cred->po->openmodes & O_WRITE))
> {
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return EBADF;
> }
>
> err = drain_output ();
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSWINSZ -- Set window size */
> kern_return_t
> -S_tioctl_tiocswinsz (io_t port,
> +S_tioctl_tiocswinsz (struct trivfs_protid *cred,
> struct winsize size)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1328,8 +1304,6 @@ S_tioctl_tiocswinsz (io_t port,
> else
> err = 0;
>
> - ports_port_deref (cred);
> -
> if (! err
> && (size.ws_row != window_size.ws_row
> || size.ws_col != window_size.ws_col
> @@ -1348,18 +1322,16 @@ S_tioctl_tiocswinsz (io_t port,
>
> /* TIOCGWINSZ -- Fetch window size */
> kern_return_t
> -S_tioctl_tiocgwinsz (io_t port,
> +S_tioctl_tiocgwinsz (struct trivfs_protid *cred,
> struct winsize *size)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> -
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1367,25 +1339,23 @@ S_tioctl_tiocgwinsz (io_t port,
> *size = window_size;
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return 0;
> }
>
> /* TIOCMGET -- Fetch all modem bits */
> kern_return_t
> -S_tioctl_tiocmget (io_t port,
> +S_tioctl_tiocmget (struct trivfs_protid *cred,
> int *bits)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err = 0;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1393,25 +1363,23 @@ S_tioctl_tiocmget (io_t port,
> err = (*bottom->mdmstate) (bits);
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCMSET -- Set all modem bits */
> kern_return_t
> -S_tioctl_tiocmset (io_t port,
> +S_tioctl_tiocmset (struct trivfs_protid *cred,
> int bits)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1422,25 +1390,23 @@ S_tioctl_tiocmset (io_t port,
> err = (*bottom->mdmctl) (MDMCTL_SET, bits);
>
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCMBIC -- Clear some modem bits */
> kern_return_t
> -S_tioctl_tiocmbic (io_t port,
> +S_tioctl_tiocmbic (struct trivfs_protid *cred,
> int bits)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1451,25 +1417,23 @@ S_tioctl_tiocmbic (io_t port,
> err = (*bottom->mdmctl) (MDMCTL_BIC, bits);
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCMBIS -- Set some modem bits */
> kern_return_t
> -S_tioctl_tiocmbis (io_t port,
> +S_tioctl_tiocmbis (struct trivfs_protid *cred,
> int bits)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1480,24 +1444,22 @@ S_tioctl_tiocmbis (io_t port,
> else
> err = (*bottom->mdmctl) (MDMCTL_BIS, bits);
> pthread_mutex_unlock (&global_lock);
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSTART -- start output as if VSTART were typed */
> kern_return_t
> -S_tioctl_tiocstart (io_t port)
> +S_tioctl_tiocstart (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1516,24 +1478,22 @@ S_tioctl_tiocstart (io_t port)
> }
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSTOP -- stop output as if VSTOP were typed */
> kern_return_t
> -S_tioctl_tiocstop (io_t port)
> +S_tioctl_tiocstop (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
> pthread_mutex_lock (&global_lock);
> @@ -1550,25 +1510,23 @@ S_tioctl_tiocstop (io_t port)
> }
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSTI -- Simulate terminal input */
> kern_return_t
> -S_tioctl_tiocsti (io_t port,
> +S_tioctl_tiocsti (struct trivfs_protid *cred,
> char c)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1587,25 +1545,23 @@ S_tioctl_tiocsti (io_t port,
> }
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCOUTQ -- return output queue size */
> kern_return_t
> -S_tioctl_tiocoutq (io_t port,
> +S_tioctl_tiocoutq (struct trivfs_protid *cred,
> int *queue_size)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1620,25 +1576,23 @@ S_tioctl_tiocoutq (io_t port,
> }
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSPGRP -- set pgrp of terminal */
> kern_return_t
> -S_tioctl_tiocspgrp (io_t port,
> +S_tioctl_tiocspgrp (struct trivfs_protid *cred,
> int pgrp)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1653,25 +1607,23 @@ S_tioctl_tiocspgrp (io_t port,
> }
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCGPGRP --- fetch pgrp of terminal */
> kern_return_t
> -S_tioctl_tiocgpgrp (io_t port,
> +S_tioctl_tiocgpgrp (struct trivfs_protid *cred,
> int *pgrp)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t ret;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1685,24 +1637,22 @@ S_tioctl_tiocgpgrp (io_t port,
> }
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return ret;
> }
>
> /* TIOCCDTR -- clear DTR */
> kern_return_t
> -S_tioctl_tioccdtr (io_t port)
> +S_tioctl_tioccdtr (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1713,24 +1663,22 @@ S_tioctl_tioccdtr (io_t port)
> err = (*bottom->mdmctl) (MDMCTL_BIC, TIOCM_DTR);
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSDTR -- set DTR */
> kern_return_t
> -S_tioctl_tiocsdtr (io_t port)
> +S_tioctl_tiocsdtr (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1741,24 +1689,22 @@ S_tioctl_tiocsdtr (io_t port)
> err = (*bottom->mdmctl) (MDMCTL_BIS, TIOCM_DTR);
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCCBRK -- Clear break condition */
> kern_return_t
> -S_tioctl_tioccbrk (io_t port)
> +S_tioctl_tioccbrk (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1769,24 +1715,22 @@ S_tioctl_tioccbrk (io_t port)
> err = (*bottom->clear_break) ();
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> /* TIOCSBRK -- Set break condition */
> kern_return_t
> -S_tioctl_tiocsbrk (io_t port)
> +S_tioctl_tiocsbrk (struct trivfs_protid *cred)
> {
> - struct trivfs_protid *cred = ports_lookup_port (term_bucket, port, 0);
> error_t err;
>
> - if (!cred)
> + if (!cred
> + || cred->pi.bucket != term_bucket)
> return EOPNOTSUPP;
>
> if (cred->pi.class != pty_class
> && cred->pi.class != tty_class)
> {
> - ports_port_deref (cred);
> return EOPNOTSUPP;
> }
>
> @@ -1797,7 +1741,6 @@ S_tioctl_tiocsbrk (io_t port)
> err = (*bottom->set_break) ();
> pthread_mutex_unlock (&global_lock);
>
> - ports_port_deref (cred);
> return err;
> }
>
> --
> 1.8.5.3
>
--
Samuel
<erno> hm. I've lost a machine.. literally _lost_. it responds to ping, it
works completely, I just can't figure out where in my apartment it is.