7dd89537f1
Many (mostly machine-dependent ones) are still missing. NIST-PCTS found this bug for all the ioctls used to implement the POSIX tc* functions (TIOCCBRK, TIOCDRAIN, TIOCSPGRP, TIOCSBRK, TIOCSTART and TIOCSTOP), and I found FIOASYNC, TIOCCONS, TIOCEXCL, TIOCHPCL, TIOCNXCL, TIOCSCTTY and TIOCSDRAINWAIT by inspection. TIOCSPGRP was ifdefed out for some reason. Handle tcsetattr()'s historical speed conversions correctly and more centrally: - don't store speeds of 0 in the final termios struct. Drivers can now depend on tp->t_ispeed and tp->t_ospeed giving the actual speed. Applications can now depend on tcgetattr() being POSIX.1 conformant. - convert from a proposed input speed of 0 to the proposed output speed (except if that is 0, convert to the current output speed). Drivers can now depend on the proposed input speed being nonzero. - don't reject negative speeds. Negative speeds can't happen now that speed_t is unsigned, and rejecting invalid speeds is a bug - tcsetattr() is supposed to succeed if it can "perform any of the requested actions", so it shouldn't fail in practice.