Rockbox.org home
release
dev builds
extras
themes manual
wiki
device status forums
mailing lists
IRC bugs
patches
dev guide



Rockbox mail archive

Subject: Re: A nasty inefficieny in file.c?

Re: A nasty inefficieny in file.c?

From: Jonathan Gordon <jdgordy_at_gmail.com>
Date: 2006-07-15

On 15/07/06, Jonathan Gordon <jdgordy@gmail.com> wrote:
> On 15/07/06, Magnus Holmgren <lear@algonet.se> 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
> >
>
Received on Sat Jul 15 10:38:13 2006


Page was last modified "Jan 10 2012" The Rockbox Crew
aaa