Read metadata block.

This commit is contained in:
2019-03-17 23:41:07 +00:00
parent 2f3d685773
commit 7f5e38e52f
3 changed files with 59 additions and 14 deletions

View File

@@ -46,18 +46,20 @@ typedef struct dicformatContext
struct dataLinkedList *mediaTagsHead;
struct dataLinkedList *mediaTagsTail;
unsigned char *sectorPrefix;
unsigned char *sectorPrefixCorrected;
unsigned char *sectorSuffix;
unsigned char *sectorSuffixCorrected;
unsigned char *sectorSubchannel;
unsigned char *mode2Subheaders;
unsigned char shift;
bool inMemoryDdt;
uint64_t *userDataDdt;
size_t mappedMemoryDdtSize;
uint32_t *sectorPrefixDdt;
uint32_t *sectorSuffixDdt;
GeometryBlockHeader geometryBlock;
unsigned char *sectorPrefixCorrected;
unsigned char *sectorSuffix;
unsigned char *sectorSuffixCorrected;
unsigned char *sectorSubchannel;
unsigned char *mode2Subheaders;
unsigned char shift;
bool inMemoryDdt;
uint64_t *userDataDdt;
size_t mappedMemoryDdtSize;
uint32_t *sectorPrefixDdt;
uint32_t *sectorSuffixDdt;
GeometryBlockHeader geometryBlock;
MetadataBlockHeader metadataBlockHeader;
unsigned char *metadataBlock;
} dicformatContext;
typedef struct dataLinkedList

View File

@@ -91,6 +91,8 @@ int close(void *context)
free(ctx->sectorPrefixDdt);
free(ctx->sectorSuffixDdt);
free(ctx->metadataBlock);
free(context);
return 0;

View File

@@ -463,6 +463,7 @@ void *open(const char *filepath)
if(readBytes != sizeof(GeometryBlockHeader))
{
memset(&ctx->geometryBlock, 0, sizeof(GeometryBlockHeader));
fprintf(stderr, "Could not read geometry block, continuing...");
break;
}
@@ -485,8 +486,48 @@ void *open(const char *filepath)
memset(&ctx->geometryBlock, 0, sizeof(GeometryBlockHeader));
break;
case MetadataBlock:
// TODO
// Metadata block
case MetadataBlock:readBytes =
fread(&ctx->metadataBlockHeader,
sizeof(MetadataBlockHeader),
1,
ctx->imageStream);
if(readBytes != sizeof(MetadataBlockHeader))
{
memset(&ctx->metadataBlockHeader, 0, sizeof(MetadataBlockHeader));
fprintf(stderr, "Could not read metadata block header, continuing...");
break;
}
if(ctx->metadataBlockHeader.identifier != idxEntries[i].blockType)
{
memset(&ctx->metadataBlockHeader, 0, sizeof(MetadataBlockHeader));
fprintf(stderr,
"libdicformat: Incorrect identifier for data block at position %"PRIu64"",
idxEntries[i].offset);
break;
}
ctx->metadataBlock = malloc(ctx->metadataBlockHeader.blockSize);
if(ctx->metadataBlock == NULL)
{
memset(&ctx->metadataBlockHeader, 0, sizeof(MetadataBlockHeader));
fprintf(stderr, "libdicformat: Could not allocate memory for metadata block, continuing...");
break;
}
readBytes = fread(ctx->metadataBlock, ctx->metadataBlockHeader.blockSize, 1, ctx->imageStream);
if(readBytes != ctx->metadataBlockHeader.blockSize)
{
memset(&ctx->metadataBlockHeader, 0, sizeof(MetadataBlockHeader));
free(ctx->metadataBlock);
fprintf(stderr, "Could not read metadata block, continuing...");
}
break;
case TracksBlock:
// TODO