diff options
| -rw-r--r-- | firmware/id3.c | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/firmware/id3.c b/firmware/id3.c index a76cd2b..6b43fec 100644 --- a/firmware/id3.c +++ b/firmware/id3.c @@ -152,33 +152,31 @@ static int parseyearnum( struct mp3entry* entry, char* tag, int bufferpos ) } /* parse numeric genre from string, version 2.2 and 2.3 */ -static int parseoldgenre( struct mp3entry* entry, char* tag, int bufferpos ) +static int parsegenre( struct mp3entry* entry, char* tag, int bufferpos ) { - if( tag[0] == '(' && tag[1] != '(' ) { - entry->genre = atoi( tag + 1 ); - entry->genre_string = 0; - return tag - entry->id3v2buf; - } - else { - entry->genre = 0xFF; - return bufferpos; - } -} - -/* parse numeric genre from string, version 2.4 and up */ -static int parsenewgenre( struct mp3entry* entry, char* tag, int bufferpos ) -{ - /* In version 2.4 and up, there are no parentheses, and the genre frame - is a list of strings, either numbers or text. */ - - /* Is it a number? */ - if(isdigit(tag[0])) { - entry->genre = atoi( tag ); - entry->genre_string = 0; - return tag - entry->id3v2buf; + if(entry->id3version >= ID3_VER_2_3) { + /* In version 2.4 and up, there are no parentheses, and the genre frame + is a list of strings, either numbers or text. */ + + /* Is it a number? */ + if(isdigit(tag[0])) { + entry->genre = atoi( tag ); + entry->genre_string = 0; + return tag - entry->id3v2buf; + } else { + entry->genre = 0xFF; + return bufferpos; + } } else { - entry->genre = 0xFF; - return bufferpos; + if( tag[0] == '(' && tag[1] != '(' ) { + entry->genre = atoi( tag + 1 ); + entry->genre_string = 0; + return tag - entry->id3v2buf; + } + else { + entry->genre = 0xFF; + return bufferpos; + } } } @@ -193,8 +191,8 @@ static struct tag_resolver taglist[] = { { "TRCK", 4, offsetof(struct mp3entry, track_string), &parsetracknum }, { "TYER", 4, offsetof(struct mp3entry, year_string), &parseyearnum }, { "TYE", 3, offsetof(struct mp3entry, year_string), &parseyearnum }, - { "TCON", 4, offsetof(struct mp3entry, genre_string), &parsenewgenre }, - { "TCO", 3, offsetof(struct mp3entry, genre_string), &parseoldgenre }, + { "TCON", 4, offsetof(struct mp3entry, genre_string), &parsegenre }, + { "TCO", 3, offsetof(struct mp3entry, genre_string), &parsegenre }, { "TCOM", 4, offsetof(struct mp3entry, composer), NULL } }; @@ -430,7 +428,7 @@ static void setid3v2title(int fd, struct mp3entry *entry) * We must have at least minframesize bytes left for the * remaining frames to be interesting */ - while(size > minframesize ) { + while(size >= minframesize ) { flags = 0; /* Read frame header and check length */ |