[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: io:lines() and \0
- From: Francisco Olarte <folarte@...>
- Date: Thu, 20 Feb 2014 18:17:57 +0100
Hi Luiz:
On Thu, Feb 20, 2014 at 4:49 PM, Luiz Henrique de Figueiredo
<lhf@tecgraf.puc-rio.br> wrote:
>> For me fgets(buf, size, file) should be equivalent to a getc loop with
>> some checkings for size, \n and EOF. And, from what we've seen on this
>> thread, it seems the libC implementation do it that way.
> Not really. See for instance
> http://www.opensource.apple.com/source/Libc/Libc-167/stdio.subproj/fgets.c
> http://svnweb.freebsd.org/base/head/lib/libc/stdio/fgets.c?revision=249810&view=markup
Your point being? as this example seem to prove my point.
I mean, are this implementations not equivalent to a getc loop on the
same implementations? ( ignoring multithreading issues ) ( I've
changed your links fgets=>fgetc/getc but they both end up calling
__s* stuff, and I'm unable to follow them more ).
To me it seems they are optimized equivalents. In particular I notice
they do not use any str* functions, but use mem*, probably for speed
and/or to be nul safe, but they are nul safe like doing it with getc.
In case I did not explain myself. No production libC I've ever looked
at does fgets with a getc loop, I knew this. But all the ones I
remember using give the same result ( as chars stored in the buffer,
not counting buffer overflows, EOF checking and the errors I'm sure
to introduce now ) for 'fgets(buf, size, file)' and
'while((c=getc(f)!='\n' && c!=EOF) *buf++=c; *buf=0;', and that is
what I meant for equivalent.
For 'do it that way' I meant do it so the result the same, I never
expected modern libraries like freebsd or its cousins to use a loop.
Francisco Olarte.
- References:
- Re: io:lines() and \0, Craig Barnes
- Re: io:lines() and \0, René Rebe
- Re: io:lines() and \0, Craig Barnes
- Re: io:lines() and \0, Sean Conner
- Re: io:lines() and \0, René Rebe
- Re: io:lines() and \0, René Rebe
- Re: io:lines() and \0, Sean Conner
- Re: io:lines() and \0, Francisco Olarte
- Re: io:lines() and \0, Enrico Colombini
- Re: io:lines() and \0, Francisco Olarte
- Re: io:lines() and \0, Luiz Henrique de Figueiredo