Loading...
Searching...
No Matches
metadata.h File Reference

Packed on-disk metadata block headers for descriptive strings and CICM XML (if present). More...

Go to the source code of this file.

## Data Structures

struct | MetadataBlockHeader
| Header for a metadata block containing offsets and lengths to UTF-16LE descriptive strings. More...
struct | CicmMetadataBlock
| Header for a CICM XML metadata block (identifier == BlockType::CicmBlock). More...
struct | AaruMetadataJsonBlockHeader
| Header for an Aaru metadata JSON block (identifier == BlockType::AaruMetadataJsonBlock). More...

## Typedefs

typedef struct MetadataBlockHeader | MetadataBlockHeader
typedef struct CicmMetadataBlock | CicmMetadataBlock
typedef struct AaruMetadataJsonBlockHeader | AaruMetadataJsonBlockHeader

## Detailed Description

Packed on-disk metadata block headers for descriptive strings and CICM XML (if present).

Two metadata-related block header layouts are defined:

- MetadataBlockHeader (BlockType::MetadataBlock): offsets + lengths for several UTF-16LE strings.
- CicmMetadataBlock (BlockType::CicmBlock): length of embedded CICM XML metadata payload.

All multi-byte integers are little-endian. Structures are packed (1-byte alignment). All textual fields referenced by offsets are UTF-16LE, null-terminated (0x0000). Length fields include the terminating null (i.e. length >= 2 and an even number). Offsets are relative to the start of the corresponding block header (byte 0 = first byte of the header). No padding is implicitly added between strings; producers may pack them tightly or align them manually (alignment not required by the specification).

Metadata block layout (conceptual): MetadataBlockHeader (fixed size) <variable region holding each present UTF-16LE string in any order chosen by the writer>

Invariants / validation recommendations for MetadataBlockHeader:

- identifier == BlockType::MetadataBlock
- blockSize >= sizeof(MetadataBlockHeader)
- For every (offset,length) pair where length > 0:
  - offset >= sizeof(MetadataBlockHeader)
  - offset + length <= blockSize
  - length % 2 == 0
  - The 16-bit code unit at (offset + length - 2) == 0x0000 (null terminator)
- mediaSequence >= 0 and lastMediaSequence >= 0; if lastMediaSequence > 0 then 0 <= mediaSequence < lastMediaSequence

CICM metadata block layout: CicmMetadataBlock (header) <length bytes of UTF-8 or XML text payload (implementation-defined, not null-terminated)>

NOTE: The library code reading these blocks must not assume strings are present; a zero length means the corresponding field is omitted. Offsets for omitted fields MAY be zero or arbitrary; readers should skip them whenever length == 0.

Definition in file metadata.h.

## Typedef Documentation

## AaruMetadataJsonBlockHeader

typedef struct AaruMetadataJsonBlockHeader AaruMetadataJsonBlockHeader

## CicmMetadataBlock

typedef struct CicmMetadataBlock CicmMetadataBlock

## MetadataBlockHeader

typedef struct MetadataBlockHeader MetadataBlockHeader