fix possible isatty false positives and unwanted device state changes
authorRich Felker <dalias@aerifal.cx>
Mon, 23 Feb 2015 23:53:01 +0000 (18:53 -0500)
committerRich Felker <dalias@aerifal.cx>
Mon, 23 Feb 2015 23:53:01 +0000 (18:53 -0500)
commit2de85a985654d2c944931267645d9a0686242dfe
tree8b9e08fab48af344d9eedbc0ac57bbc9eaacf7da
parente487c203db36750388228a2db75f96040cbfae58
fix possible isatty false positives and unwanted device state changes

the equivalent checks for newly opened stdio output streams, used to
determine buffering mode, are also fixed.

on most archs, the TCGETS ioctl command shares a value with
SNDCTL_TMR_TIMEBASE, part of the OSS sound API which was apparently
used with certain MIDI and timer devices. for file descriptors
referring to such a device, TCGETS will not fail with ENOTTY as
expected; it may produce a different error, or may succeed, and if it
succeeds it changes the mode of the device. while it's unlikely that
such devices are in use, this is in principle very harmful behavior
for an operation which is supposed to do nothing but query whether the
fd refers to a tty.

TIOCGWINSZ, used to query logical window size for a terminal, was
chosen as an alternate ioctl to perform the isatty check. it does not
share a value with any other ioctl commands, and it succeeds on any
tty device.

this change also cleans up strace output to be less ugly and
misleading.
src/stdio/__fdopen.c
src/stdio/__stdout_write.c
src/unistd/isatty.c