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

Christopher Faylor cgf@redhat.com
Wed Mar 10 17:29:00 GMT 2004

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?


>-- 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