more fixes for level 2 functions exposed by unit tests
diff --git a/src/libFLAC/metadata.c b/src/libFLAC/metadata.c
index 0baa30f..3bc7d84 100644
--- a/src/libFLAC/metadata.c
+++ b/src/libFLAC/metadata.c
@@ -995,7 +995,7 @@
chain_delete_node_(chain, chain->tail);
FLAC__ASSERT(chain->current_length == chain->initial_length);
}
- else if(chain->tail->data->length <= delta) {
+ else if(chain->tail->data->length >= delta) {
chain->tail->data->length -= delta;
chain->current_length -= delta;
FLAC__ASSERT(chain->current_length == chain->initial_length);
@@ -1019,7 +1019,15 @@
if(preserve_file_stats)
set_file_stats_(chain->filename, &stats);
- chain->initial_length = chain->current_length;
+ /* recompute lengths and offsets if necessary */
+ if(chain->initial_length != chain->current_length) {
+ const FLAC__MetaData_Node *node;
+ chain->initial_length = chain->current_length;
+ chain->last_offset = chain->first_offset;
+ for(node = chain->head; node; node = node->next)
+ chain->last_offset += (4 + node->data->length); /*@@@ MAGIC NUMBER 4 = metadata header bytes */
+ }
+
return true;
}