From e2ba10fe8d96dca11d5a07e6d19b21eff1dd4d1d Mon Sep 17 00:00:00 2001 From: Josh Coalson Date: Tue, 14 May 2002 06:03:17 +0000 Subject: [PATCH] more fixes for level 2 functions exposed by unit tests --- src/libFLAC/metadata.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libFLAC/metadata.c b/src/libFLAC/metadata.c index 0baa30f9..3bc7d84e 100644 --- a/src/libFLAC/metadata.c +++ b/src/libFLAC/metadata.c @@ -995,7 +995,7 @@ FLAC__bool FLAC__metadata_chain_write(FLAC__MetaData_Chain *chain, FLAC__bool us 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 @@ FLAC__bool FLAC__metadata_chain_write(FLAC__MetaData_Chain *chain, FLAC__bool us 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; }