From: Lukáš Lalinský Date: Sat, 1 Dec 2007 10:08:43 +0000 (+0000) Subject: Fix saving of ID3v1 tags to TrueAudio files with removed ID3v2 tags. X-Git-Tag: v1.5~66 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6cc989eb5570d998ac3f3a8fb1b2375946146e8c;p=taglib Fix saving of ID3v1 tags to TrueAudio files with removed ID3v2 tags. git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@743541 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- diff --git a/taglib/trueaudio/trueaudiofile.cpp b/taglib/trueaudio/trueaudiofile.cpp index 18b7a911..adbb6a44 100644 --- a/taglib/trueaudio/trueaudiofile.cpp +++ b/taglib/trueaudio/trueaudiofile.cpp @@ -133,22 +133,28 @@ bool TrueAudio::File::save() // Update ID3v2 tag - if(d->ID3v2Tag) { + if(d->ID3v2Tag && !d->ID3v2Tag->isEmpty()) { if(!d->hasID3v2) { d->ID3v2Location = 0; d->ID3v2OriginalSize = 0; } - insert(d->ID3v2Tag->render(), d->ID3v2Location, d->ID3v2OriginalSize); + ByteVector data = d->ID3v2Tag->render(); + insert(data, d->ID3v2Location, d->ID3v2OriginalSize); + d->ID3v1Location -= d->ID3v2OriginalSize - data.size(); + d->ID3v2OriginalSize = data.size(); d->hasID3v2 = true; } else if(d->hasID3v2) { removeBlock(d->ID3v2Location, d->ID3v2OriginalSize); + d->ID3v1Location -= d->ID3v2OriginalSize; + d->ID3v2Location = -1; + d->ID3v2OriginalSize = 0; d->hasID3v2 = false; } // Update ID3v1 tag - if(d->ID3v1Tag) { + if(d->ID3v1Tag && !d->ID3v1Tag->isEmpty()) { if(!d->hasID3v1) { seek(0, End); d->ID3v1Location = tell(); @@ -160,6 +166,7 @@ bool TrueAudio::File::save() } else if(d->hasID3v1) { removeBlock(d->ID3v1Location, 128); + d->ID3v1Location = -1; d->hasID3v1 = false; }