The current code uses stdin
to get and set terminal attributes. Unfortunately this doesn't work when stdin isn't connected to the TTY (e.g. it's a pipe). For example: some_program | less
(in this situation, less
's stdin can't be set to raw mode, but its stdout and TTY can be).
This change allows programs to use a raw terminal even if they're taking stdin through a pipe. If stdout is a pipe then this will still fail, though.