summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2005-08-19 09:43:47 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2005-08-19 09:43:47 +0000
commitd71f7824a14884c4a3dcdf543edc5b0c9eb2d0d0 (patch)
treed59e980d85f945f83b6344c1ab68c714398616f6
parent1d38aa19e7289d0d8ff0c08e8bd02d3f21d21e80 (diff)
downloadrockbox-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
-rw-r--r--firmware/id3.c23
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