From 94e44ef304020d4efb4f48b2b992ee60e279ed14 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 20 Oct 2025 01:13:14 +0100 Subject: [PATCH] Do not consider rewinded the first time block 0 is written. --- include/aaruformat/context.h | 1 + src/write.c | 58 +++++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/include/aaruformat/context.h b/include/aaruformat/context.h index 626105b..6204016 100644 --- a/include/aaruformat/context.h +++ b/include/aaruformat/context.h @@ -292,6 +292,7 @@ typedef struct aaruformat_context bool is_writing; ///< True if context opened/created for writing. bool rewinded; ///< True if stream has been rewound after open (write path). bool writing_long; ///< True if writing long sectors + bool block_zero_written; ///< True if block zero has been written (writing path). /* Options */ uint32_t lzma_dict_size; ///< LZMA dictionary size (writing path). diff --git a/src/write.c b/src/write.c index 52170b1..c513c37 100644 --- a/src/write.c +++ b/src/write.c @@ -150,19 +150,24 @@ AARU_EXPORT int32_t AARU_CALL aaruf_write_sector(void *context, uint64_t sector_ { if(sector_address <= ctx->last_written_block) { - TRACE("Rewinded"); - ctx->rewinded = true; + if(sector_address == 0 && !ctx->block_zero_written) + ctx->block_zero_written = true; + else + { + TRACE("Rewinded"); + ctx->rewinded = true; - // Disable MD5 calculation - if(ctx->calculating_md5) ctx->calculating_md5 = false; - // Disable SHA1 calculation - if(ctx->calculating_sha1) ctx->calculating_sha1 = false; - // Disable SHA256 calculation - if(ctx->calculating_sha256) ctx->calculating_sha256 = false; - // Disable SpamSum calculation - if(ctx->calculating_spamsum) ctx->calculating_spamsum = false; - // Disable BLAKE3 calculation - if(ctx->calculating_blake3) ctx->calculating_blake3 = false; + // Disable MD5 calculation + if(ctx->calculating_md5) ctx->calculating_md5 = false; + // Disable SHA1 calculation + if(ctx->calculating_sha1) ctx->calculating_sha1 = false; + // Disable SHA256 calculation + if(ctx->calculating_sha256) ctx->calculating_sha256 = false; + // Disable SpamSum calculation + if(ctx->calculating_spamsum) ctx->calculating_spamsum = false; + // Disable BLAKE3 calculation + if(ctx->calculating_blake3) ctx->calculating_blake3 = false; + } } else ctx->last_written_block = sector_address; @@ -642,19 +647,24 @@ AARU_EXPORT int32_t AARU_CALL aaruf_write_sector_long(void *context, uint64_t se { if(sector_address <= ctx->last_written_block) { - TRACE("Rewinded"); - ctx->rewinded = true; + if(sector_address == 0 && !ctx->block_zero_written) + ctx->block_zero_written = true; + else + { + TRACE("Rewinded"); + ctx->rewinded = true; - // Disable MD5 calculation - if(ctx->calculating_md5) ctx->calculating_md5 = false; - // Disable SHA1 calculation - if(ctx->calculating_sha1) ctx->calculating_sha1 = false; - // Disable SHA256 calculation - if(ctx->calculating_sha256) ctx->calculating_sha256 = false; - // Disable SpamSum calculation - if(ctx->calculating_spamsum) ctx->calculating_spamsum = false; - // Disable BLAKE3 calculation - if(ctx->calculating_blake3) ctx->calculating_blake3 = false; + // Disable MD5 calculation + if(ctx->calculating_md5) ctx->calculating_md5 = false; + // Disable SHA1 calculation + if(ctx->calculating_sha1) ctx->calculating_sha1 = false; + // Disable SHA256 calculation + if(ctx->calculating_sha256) ctx->calculating_sha256 = false; + // Disable SpamSum calculation + if(ctx->calculating_spamsum) ctx->calculating_spamsum = false; + // Disable BLAKE3 calculation + if(ctx->calculating_blake3) ctx->calculating_blake3 = false; + } } else ctx->last_written_block = sector_address;