From be041ef2aae9b78c482e810679aed846aaa8eb21 Mon Sep 17 00:00:00 2001
From: "Stephen F. Booth" <me@sbooth.org>
Date: Fri, 29 Nov 2013 14:54:15 -0500
Subject: [PATCH] Another fix for tag stripping

---
 taglib/dsf/dsffile.cpp | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/taglib/dsf/dsffile.cpp b/taglib/dsf/dsffile.cpp
index 1f8eb4c0..c79288a5 100644
--- a/taglib/dsf/dsffile.cpp
+++ b/taglib/dsf/dsffile.cpp
@@ -116,10 +116,8 @@ bool DSF::File::save()
 
   // Three things must be updated: the file size, the tag data, and the metadata offset
 
-  long long newMetadataOffset = d->metadataOffset ? d->metadataOffset : d->fileSize;
-
   if(d->tag->isEmpty()) {
-    long long newFileSize = newMetadataOffset;
+    long long newFileSize = d->metadataOffset ? d->metadataOffset : d->fileSize;
 
     // Update the file size
     if(d->fileSize != newFileSize) {
@@ -128,17 +126,18 @@ bool DSF::File::save()
     }
 
     // Update the metadata offset to 0 since there is no longer a tag
-    if(d->metadataOffset != newMetadataOffset) {
+    if(d->metadataOffset) {
       insert(ByteVector::fromUInt64LE(0ULL), 20, 8);
       d->metadataOffset = 0;
     }
 
     // Delete the old tag
-    truncate(newMetadataOffset);
+    truncate(newFileSize);
   }
   else {
     ByteVector tagData = d->tag->render();
 
+    long long newMetadataOffset = d->metadataOffset ? d->metadataOffset : d->fileSize;
     long long newFileSize = newMetadataOffset + tagData.size();
     long long oldTagSize = d->fileSize - newMetadataOffset;