1.3 KiB
1.3 KiB
FPK1 format
[ header ][ data blobs ][ string table ][ directory entries ]
Header (28 bytes)
| Field | Type | Size | Offset |
|---|---|---|---|
magic |
char[4] | 4 | 0 |
entry_count |
uint64_t | 8 | 4 |
dir_offset |
uint64_t | 8 | 12 |
strtab_offset |
uint64_t | 8 | 20 |
magic = "FPK1".
FPK_HEADER_SIZE (28): field-by-field, not sizeof().
Data blobs
Raw bytes, back-to-back, no padding, writer add order.
String table
Paths, /-separated, NUL-terminated, back-to-back, entry order.
strtab_offset points here.
Directory (25 bytes per entry)
| Field | Type | Size | Offset |
|---|---|---|---|
path_offset |
uint64_t | 8 | 0 |
data_offset |
uint64_t | 8 | 8 |
data_size |
uint64_t | 8 | 16 |
method |
uint8_t | 1 | 24 |
path_offset relative to strtab_offset. data_offset absolute.
FPK_DIR_ENTRY_SIZE (25): field-by-field, not sizeof().
dir_offset points here, last region. File size = dir_offset + entry_count * FPK_DIR_ENTRY_SIZE.
Compression
method: reserved, v1 = FPK_METHOD_STORE (0) only.
Endianness
Little-endian on disk, always. Big-endian host swaps on read/write.