mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 19:24:40 +00:00
[Specification] Add index version 2.
This commit is contained in:
@@ -34,4 +34,8 @@ include::structs/header.adoc[]
|
|||||||
|
|
||||||
<<<
|
<<<
|
||||||
|
|
||||||
include::structs/blocks.adoc[]
|
include::structs/blocks.adoc[]
|
||||||
|
|
||||||
|
<<<
|
||||||
|
|
||||||
|
include::structs/index2.adoc[]
|
||||||
85
docs/spec/structs/index2.adoc
Normal file
85
docs/spec/structs/index2.adoc
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
=== The index block version 2 (`IDX2`)
|
||||||
|
|
||||||
|
The index block stores references to all blocks present in the file.
|
||||||
|
It is composed of a header, followed by a sequence of entries, the count of which is defined within the header.
|
||||||
|
|
||||||
|
Multiple index blocks may exist within a file to represent previous states or historical versions; however, only the final index block must be referenced by the main file header.
|
||||||
|
|
||||||
|
==== Structure Definition
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
#define INDEX2_MAGIC 0x32584449
|
||||||
|
/**Header for the index, followed by entries */
|
||||||
|
typedef struct IndexHeader2
|
||||||
|
{
|
||||||
|
/**Identifier, <see cref="BlockType.Index" /> */
|
||||||
|
uint32_t identifier;
|
||||||
|
/**How many entries follow this header */
|
||||||
|
uint64_t entries;
|
||||||
|
/**CRC64-ECMA of the index */
|
||||||
|
uint64_t crc64;
|
||||||
|
} IndexHeader;
|
||||||
|
|
||||||
|
==== Field Descriptions
|
||||||
|
|
||||||
|
[cols="2,2,2,6",options="header"]
|
||||||
|
|===
|
||||||
|
|Type
|
||||||
|
|Size
|
||||||
|
|Name
|
||||||
|
|Description
|
||||||
|
|
||||||
|
|uint32_t
|
||||||
|
|4 bytes
|
||||||
|
|identifier
|
||||||
|
|The index block identifier, always `IDX2`
|
||||||
|
|
||||||
|
|uint64_t
|
||||||
|
|8 bytes
|
||||||
|
|entries
|
||||||
|
|The number of entries following this header
|
||||||
|
|
||||||
|
|uint64_t
|
||||||
|
|8 bytes
|
||||||
|
|crc64
|
||||||
|
|CRC64-ECMA checksum of the entries following this header
|
||||||
|
|===
|
||||||
|
|
||||||
|
==== Index entries
|
||||||
|
|
||||||
|
[source,c]
|
||||||
|
/**Index entry */
|
||||||
|
typedef struct IndexEntry
|
||||||
|
{
|
||||||
|
/**Type of item pointed by this entry */
|
||||||
|
uint32_t blockType;
|
||||||
|
/**Type of data contained by the block pointed by this entry */
|
||||||
|
uint32_t dataType;
|
||||||
|
/**Offset in file where item is stored */
|
||||||
|
uint64_t offset;
|
||||||
|
} IndexEntry;
|
||||||
|
|
||||||
|
==== Field Descriptions
|
||||||
|
|
||||||
|
[cols="2,2,2,6",options="header"]
|
||||||
|
|===
|
||||||
|
|Type
|
||||||
|
|Size
|
||||||
|
|Name
|
||||||
|
|Description
|
||||||
|
|
||||||
|
|uint32_t
|
||||||
|
|4 bytes
|
||||||
|
|blockType
|
||||||
|
|The type of block this entry points to.
|
||||||
|
|
||||||
|
|uint32_t
|
||||||
|
|4 bytes
|
||||||
|
|dataType
|
||||||
|
|The type of data the block pointed by this entry contains.
|
||||||
|
|
||||||
|
|uint64_t
|
||||||
|
|8 bytes
|
||||||
|
|offset
|
||||||
|
|The offset in bytes from the start of the file where the block pointed by this entry starts.
|
||||||
|
|===
|
||||||
Reference in New Issue
Block a user