aboutsummaryrefslogtreecommitdiff
path: root/modutils/modutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'modutils/modutils.h')
-rw-r--r--modutils/modutils.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/modutils/modutils.h b/modutils/modutils.h
index 5f059c716..2cbd1448a 100644
--- a/modutils/modutils.h
+++ b/modutils/modutils.h
@@ -16,6 +16,36 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
/* linux/include/linux/module.h has 64, but this is also used
* internally for the maximum alias name length, which can be quite long */
#define MODULE_NAME_LEN 256
+#define MODULE_HASH_SIZE 256
+
+typedef struct module_entry {
+ struct module_entry *next;
+ char *name, *modname;
+ llist_t *deps;
+ IF_MODPROBE(
+ llist_t *realnames;
+ unsigned flags;
+ const char *probed_name; /* verbatim as seen on cmdline */
+ char *options; /* options from config files */
+ )
+ IF_DEPMOD(
+ llist_t *aliases;
+ llist_t *symbols;
+ struct module_entry *dnext, *dprev;
+ )
+} module_entry;
+
+typedef struct module_db {
+ module_entry *buckets[MODULE_HASH_SIZE];
+} module_db;
+
+#define moddb_foreach_module(db, module, index) \
+ for ((index) = 0; (index) < MODULE_HASH_SIZE; (index)++) \
+ for (module = (db)->buckets[index]; module; module = module->next)
+
+module_entry *moddb_get(module_db *db, const char *s) FAST_FUNC;
+module_entry *moddb_get_or_create(module_db *db, const char *s) FAST_FUNC;
+void moddb_free(module_db *db) FAST_FUNC;
void replace(char *s, char what, char with) FAST_FUNC;
char *replace_underscores(char *s) FAST_FUNC;