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;