From 112f8ab320d432c3d1e2bee14b0035cd4bbb5695 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 18 Oct 2025 16:14:49 +0100 Subject: [PATCH] Update sector tag constants for Aaru compatibility --- include/aaru.h | 4 +++- src/blocks/data.c | 12 +++++++++--- src/read.c | 6 +++--- src/write.c | 6 +++--- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/include/aaru.h b/include/aaru.h index 33939e5..5902db4 100644 --- a/include/aaru.h +++ b/include/aaru.h @@ -893,7 +893,7 @@ typedef struct ImageInfo // NOLINT // NOLINTBEGIN(readability-identifier-naming) typedef enum { - AppleSectorTag = 0, ///< Apple's GCR sector tags, 12 bytes (address prolog + checksum) + AppleSonyTagAaru = 0, ///< Apple's Sony sector tags, 12 bytes (address prolog + checksum) CdSectorSync = 1, ///< 12-byte CD sync pattern (00 FF*10 00) CdSectorHeader = 2, ///< 4-byte CD header (minute, second, frame, mode) CdSectorSubHeader = 3, ///< Mode 2 Form subheader (8 bytes: copy, submode, channel) @@ -913,6 +913,8 @@ typedef enum DvdSectorNumber = 17, ///< DVD sector number, 3 bytes DvdSectorIedAaru = 18, ///< DVD sector ID error detection, 2 bytes DvdSectorEdcAaru = 19, ///< DVD sector EDC, 4 bytes + AppleProfileTagAaru = 20, ///< Apple's Profile sector tags, 20 bytes + PriamDataTowerTagAaru = 21, ///< Priam DataTower sector tags, 24 bytes MaxSectorTag = DvdSectorEdcAaru } SectorTagType; diff --git a/src/blocks/data.c b/src/blocks/data.c index 838fe01..45ea887 100644 --- a/src/blocks/data.c +++ b/src/blocks/data.c @@ -361,14 +361,20 @@ int32_t process_data_block(aaruformat_context *ctx, IndexEntry *entry) ctx->readableSectorTags[CdSectorEdc] = true; break; case CdSectorSubchannel: - ctx->sector_subchannel = data; + ctx->sector_subchannel = data; ctx->readableSectorTags[CdSectorSubchannelAaru] = true; break; case AppleProfileTag: + ctx->sector_subchannel = data; + ctx->readableSectorTags[AppleProfileTagAaru] = true; + break; case AppleSonyTag: + ctx->sector_subchannel = data; + ctx->readableSectorTags[PriamDataTowerTagAaru] = true; + break; case PriamDataTowerTag: - ctx->sector_subchannel = data; - ctx->readableSectorTags[AppleSectorTag] = true; + ctx->sector_subchannel = data; + ctx->readableSectorTags[AppleSonyTagAaru] = true; break; case CompactDiscMode2Subheader: ctx->mode2_subheaders = data; diff --git a/src/read.c b/src/read.c index 92fd600..3f05f86 100644 --- a/src/read.c +++ b/src/read.c @@ -1769,7 +1769,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_read_sector_tag(const void *context, const u memcpy(buffer, ctx->sector_decrypted_title_key + corrected_sector_address * 5, 5); TRACE("Exiting aaruf_read_sector_tag() = AARUF_STATUS_OK"); return AARUF_STATUS_OK; - case AppleSectorTag: + case AppleSonyTagAaru: if(ctx->image_info.MetadataMediaType != BlockMedia) { FATAL("Invalid media type for tag"); @@ -1795,7 +1795,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_read_sector_tag(const void *context, const u memcpy(buffer, ctx->sector_subchannel + corrected_sector_address * 12, 12); TRACE("Exiting aaruf_read_sector_tag() = AARUF_STATUS_OK"); return AARUF_STATUS_OK; - case AppleProfileTag: + case AppleProfileTagAaru: if(ctx->image_info.MetadataMediaType != BlockMedia) { FATAL("Invalid media type for tag"); @@ -1821,7 +1821,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_read_sector_tag(const void *context, const u memcpy(buffer, ctx->sector_subchannel + corrected_sector_address * 20, 20); TRACE("Exiting aaruf_read_sector_tag() = AARUF_STATUS_OK"); return AARUF_STATUS_OK; - case PriamDataTowerTag: + case PriamDataTowerTagAaru: if(ctx->image_info.MetadataMediaType != BlockMedia) { FATAL("Invalid media type for tag"); diff --git a/src/write.c b/src/write.c index 449214b..3725e74 100644 --- a/src/write.c +++ b/src/write.c @@ -2372,7 +2372,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_write_sector_tag(void *context, const uint64 memcpy(ctx->sector_decrypted_title_key + corrected_sector_address * 5, data, 5); TRACE("Exiting aaruf_write_sector_tag() = AARUF_STATUS_OK"); return AARUF_STATUS_OK; - case AppleSectorTag: + case AppleSonyTagAaru: if(ctx->image_info.MetadataMediaType != BlockMedia) { FATAL("Invalid media type for tag"); @@ -2400,7 +2400,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_write_sector_tag(void *context, const uint64 memcpy(ctx->sector_subchannel + corrected_sector_address * 12, data, 12); TRACE("Exiting aaruf_write_sector_tag() = AARUF_STATUS_OK"); return AARUF_STATUS_OK; - case AppleProfileTag: + case AppleProfileTagAaru: if(ctx->image_info.MetadataMediaType != BlockMedia) { FATAL("Invalid media type for tag"); @@ -2428,7 +2428,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_write_sector_tag(void *context, const uint64 memcpy(ctx->sector_subchannel + corrected_sector_address * 20, data, 20); TRACE("Exiting aaruf_write_sector_tag() = AARUF_STATUS_OK"); return AARUF_STATUS_OK; - case PriamDataTowerTag: + case PriamDataTowerTagAaru: if(ctx->image_info.MetadataMediaType != BlockMedia) { FATAL("Invalid media type for tag");