mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 19:24:40 +00:00
Use specific block type for secondary level DDTs v2.
This commit is contained in:
@@ -141,6 +141,7 @@ typedef enum
|
|||||||
DataBlock = 0x4B4C4244, ///< Block containing data.
|
DataBlock = 0x4B4C4244, ///< Block containing data.
|
||||||
DeDuplicationTable = 0x2A544444, ///< Block containing a deduplication table (v1).
|
DeDuplicationTable = 0x2A544444, ///< Block containing a deduplication table (v1).
|
||||||
DeDuplicationTable2 = 0x32544444, ///< Block containing a deduplication table v2.
|
DeDuplicationTable2 = 0x32544444, ///< Block containing a deduplication table v2.
|
||||||
|
DeDuplicationTableSecondary = 0x53545444, ///< Block containing a secondary deduplication table (v2).
|
||||||
IndexBlock = 0x58444E49, ///< Block containing the index (v1).
|
IndexBlock = 0x58444E49, ///< Block containing the index (v1).
|
||||||
IndexBlock2 = 0x32584449, ///< Block containing the index v2.
|
IndexBlock2 = 0x32584449, ///< Block containing the index v2.
|
||||||
IndexBlock3 = 0x33584449, ///< Block containing the index v3.
|
IndexBlock3 = 0x33584449, ///< Block containing the index v3.
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ static int32_t write_cached_secondary_ddt(aaruformat_context *ctx)
|
|||||||
|
|
||||||
// Prepare DDT header for the cached table
|
// Prepare DDT header for the cached table
|
||||||
DdtHeader2 ddt_header = {0};
|
DdtHeader2 ddt_header = {0};
|
||||||
ddt_header.identifier = DeDuplicationTable2;
|
ddt_header.identifier = DeDuplicationTableSecondary;
|
||||||
ddt_header.type = UserData;
|
ddt_header.type = UserData;
|
||||||
ddt_header.compression = ctx->compression_enabled ? Lzma : None;
|
ddt_header.compression = ctx->compression_enabled ? Lzma : None;
|
||||||
ddt_header.levels = ctx->user_data_ddt_header.levels;
|
ddt_header.levels = ctx->user_data_ddt_header.levels;
|
||||||
@@ -208,7 +208,8 @@ static int32_t write_cached_secondary_ddt(aaruformat_context *ctx)
|
|||||||
for(unsigned int k = 0; k < utarray_len(ctx->index_entries); k++)
|
for(unsigned int k = 0; k < utarray_len(ctx->index_entries); k++)
|
||||||
{
|
{
|
||||||
entry = (IndexEntry *)utarray_eltptr(ctx->index_entries, k);
|
entry = (IndexEntry *)utarray_eltptr(ctx->index_entries, k);
|
||||||
if(entry && entry->offset == ctx->cached_ddt_offset && entry->blockType == DeDuplicationTable2)
|
if(entry && entry->offset == ctx->cached_ddt_offset &&
|
||||||
|
entry->blockType == DeDuplicationTableSecondary)
|
||||||
{
|
{
|
||||||
TRACE("Found old DDT index entry at position %u, removing", k);
|
TRACE("Found old DDT index entry at position %u, removing", k);
|
||||||
utarray_erase(ctx->index_entries, k, 1);
|
utarray_erase(ctx->index_entries, k, 1);
|
||||||
@@ -219,7 +220,7 @@ static int32_t write_cached_secondary_ddt(aaruformat_context *ctx)
|
|||||||
|
|
||||||
// Add new index entry for the newly written secondary DDT
|
// Add new index entry for the newly written secondary DDT
|
||||||
IndexEntry new_ddt_entry;
|
IndexEntry new_ddt_entry;
|
||||||
new_ddt_entry.blockType = DeDuplicationTable2;
|
new_ddt_entry.blockType = DeDuplicationTableSecondary;
|
||||||
new_ddt_entry.dataType = UserData;
|
new_ddt_entry.dataType = UserData;
|
||||||
new_ddt_entry.offset = end_of_file;
|
new_ddt_entry.offset = end_of_file;
|
||||||
|
|
||||||
|
|||||||
@@ -1202,7 +1202,7 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
|
|
||||||
// Prepare DDT header for the never-written cached table
|
// Prepare DDT header for the never-written cached table
|
||||||
memset(&ddt_header, 0, sizeof(DdtHeader2));
|
memset(&ddt_header, 0, sizeof(DdtHeader2));
|
||||||
ddt_header.identifier = DeDuplicationTable2;
|
ddt_header.identifier = DeDuplicationTableSecondary;
|
||||||
ddt_header.type = UserData;
|
ddt_header.type = UserData;
|
||||||
ddt_header.compression = ctx->compression_enabled ? Lzma : None; // Use no compression for simplicity
|
ddt_header.compression = ctx->compression_enabled ? Lzma : None; // Use no compression for simplicity
|
||||||
ddt_header.levels = ctx->user_data_ddt_header.levels;
|
ddt_header.levels = ctx->user_data_ddt_header.levels;
|
||||||
@@ -1303,7 +1303,7 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
|
|
||||||
// Add index entry for the newly written secondary DDT
|
// Add index entry for the newly written secondary DDT
|
||||||
IndexEntry new_ddt_entry;
|
IndexEntry new_ddt_entry;
|
||||||
new_ddt_entry.blockType = DeDuplicationTable2;
|
new_ddt_entry.blockType = DeDuplicationTableSecondary;
|
||||||
new_ddt_entry.dataType = UserData;
|
new_ddt_entry.dataType = UserData;
|
||||||
new_ddt_entry.offset = end_of_file;
|
new_ddt_entry.offset = end_of_file;
|
||||||
|
|
||||||
@@ -1376,7 +1376,7 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
|
|
||||||
// Prepare DDT header for the cached table
|
// Prepare DDT header for the cached table
|
||||||
memset(&ddt_header, 0, sizeof(DdtHeader2));
|
memset(&ddt_header, 0, sizeof(DdtHeader2));
|
||||||
ddt_header.identifier = DeDuplicationTable2;
|
ddt_header.identifier = DeDuplicationTableSecondary;
|
||||||
ddt_header.type = UserData;
|
ddt_header.type = UserData;
|
||||||
ddt_header.compression = ctx->compression_enabled ? Lzma : None;
|
ddt_header.compression = ctx->compression_enabled ? Lzma : None;
|
||||||
ddt_header.levels = ctx->user_data_ddt_header.levels;
|
ddt_header.levels = ctx->user_data_ddt_header.levels;
|
||||||
@@ -1489,7 +1489,7 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
for(unsigned int i = 0; i < utarray_len(ctx->index_entries); i++)
|
for(unsigned int i = 0; i < utarray_len(ctx->index_entries); i++)
|
||||||
{
|
{
|
||||||
entry = (IndexEntry *)utarray_eltptr(ctx->index_entries, i);
|
entry = (IndexEntry *)utarray_eltptr(ctx->index_entries, i);
|
||||||
if(entry && entry->offset == ctx->cached_ddt_offset && entry->blockType == DeDuplicationTable2)
|
if(entry && entry->offset == ctx->cached_ddt_offset && entry->blockType == DeDuplicationTableSecondary)
|
||||||
{
|
{
|
||||||
TRACE("Found old DDT index entry at position %u, removing", i);
|
TRACE("Found old DDT index entry at position %u, removing", i);
|
||||||
utarray_erase(ctx->index_entries, i, 1);
|
utarray_erase(ctx->index_entries, i, 1);
|
||||||
@@ -1500,7 +1500,7 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
|
|
||||||
// Add new index entry for the newly written secondary DDT
|
// Add new index entry for the newly written secondary DDT
|
||||||
IndexEntry new_ddt_entry;
|
IndexEntry new_ddt_entry;
|
||||||
new_ddt_entry.blockType = DeDuplicationTable2;
|
new_ddt_entry.blockType = DeDuplicationTableSecondary;
|
||||||
new_ddt_entry.dataType = UserData;
|
new_ddt_entry.dataType = UserData;
|
||||||
new_ddt_entry.offset = end_of_file;
|
new_ddt_entry.offset = end_of_file;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user