#include "macro.h"
typedef struct Header Header;
+
typedef struct ObjectHeader ObjectHeader;
typedef union Object Object;
+
typedef struct DataObject DataObject;
typedef struct FieldObject FieldObject;
typedef struct EntryObject EntryObject;
typedef struct HashTableObject HashTableObject;
typedef struct EntryArrayObject EntryArrayObject;
+typedef struct SignatureObject SignatureObject;
+
typedef struct EntryItem EntryItem;
typedef struct HashItem HashItem;
OBJECT_DATA_HASH_TABLE,
OBJECT_FIELD_HASH_TABLE,
OBJECT_ENTRY_ARRAY,
+ OBJECT_SIGNATURE,
_OBJECT_TYPE_MAX
};
le64_t items[];
};
+#define SIGNATURE_LENGTH 160
+
+_packed_ struct SignatureObject {
+ ObjectHeader object;
+ le64_t from;
+ uint8_t signature[SIGNATURE_LENGTH];
+};
+
union Object {
ObjectHeader object;
DataObject data;
EntryObject entry;
HashTableObject hash_table;
EntryArrayObject entry_array;
+ SignatureObject signature;
};
enum {
HEADER_INCOMPATIBLE_COMPRESSED = 1
};
+enum {
+ HEADER_COMPATIBLE_SIGNED = 1
+};
+
_packed_ struct Header {
uint8_t signature[8]; /* "LPKSHHRH" */
uint32_t compatible_flags;
uint8_t state;
uint8_t reserved[7];
sd_id128_t file_id;
- sd_id128_t machine_id;
- sd_id128_t boot_id;
+ sd_id128_t machine_id; /* last writer */
+ sd_id128_t boot_id; /* last writer */
sd_id128_t seqnum_id;
le64_t header_size;
le64_t arena_size;