This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: tc[gs]etattr and PPC
- From: Andreas Schwab <schwab at suse dot de>
- To: drepper at redhat dot com (Ulrich Drepper)
- Cc: Thorsten Kukuk <kukuk at suse dot de>, libc-alpha at sources dot redhat dot com
- Date: Sun, 10 Feb 2002 20:49:21 +0100
- Subject: Re: tc[gs]etattr and PPC
- References: <20020210191418.A4527@suse.de> <m3eljt41xy.fsf@myware.mynet>
Ulrich Drepper <drepper@redhat.com> writes:
|> Thorsten Kukuk <kukuk@suse.de> writes:
|>
|> > Some programs like xterm makes TCSETS-ioctls (and don't call
|> > tcsetattr), but we call tcsetattr which fails and return a wrong
|> > error code to the caller.
|> >
|> > POSIX says:
|> >
|> > The tcsetattr() function shall return successfully if it was able to
|> > perform any of the requested actions, even if some of the requested
|> > actions could not be performed.
|> >
|> > so the wrapper in the current implementation is not correct.
|> >
|> > How can we fix this? One suggestion is to add an internal flag so
|> > that our tcsetattr does not perform the check, the other is to
|> > remove or fix the wrapper.
|>
|> You haven't given an example why you think it's wrong. Not calling
|> the kernel for unimplemented functionality and failing is correct.
|> What the text above means is that is any of the defined actions fail
|> (like changing the baud rate if supported) tcsetattr() still returns
|> successfully. What exactly do you have in mind?
The tcsetattr wrapper checks if any of CSIZE, PARENB, CREAD have not been
performed. But it does not take into account that there might be other
changes that do have been performed, and thus tcsetattr should return
sucessfully anyway. The following program reports an error although
TOSTOP has been successfully modified:
#include <termios.h>
#include <stdio.h>
int
main (void)
{
struct termios t;
tcgetattr (0, &t);
t.c_cflag ^= CREAD;
t.c_lflag ^= TOSTOP;
if (tcsetattr (0, TCSANOW, &t))
perror ("tcsetattr");
return 0;
}
Andreas.
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE GmbH, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."