From adbe4e1b2d47c82bdff183a2e2c630b3d8beec43 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 28 Sep 2025 21:26:26 +0100 Subject: [PATCH] Refactor secondary DDT table creation logic to check for cached entries --- src/ddt/ddt_v2.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ddt/ddt_v2.c b/src/ddt/ddt_v2.c index 58d72dd..af1fd9d 100644 --- a/src/ddt/ddt_v2.c +++ b/src/ddt/ddt_v2.c @@ -1224,9 +1224,9 @@ void set_ddt_multi_level_v2(aaruformatContext *ctx, uint64_t sectorAddress, bool } // Step 5: Check if the specified block already has an existing secondary level table - createNewTable = secondaryDdtOffset == 0; + createNewTable = ctx->cachedSecondaryDdtSmall == NULL && ctx->cachedSecondaryDdtBig == NULL; - if(!createNewTable) + if(!createNewTable && secondaryDdtOffset != 0) { // Load existing table fseek(ctx->imageStream, secondaryDdtOffset, SEEK_SET); @@ -1281,7 +1281,8 @@ void set_ddt_multi_level_v2(aaruformatContext *ctx, uint64_t sectorAddress, bool ctx->cachedDdtOffset = secondaryDdtOffset; } - else + + if(createNewTable) { // Create a new empty table size_t tableSize = ctx->userDataDdtHeader.sizeType == SmallDdtSizeType ? itemsPerDdtEntry * sizeof(uint16_t)