summaryrefslogtreecommitdiffstats
path: root/apps/metadata/id3tags.c
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2011-02-20 16:12:05 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2011-02-20 16:12:05 +0000
commita7e25a01baaa3594fa59c0c09a0fbef38428dd81 (patch)
treebed1de279f5c4bff17c4ef41f2bf6fe756d2971a /apps/metadata/id3tags.c
parent85e40257dc65e3542b785898ddf60482e2d1ab0c (diff)
downloadrockbox-a7e25a01baaa3594fa59c0c09a0fbef38428dd81.tar.gz
rockbox-a7e25a01baaa3594fa59c0c09a0fbef38428dd81.tar.bz2
rockbox-a7e25a01baaa3594fa59c0c09a0fbef38428dd81.zip
FS#11920: Do not overwrite already existing metadata and take into account string termination. This can save several bytes of the metadata buffer when tags have multiple entries (e.g. multiple gerne tags)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29349 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/metadata/id3tags.c')
-rw-r--r--apps/metadata/id3tags.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/apps/metadata/id3tags.c b/apps/metadata/id3tags.c
index 9ee183a1b3..9143f8ad25 100644
--- a/apps/metadata/id3tags.c
+++ b/apps/metadata/id3tags.c
@@ -358,8 +358,7 @@ static int parseuser( struct mp3entry* entry, char* tag, int bufferpos )
if ((tag - entry->id3v2buf + desc_len + 2) < bufferpos) {
/* At least part of the value was read, so we can safely try to
- * parse it
- */
+ * parse it */
value = tag + desc_len + 1;
value_len = bufferpos - (tag - entry->id3v2buf);
@@ -368,8 +367,7 @@ static int parseuser( struct mp3entry* entry, char* tag, int bufferpos )
entry->albumartist = tag;
#if CONFIG_CODEC == SWCODEC
} else {
- value_len = parse_replaygain(tag, value, entry, tag,
- value_len);
+ value_len = parse_replaygain(tag, value, entry, tag, value_len);
#endif
}
}
@@ -1040,6 +1038,12 @@ void setid3v2title(int fd, struct mp3entry *entry)
#endif
if( tr->ppFunc )
bufferpos = tr->ppFunc(entry, tag, bufferpos);
+
+ /* Trim. Take into account that multiple string contents will
+ * only be displayed up to their first null termination. All
+ * content after this null termination is obsolete and can be
+ * overwritten. */
+ bufferpos -= (bytesread - strlen(tag));
/* Seek to the next frame */
if(framelen < totframelen)