diff --git a/include/dicformat/context.h b/include/dicformat/context.h index 083ea3a..c6d64db 100644 --- a/include/dicformat/context.h +++ b/include/dicformat/context.h @@ -74,7 +74,8 @@ typedef struct dataLinkedList struct dataLinkedList *previous; struct dataLinkedList *next; uint8_t *data; - int type; + int32_t type; + uint32_t length; } dataLinkedList; typedef struct DumpHardwareEntriesWithData diff --git a/include/dicformat/decls.h b/include/dicformat/decls.h index ca9ee7d..33dcb73 100644 --- a/include/dicformat/decls.h +++ b/include/dicformat/decls.h @@ -44,7 +44,7 @@ void *open(const char *filepath); int close(void *context); -uint8_t *read_media_tag(void *context, int tag); +uint8_t *read_media_tag(void *context, int32_t tag, uint32_t *length); void *crc64_init(uint64_t polynomial, uint64_t seed); diff --git a/src/open.c b/src/open.c index 16acbe4..936ae1a 100644 --- a/src/open.c +++ b/src/open.c @@ -383,8 +383,9 @@ void *open(const char *filepath) // TODO: MediaTagType // MediaTagType mediaTagType = GetMediaTagTypeForDataType(blockHeader.type); - mediaTag->type = blockHeader.type; - mediaTag->data = data; + mediaTag->type = blockHeader.type; + mediaTag->data = data; + mediaTag->length = blockHeader.length; if(ctx->mediaTagsHead == NULL) { diff --git a/src/read.c b/src/read.c index 302f3ed..256f95e 100644 --- a/src/read.c +++ b/src/read.c @@ -33,8 +33,10 @@ #include #include -uint8_t *read_media_tag(void *context, int tag) +uint8_t *read_media_tag(void *context, int32_t tag, uint32_t *length) { + *length = 0; + if(context == NULL) { errno = EINVAL; @@ -56,7 +58,10 @@ uint8_t *read_media_tag(void *context, int tag) while(item != NULL) { if(item->type == tag) + { + *length = item->length; return item->data; + } item = item->next; }