While waiting for input in the read builtin, if select() is interrupted
but there is no pending signal, we act like we timed out, and return the
same status as if we had been interrupted by SIGALRM, instead of looping
until we actually do time out.
* Replace the single select() call with a ppoll() loop.
* Add a test case that verifies that `read -t 0` behaves correctly when
input is available; we already have one that verifies that it does
when there isn't.
* Improve validation of the timeout value. We now accept things like
"1h30m15s", which we didn't use to, but not "5sec", which we did.
PR: 290844
MFC after: 1 week