diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2005-08-19 09:43:47 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2005-08-19 09:43:47 +0000 |
commit | d71f7824a14884c4a3dcdf543edc5b0c9eb2d0d0 (patch) | |
tree | d59e980d85f945f83b6344c1ab68c714398616f6 /firmware | |
parent | 1d38aa19e7289d0d8ff0c08e8bd02d3f21d21e80 (diff) | |
download | rockbox-d71f7824a14884c4a3dcdf543edc5b0c9eb2d0d0.tar.gz rockbox-d71f7824a14884c4a3dcdf543edc5b0c9eb2d0d0.zip |
Properly skip the ID3v2 extended header for both 2.3 and 2.4
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7356 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/id3.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/firmware/id3.c b/firmware/id3.c index c59c9c12a0..d5e9150d14 100644 --- a/firmware/id3.c +++ b/firmware/id3.c | |||
@@ -603,11 +603,28 @@ static void setid3v2title(int fd, struct mp3entry *entry) | |||
603 | global_flags = header[5]; | 603 | global_flags = header[5]; |
604 | 604 | ||
605 | /* Skip the extended header if it is present */ | 605 | /* Skip the extended header if it is present */ |
606 | if(version >= ID3_VER_2_4) { | 606 | if(global_flags & 0x40) { |
607 | if(global_flags & 0x40) { | 607 | if(version == ID3_VER_2_3) { |
608 | if(10 != read(fd, header, 10)) | ||
609 | return; | ||
610 | /* The 2.3 extended header size doesn't include the following | ||
611 | data, so we have to find out the size by checking the flags. | ||
612 | Also, it is not unsynched. */ | ||
613 | framelen = BYTES2INT(header[0], header[1], header[2], header[3]) + | ||
614 | BYTES2INT(header[6], header[7], header[8], header[9]); | ||
615 | flags = BYTES2INT(0, 0, header[4], header[5]); | ||
616 | if(flags & 0x8000) | ||
617 | framelen += 4; /* CRC */ | ||
618 | |||
619 | lseek(fd, framelen - 10, SEEK_CUR); | ||
620 | } | ||
621 | |||
622 | if(version >= ID3_VER_2_4) { | ||
608 | if(4 != read(fd, header, 4)) | 623 | if(4 != read(fd, header, 4)) |
609 | return; | 624 | return; |
610 | 625 | ||
626 | /* The 2.4 extended header size does include the entire header, | ||
627 | so here we can just skip it. This header is unsynched. */ | ||
611 | framelen = UNSYNC(header[0], header[1], | 628 | framelen = UNSYNC(header[0], header[1], |
612 | header[2], header[3]); | 629 | header[2], header[3]); |
613 | 630 | ||