mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 19:24:40 +00:00
Cache user area tracks.
This commit is contained in:
@@ -68,6 +68,8 @@ typedef struct dicformatContext
|
|||||||
struct DumpHardwareEntriesWithData *dumpHardwareEntriesWithData;
|
struct DumpHardwareEntriesWithData *dumpHardwareEntriesWithData;
|
||||||
struct ImageInfo imageInfo;
|
struct ImageInfo imageInfo;
|
||||||
CdEccContext *eccCdContext;
|
CdEccContext *eccCdContext;
|
||||||
|
uint8_t numberOfDataTracks;
|
||||||
|
TrackEntry *dataTracks;
|
||||||
} dicformatContext;
|
} dicformatContext;
|
||||||
|
|
||||||
typedef struct dataLinkedList
|
typedef struct dataLinkedList
|
||||||
|
|||||||
32
src/open.c
32
src/open.c
@@ -50,6 +50,7 @@ void *open(const char *filepath)
|
|||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint32_t *cdDdt;
|
uint32_t *cdDdt;
|
||||||
uint64_t crc64;
|
uint64_t crc64;
|
||||||
|
uint8_t temp8u;
|
||||||
|
|
||||||
ctx = (dicformatContext *)malloc(sizeof(dicformatContext));
|
ctx = (dicformatContext *)malloc(sizeof(dicformatContext));
|
||||||
memset(ctx, 0, sizeof(dicformatContext));
|
memset(ctx, 0, sizeof(dicformatContext));
|
||||||
@@ -784,11 +785,38 @@ void *open(const char *filepath)
|
|||||||
ctx->tracksHeader.entries,
|
ctx->tracksHeader.entries,
|
||||||
idxEntries[i].offset);
|
idxEntries[i].offset);
|
||||||
|
|
||||||
// TODO: Cache flags and ISRCs
|
|
||||||
|
|
||||||
ctx->imageInfo.HasPartitions = true;
|
ctx->imageInfo.HasPartitions = true;
|
||||||
ctx->imageInfo.HasSessions = true;
|
ctx->imageInfo.HasSessions = true;
|
||||||
|
|
||||||
|
ctx->numberOfDataTracks = 0;
|
||||||
|
|
||||||
|
// TODO: Handle track 0
|
||||||
|
for(i = 0, temp8u = 0; i < ctx->tracksHeader.entries; i++)
|
||||||
|
{
|
||||||
|
if(ctx->trackEntries[i].sequence > temp8u && ctx->trackEntries[i].sequence <= 99)
|
||||||
|
temp8u = ctx->trackEntries[i].sequence;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(temp8u > 0)
|
||||||
|
{
|
||||||
|
ctx->dataTracks = (TrackEntry *)malloc(sizeof(TrackEntry) * temp8u);
|
||||||
|
|
||||||
|
if(ctx->dataTracks == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
ctx->numberOfDataTracks = temp8u;
|
||||||
|
|
||||||
|
for(i = 0, temp8u = 0; i < ctx->tracksHeader.entries; i++)
|
||||||
|
{
|
||||||
|
if(ctx->trackEntries[i].sequence > 99)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
memcpy(&ctx->dataTracks[ctx->trackEntries[i].sequence],
|
||||||
|
&ctx->trackEntries[i],
|
||||||
|
sizeof(TrackEntry));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
// CICM XML metadata block
|
// CICM XML metadata block
|
||||||
case CicmBlock:readBytes = fread(&ctx->cicmBlockHeader, sizeof(CicmMetadataBlock), 1, ctx->imageStream);
|
case CicmBlock:readBytes = fread(&ctx->cicmBlockHeader, sizeof(CicmMetadataBlock), 1, ctx->imageStream);
|
||||||
|
|||||||
Reference in New Issue
Block a user