index: cleanup header, move as much as possible to libkmod-index.c
diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c
index d97a03c..40b223c 100644
--- a/libkmod/libkmod-index.c
+++ b/libkmod/libkmod-index.c
@@ -32,6 +32,45 @@
/* index.c: module index file shared functions for modprobe and depmod */
+#define INDEX_CHILDMAX 128
+
+/* Disk format:
+
+ uint32_t magic = INDEX_MAGIC;
+ uint32_t version = INDEX_VERSION;
+ uint32_t root_offset;
+
+ (node_offset & INDEX_NODE_MASK) specifies the file offset of nodes:
+
+ char[] prefix; // nul terminated
+
+ char first;
+ char last;
+ uint32_t children[last - first + 1];
+
+ uint32_t value_count;
+ struct {
+ uint32_t priority;
+ char[] value; // nul terminated
+ } values[value_count];
+
+ (node_offset & INDEX_NODE_FLAGS) indicates which fields are present.
+ Empty prefixes are omitted, leaf nodes omit the three child-related fields.
+
+ This could be optimised further by adding a sparse child format
+ (indicated using a new flag).
+ */
+
+/* Format of node offsets within index file */
+enum node_offset {
+ INDEX_NODE_FLAGS = 0xF0000000, /* Flags in high nibble */
+ INDEX_NODE_PREFIX = 0x80000000,
+ INDEX_NODE_VALUES = 0x40000000,
+ INDEX_NODE_CHILDS = 0x20000000,
+
+ INDEX_NODE_MASK = 0x0FFFFFFF, /* Offset value */
+};
+
void index_values_free(struct index_value *values)
{
while (values) {