Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Nov 2011 16:49:37 -0800
From:      Peter Wemm <peter@wemm.org>
To:        Giovanni Trematerra <gianni@freebsd.org>
Cc:        freebsd-arch@freebsd.org
Subject:   Re: deprecated TIOCSPGRP and TIOCGPGRP ioctl command
Message-ID:  <CAGE5yCor9c%2Bb7hZaF8NLdxc2F8PPfi0kTZFLXY5nvA%2Bbm1Ytuw@mail.gmail.com>
In-Reply-To: <CACfq09210zdar=%2BM40gLoVtZnwLda88T1FJBbLXiy9e3t8-9NQ@mail.gmail.com>
References:  <CACfq09210zdar=%2BM40gLoVtZnwLda88T1FJBbLXiy9e3t8-9NQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Nov 9, 2011 at 3:39 PM, Giovanni Trematerra <gianni@freebsd.org> wr=
ote:
> Are they deprecated enough to be removed, now?
> FYI FIFO doesn't support them.
>
> --
> Gianni
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- sys/kern/sys_pipe.c (revision 227233)
> +++ sys/kern/sys_pipe.c (working copy)
> @@ -1304,17 +1304,6 @@ pipe_ioctl(fp, cmd, data, active_cred, td)
> =A0 =A0 =A0 =A0*(int *)data =3D fgetown(&mpipe->pipe_sigio);
> =A0 =A0 =A0 =A0break;
>
> - =A0 /* This is deprecated, FIOSETOWN should be used instead. */
> - =A0 case TIOCSPGRP:
> - =A0 =A0 =A0 PIPE_UNLOCK(mpipe);
> - =A0 =A0 =A0 error =3D fsetown(-(*(int *)data), &mpipe->pipe_sigio);
> - =A0 =A0 =A0 goto out_unlocked;
> -
> - =A0 /* This is deprecated, FIOGETOWN should be used instead. */
> - =A0 case TIOCGPGRP:
> - =A0 =A0 =A0 *(int *)data =3D -fgetown(&mpipe->pipe_sigio);
> - =A0 =A0 =A0 break;
> -
> =A0 =A0default:
> =A0 =A0 =A0 =A0error =3D ENOTTY;

Be very very careful with this.  It's part of the classic BSD job
control API.  It would be wise to survey whether any ports shells use
this.

You might also want to consider things like this in libc:
int
tcsetpgrp(int fd, pid_t pgrp)
{
        int s;

        s =3D pgrp;
        return (_ioctl(fd, TIOCSPGRP, &s));
}
Our own libc code uses this, albeit on an API intended to be used on a tty.

The shell I'd be most concerned about is csh/tcsh in our tree. It has
quite an #ifdef legacy layer and I couldn't convince myself it wasn't
using this indirectly (or the tc* functions) on pipes.

It might also be an idea to see if the linux compat layer can be
switched over to using the newer API.

--=20
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com; KI6FJV
"All of this is for nothing if we don't go to the stars" - JMS/B5
"If Java had true garbage collection, most programs would delete
themselves upon execution." -- Robert Sewell



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGE5yCor9c%2Bb7hZaF8NLdxc2F8PPfi0kTZFLXY5nvA%2Bbm1Ytuw>