Remove previous index entries before adding primary and single DDTs.

This commit is contained in:
2025-10-21 16:37:35 +01:00
parent eae5514ce3
commit 8d334fc7e6

View File

@@ -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)",
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
TRACE("Adding primary DDT to index");
IndexEntry primary_ddt_entry;
@@ -470,6 +482,18 @@ static int32_t write_single_level_ddt(aaruformat_context *ctx)
" entries, %zu bytes, %zu compressed bytes)",
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
TRACE("Adding single-level DDT to index");
IndexEntry single_ddt_entry;