[gshyam: fgetc returns no error for bad file descriptor]

Jeff Johnston jjohnstn@redhat.com
Wed Mar 10 19:23:00 GMT 2004


Christopher Faylor wrote:
> On Tue, Mar 09, 2004 at 05:49:14PM -0500, Jeff Johnston wrote:
>>This is not totally surprising.  Newlib is not Posix-conformant.  A
>>number of the I/O functions (e.g.  fgetc, fputc, fflush) do not
>>directly set errno.  ANSI-90 does not dictate them to.  As simple as
>>fixing this seems, work is required to properly set up calls to handle
>>thread-specific errnos.  If the end-user is trying to push newlib
>>through a Posix-conformance suite, then this won't be the only problem
>>to face.
> Thanks for the clarification, Jeff.
> This sounds like something I should put in the cygwin FAQ.  Do you mind
> if I add the above statement verbatim?
> cgf
>>-- Jeff J.
>>Christopher Faylor wrote:
>>>[reply-to set]
>>>This observation, sent to the cygwin mailing list, is apparently correct.
>>>fgetc doesn't set errno when trying to read from an fp that is only open
>>>for writing.
>>>The attached test program results in this output:
>>> fp 0xc30c4c, fd 4
>>> -1 = fgetc
>>> fgetc: No error
>>> -1 = read
>>> read: Bad file descriptor
>>>----- Forwarded message from Ghanshyam <gshyam> -----
>>>From: Ghanshyam
>>>To: cygwin
>>>Subject: fgetc returns no error for bad file descriptor
>>>Date: Mon, 8 Mar 2004 20:11:37 +0000 (GMT)
>>>Hi All,
>>>   The 9th assertion of fgetc in "IEEE std 2003.1-1992 Test Methods for
>>>Measuring Conformance to Posix-Part1 System Interface" document states:
>>>   When the stream pointer argument addresses a file descriptor that
>>>is not open for reading, then a call to fgetc()returns a value of 
>>>EOF and sets errno to [EBADF].
>>>The current implementation does not set any errno. It says "No error". 
>>>----- End forwarded message -----

More information about the Newlib mailing list