]> granicus.if.org Git - taglib/commitdiff
Fix saving of ID3v1 tags to TrueAudio files with removed ID3v2 tags.
authorLukáš Lalinský <lalinsky@gmail.com>
Sat, 1 Dec 2007 10:08:43 +0000 (10:08 +0000)
committerLukáš Lalinský <lalinsky@gmail.com>
Sat, 1 Dec 2007 10:08:43 +0000 (10:08 +0000)
git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@743541 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

taglib/trueaudio/trueaudiofile.cpp

index 18b7a911698f83c405b90e5e5be5d14ab88fdf92..adbb6a4440831e80ba0a577c2953c5f71e3e0e67 100644 (file)
@@ -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;
   }