Hi, Glibc is including <sys/ttydefaults.h> in <sys/ioctl.h> with following comment: /* On a Unix system, the system <sys/ioctl.h> probably defines some of the symbols we define in <sys/ttydefaults.h> (usually with the same values). The code to generate <bits/ioctls.h> has omitted these symbols to avoid the conflict, but a Unix program expects <sys/ioctl.h> to define them, so we must include <sys/ttydefaults.h> here. */ I guess glibc is (as usual) wrong and therefore users who needs these definitions should load also <sys/ttydefaults.h> explicitly. Kind regards, Petr
On Wed, Jan 29, 2020 at 01:50:12PM +0100, Petr Vorel wrote:
> Hi,
>
> Glibc is including <sys/ttydefaults.h> in <sys/ioctl.h> with following comment:
>
> /* On a Unix system, the system <sys/ioctl.h> probably defines some of
> the symbols we define in <sys/ttydefaults.h> (usually with the same
> values). The code to generate <bits/ioctls.h> has omitted these
> symbols to avoid the conflict, but a Unix program expects <sys/ioctl.h>
> to define them, so we must include <sys/ttydefaults.h> here. */
>
> I guess glibc is (as usual) wrong and therefore users who needs these
> definitions should load also <sys/ttydefaults.h> explicitly.
ioctl.h isn't governed by any current standard, so we could include
sys/ttydefaults.h here, but I don't think it makes sense to. These
macros logically have nothing to do with the ioctl interface; rather
they go with termios. Programs that want them should probably be
including the header explicitly, or better yet not using them at all.
I also found a couple small issues in that header I'm fixing now.
Rich
* Petr Vorel <pvorel@suse.cz> [2020-01-29 13:50:12 +0100]:
> Hi,
>
> Glibc is including <sys/ttydefaults.h> in <sys/ioctl.h> with following comment:
>
> /* On a Unix system, the system <sys/ioctl.h> probably defines some of
> the symbols we define in <sys/ttydefaults.h> (usually with the same
> values). The code to generate <bits/ioctls.h> has omitted these
> symbols to avoid the conflict, but a Unix program expects <sys/ioctl.h>
> to define them, so we must include <sys/ttydefaults.h> here. */
>
> I guess glibc is (as usual) wrong and therefore users who needs these
> definitions should load also <sys/ttydefaults.h> explicitly.
at some point i did some sys/ioctl.h cleanup
and i don't remember how conciously i omitted
the sys/ttydefaults.h include. (they are both
non-standard headers so in principle including
is ok)
sys/ttydefaults.h is more related to termios.h:
several TTYDEF_* macros depend on termios.h and
termios.h includes it on both glibc and bsd in
non-standard mode i think (termios.h is standard
header). it is weird to include things into
ioctl.h that don't work without termios.h.
i don't think bsd sys/ioctl.h includes it, but
ioctl is very os specific.