Read media tags.

This commit is contained in:
2019-03-17 23:01:54 +00:00
parent 40ae5d6c88
commit 3d070e8fc2
2 changed files with 70 additions and 1 deletions

View File

@@ -64,6 +64,24 @@ int close(void *context)
free(ctx->sectorSubchannel);
free(ctx->mode2Subheaders);
if(ctx->mediaTagsTail != NULL)
{
dataLinkedList *mediaTag = ctx->mediaTagsTail;
while(mediaTag->previous != NULL)
{
free(mediaTag->data);
mediaTag = mediaTag->previous;
free(mediaTag->next);
}
}
if(ctx->mediaTagsHead != NULL)
{
free(ctx->mediaTagsHead->data);
free(ctx->mediaTagsHead);
}
free(context);
return 0;

View File

@@ -259,6 +259,8 @@ void *open(const char *filepath)
// TODO: Check CRC, if not correct, skip it
dataLinkedList *mediaTag = NULL;
// Check if it's not a media tag, but a sector tag, and fill the appropriate table then
switch(idxEntries[i].dataType)
{
@@ -320,7 +322,56 @@ void *open(const char *filepath)
case CompactDiscMode2Subheader:ctx->mode2Subheaders = data;
break;
default:
// TODO: MediaTags
if(ctx->mediaTagsHead != NULL)
{
mediaTag = ctx->mediaTagsHead;
while(mediaTag != NULL)
{
if(mediaTag->type == blockHeader.type)
{
fprintf(stderr,
"libdicformat: Media tag type %d duplicated, removing previous entry...",
blockHeader.type);
free(mediaTag->data);
mediaTag->data = data;
break;
}
mediaTag = mediaTag->next;
}
}
// If we mediaTag is NULL means we have arrived the end of the list without finding a duplicate or the list was empty
if(mediaTag != NULL)
break;
mediaTag = malloc(sizeof(dataLinkedList));
if(mediaTag == NULL)
{
fprintf(stderr, "libdicformat: Cannot allocate memory for media tag list entry.");
break;
}
memset(mediaTag, 0, sizeof(dataLinkedList));
// TODO: MediaTagType
// MediaTagType mediaTagType = GetMediaTagTypeForDataType(blockHeader.type);
mediaTag->type = blockHeader.type;
mediaTag->data = data;
if(ctx->mediaTagsHead == NULL)
{
ctx->mediaTagsHead = mediaTag;
}
else
{
mediaTag->previous = ctx->mediaTagsTail;
ctx->mediaTagsTail->next = mediaTag;
}
ctx->mediaTagsTail = mediaTag;
break;
}