~registry/kmod/master

« back to all changes in this revision

Viewing changes to libkmod/libkmod-index.h

  • Committer: Lucas De Marchi
  • Date: 2011-12-12 12:30:01 UTC
  • mfrom: (161.1.30)
  • Revision ID: git-v1:2fee2f13ce5f6b17dd672389de422217c56105e2
Merge branch 'use-mmap'

Conflicts:
        libkmod/libkmod.c

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
};
111
111
 
112
112
/* In-memory index (depmod only) */
113
 
 
114
 
#define INDEX_CHILDMAX 128
115
 
struct index_node {
116
 
        char *prefix;           /* path compression */
117
 
        struct index_value *values;
118
 
        unsigned char first;    /* range of child nodes */
119
 
        unsigned char last;
120
 
        struct index_node *children[INDEX_CHILDMAX]; /* indexed by character */
121
 
};
122
 
 
123
 
/* Disk format:
124
 
 
125
 
   uint32_t magic = INDEX_MAGIC;
126
 
   uint32_t version = INDEX_VERSION;
127
 
   uint32_t root_offset;
128
 
 
129
 
   (node_offset & INDEX_NODE_MASK) specifies the file offset of nodes:
130
 
 
131
 
        char[] prefix; // nul terminated
132
 
 
133
 
        char first;
134
 
        char last;
135
 
        uint32_t children[last - first + 1];
136
 
 
137
 
        uint32_t value_count;
138
 
        struct {
139
 
            uint32_t priority;
140
 
            char[] value; // nul terminated
141
 
        } values[value_count];
142
 
 
143
 
   (node_offset & INDEX_NODE_FLAGS) indicates which fields are present.
144
 
   Empty prefixes are omitted, leaf nodes omit the three child-related fields.
145
 
 
146
 
   This could be optimised further by adding a sparse child format
147
 
   (indicated using a new flag).
148
 
 */
149
 
 
150
 
/* Format of node offsets within index file */
151
 
enum node_offset {
152
 
        INDEX_NODE_FLAGS    = 0xF0000000, /* Flags in high nibble */
153
 
        INDEX_NODE_PREFIX   = 0x80000000,
154
 
        INDEX_NODE_VALUES = 0x40000000,
155
 
        INDEX_NODE_CHILDS   = 0x20000000,
156
 
 
157
 
        INDEX_NODE_MASK     = 0x0FFFFFFF, /* Offset value */
158
 
};
159
 
 
160
113
struct index_file;
161
114
struct index_file *index_file_open(const char *filename);
162
115
void index_file_close(struct index_file *idx);
167
120
 
168
121
/* Implementation using mmap */
169
122
struct index_mm;
170
 
struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename);
 
123
struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename,
 
124
                                                                bool populate);
171
125
void index_mm_close(struct index_mm *index);
172
126
char *index_mm_search(struct index_mm *idx, const char *key);
173
127
struct index_value *index_mm_searchwild(struct index_mm *idx, const char *key);