NetBSD-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Re: Re: fgets() fails to read after fread()
Dear Jean-Yves,
Thanks for the inputs.
I have one doubt here, Is this check for sticky EOF in BSD system is according
to the specification ? if Yes, then why this check is not for SysV
implementation ?
Thank You,
Amol Pise
On Tue, 31 Aug 2010 20:08:40 +0530 wrote
>
On Tue, 31 Aug 2010 16:19:19 +0200, Jean-Yves Migeon
wrote:
> On 31 Aug 2010 10:01:45 -0000, "amol pise"
> wrote:
>>[snip]
>> $ cat lib/libc/stdio/refill.c
>> {{{
>> 1 /* $NetBSD: refill.c,v 1.13 2003/08/07 16:43:30 agc Exp $ */
>> :
>> + #if 0
>> 86 /* SysV does not make this test; take it out for
> compatibility
>> */
>> 87 if (fp->_flags & __SEOF)
>> 88 return (EOF);
>> + #endif
>> }}}
>>
>> Doing the above modification is enough to work for SysV system ?
>> Please give me inputs on it.
>>
>> Thank You,
>
> Oops, I wasn't looking at the correct file...
>
> Yes, removing the sticky EOF check should be enough.
Actually, according to ANSI C:
4.9.8.1 The fread function
[...]
The file position indicator for the stream (if
defined) is advanced by the number of characters successfully read.
If an error occurs, the resulting value of the file position indicator
for the stream is indeterminate.
=> So it seems that, if the initial fread() is incomplete (likely to be
your case for EOF), the position indicator is indeterminate. If you want to
be strictly portable, you would rather have to use clearerr() or fsetpos()
before attempting the fgets(), or check that the value returned by fread()
does match the one you passed to it as parameter (and adapt accordingly if
it is not equal).
Your call I guess :)
Cheers,
--
Jean-Yves Migeon
jean-yves.migeon%espci.fr@localhost
Home |
Main Index |
Thread Index |
Old Index