This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Tried out cygwin-inst-20100111.tar.bz2
Corinna Vinschen <corinna-cygwin <at> cygwin.com> writes:
>
> IIU the SUSv4 description C, and given that a newly opened console is
> always setup with the default termios settings anyway, we could simply
> set O_TTY_INIT to 0 and be done with it:
Yep, that's my understanding as well. This link is also informative:
http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html#tag_11_02
"Since the termios structure may include additional members, and the standard
members may include both standard and non-standard modes, the structure should
never be initialized directly by the application as this may cause the terminal
to behave in a non-conforming manner. When opening a terminal device (other
than a pseudo-terminal) that is not already open in any process, it should be
opened with the O_TTY_INIT flag before initializing the structure using
tcgetattr( ) to ensure that any non-standard elements of the termios structure
are set to values that result in conforming behavior of the terminal interface."
In other words, tcsetattr should always be used on a struct termios obtained
from a read-modify-write manner, and never from a memset(0) manner, where the
use of O_TTY_INIT guarantees (trivially, if it is defined to 0) that any
extension fields in struct termios that need to be set to a non-zero value for
POSIX conformance are set correctly.
--
Eric Blake
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple