Den 2010-11-29 08:36 skrev Peter Rosin:
Den 2010-11-29 01:03 skrev James Eder:
On 11/26/10 12:15 AM, Damjan Jovanovic wrote:
On Fri, Nov 26, 2010 at 6:56 AM, Vitaliy Margolen <wine-devel at kievinfo.com> wrote:
On 11/24/2010 07:19 PM, James McKenzie wrote:
On 11/24/10 6:56 PM, Vitaliy Margolen wrote:
On 11/24/2010 12:23 PM, jimportal at gmail.com wrote: > From: James Eder<jimportal at gmail.com> > > - while (fgets(line,200,f) != NULL) > + while (fgets(line,450,f) != NULL) You might as well then change this to "sizeof(line)".
Just for my edification, is there not a better way then setting the variable line to a flexible length for this purpose.
Unless I didn't understand your question - you can't set a buffer to a "variable length". You have to provide fgets() a size of the buffer so it can read at most that many characters -1 for terminating \0.
Vitaliy.
So read lines dynamically instead:
It would be nice to not reinvent that wheel all the time. I don't suppose your function could be pulled out of winemenubuilder.c and placed in a more accessible location. Should I just copy and paste it? It's a good function and it would fit just fine in my opinion.
Alternatively, I doubt 2k or 4k worth of processor features ("flags") are going to show up for some years, but I don't know. At any rate, at least it would fix it for current systems.
I'm just making a note that the fgets function is not very well suited for CRNL style line endings. In the cases discussed here, you appear to only handle linux files with NL style line endings, but if you ever try to handle CRNL files, fgets may read CR as the last character on one invocation and then forget that until the next invocation and thus fail to find the line ending. The proposed function a few messages back would in that case read two lines into the buffer, and they would be separated by a CR.
For this reason, I consider fgets completely unusable (on Windows) for anything where the maximum line length isn't known in advance.
But maybe wine does not have this problem? However, my XP SP3 sure does.
Scratch that, it appears to behave. I must have screwed up my previous tests.
However, I do remember fgets misbehavior on Windows.
Cheers, Peter