On 15/07/06, Jonathan Gordon <[EMAIL PROTECTED]> wrote:
On 15/07/06, Magnus Holmgren <[EMAIL PROTECTED]> wrote:
> Jens Arnold wrote:
>
> > Another thought:
> >
> > Are you listening to mp3? Iirc Slasheri said that the id3
> > parser is one such example of inefficiency as it reads
> > byte-by-byte....
>
> The id3 parser should read frame by frame, at least according to a quick
> look at the code.
>
> Other cases that do read char by char include the WPS reader and the
> config file reader (both using misc.c:read_line). Maybe the WPS reader
> is the main cause of these one byte reads in that short test run...
>
shouldnt that read_line function be changed then to read X instead of
1 byte and then either cache the extra bytes read or move the fd back
to the end of the new line?
possibly to something like this (untested code and it doesnt handle \r
int read_line(int fd, char* buffer, int buffer_size)
{
int count = 0;
int num_read = 0;
errno = 0;
num_read = read(fd, buffer, buffer_size);
buffer[num_read-1] = '\0';
while (buffer[count])
{
if ( buffer[count] == '\n' )
{
buffer[count] = '\0';
break;
}
count++;
}
// move the fd back to AFTER the \n if needed
if (!errno)
lseek(fd,num_read-count+1,SEEK_CUR);
return errno ? -1 : count;
}
> Magnus
>