mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 11:14:39 +00:00
Remove previous index entries before adding primary and single DDTs.
This commit is contained in:
24
src/close.c
24
src/close.c
@@ -334,6 +334,18 @@ static int32_t write_primary_ddt(aaruformat_context *ctx)
|
|||||||
TRACE("Successfully wrote primary DDT header and table to file (%" PRIu64 " entries, %zu bytes)",
|
TRACE("Successfully wrote primary DDT header and table to file (%" PRIu64 " entries, %zu bytes)",
|
||||||
ctx->user_data_ddt_header.entries, primary_table_size);
|
ctx->user_data_ddt_header.entries, primary_table_size);
|
||||||
|
|
||||||
|
// Remove any previously existing index entries of the same type before adding
|
||||||
|
TRACE("Removing any previously existing primary DDT index entries");
|
||||||
|
for(int k = utarray_len(ctx->index_entries) - 1; k >= 0; k--)
|
||||||
|
{
|
||||||
|
const IndexEntry *entry = (IndexEntry *)utarray_eltptr(ctx->index_entries, k);
|
||||||
|
if(entry && entry->blockType == DeDuplicationTable2 && entry->dataType == UserData)
|
||||||
|
{
|
||||||
|
TRACE("Found existing primary DDT index entry at position %d, removing", k);
|
||||||
|
utarray_erase(ctx->index_entries, k, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add primary DDT to index
|
// Add primary DDT to index
|
||||||
TRACE("Adding primary DDT to index");
|
TRACE("Adding primary DDT to index");
|
||||||
IndexEntry primary_ddt_entry;
|
IndexEntry primary_ddt_entry;
|
||||||
@@ -470,6 +482,18 @@ static int32_t write_single_level_ddt(aaruformat_context *ctx)
|
|||||||
" entries, %zu bytes, %zu compressed bytes)",
|
" entries, %zu bytes, %zu compressed bytes)",
|
||||||
ctx->user_data_ddt_header.entries, ctx->user_data_ddt_header.length, ctx->user_data_ddt_header.cmpLength);
|
ctx->user_data_ddt_header.entries, ctx->user_data_ddt_header.length, ctx->user_data_ddt_header.cmpLength);
|
||||||
|
|
||||||
|
// Remove any previously existing index entries of the same type before adding
|
||||||
|
TRACE("Removing any previously existing single-level DDT index entries");
|
||||||
|
for(int k = utarray_len(ctx->index_entries) - 1; k >= 0; k--)
|
||||||
|
{
|
||||||
|
const IndexEntry *entry = (IndexEntry *)utarray_eltptr(ctx->index_entries, k);
|
||||||
|
if(entry && entry->blockType == DeDuplicationTable2 && entry->dataType == UserData)
|
||||||
|
{
|
||||||
|
TRACE("Found existing single-level DDT index entry at position %d, removing", k);
|
||||||
|
utarray_erase(ctx->index_entries, k, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add single-level DDT to index
|
// Add single-level DDT to index
|
||||||
TRACE("Adding single-level DDT to index");
|
TRACE("Adding single-level DDT to index");
|
||||||
IndexEntry single_ddt_entry;
|
IndexEntry single_ddt_entry;
|
||||||
|
|||||||
Reference in New Issue
Block a user