[PATCH] ntdll: Increase size of buffer used to read lines of /proc/cpuinfo
Damjan Jovanovic
damjan.jov at gmail.com
Fri Nov 26 01:15:37 CST 2010
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:
static BOOL next_line(FILE *file, char **line, int *size)
{
int pos = 0;
char *cr;
if (*line == NULL)
{
*size = 4096;
*line = HeapAlloc(GetProcessHeap(), 0, *size);
}
while (*line != NULL)
{
if (fgets(&(*line)[pos], *size - pos, file) == NULL)
{
HeapFree(GetProcessHeap(), 0, *line);
*line = NULL;
if (feof(file))
return TRUE;
return FALSE;
}
pos = strlen(*line);
cr = strchr(*line, '\n');
if (cr == NULL)
{
char *line2;
(*size) *= 2;
line2 = HeapReAlloc(GetProcessHeap(), 0, *line, *size);
if (line2)
*line = line2;
else
{
HeapFree(GetProcessHeap(), 0, *line);
*line = NULL;
}
}
else
{
*cr = 0;
return TRUE;
}
}
return FALSE;
}
Damjan
More information about the wine-devel
mailing list