diff options
author | bigbear <ns@bigbear.dk> | 2024-02-08 02:36:30 +0100 |
---|---|---|
committer | bigbear <ns@bigbear.dk> | 2024-02-08 19:52:53 +0100 |
commit | add478fbe01e68d63309697dfa016e09f12c2603 (patch) | |
tree | 5200488e6c7ea3c6f01491e46dbdd116d4dfc18c | |
parent | 162eb04a748a19a93c5dbaaa977c693c961f6ccf (diff) |
PR696 - module loading order
-rw-r--r-- | hardinfo2/util.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/hardinfo2/util.c b/hardinfo2/util.c index 6ed326d4..d79b1385 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -963,15 +963,27 @@ static GSList *modules_load(gchar ** module_list) g_free(filename); if (dir) { - while ((filename = (gchar *) g_dir_read_name(dir))) { - if (g_strrstr(filename, "." G_MODULE_SUFFIX) && - module_in_module_list(filename, module_list) && - ((module = module_load(filename)))) { - modules = g_slist_prepend(modules, module); - } + GList *filenames = NULL; + while ((filename = (gchar *)g_dir_read_name(dir))) { + if (g_strrstr(filename, "." G_MODULE_SUFFIX) && + module_in_module_list(filename, module_list)) { + if (g_strrstr(filename, "devices." G_MODULE_SUFFIX)) { + filenames = g_list_prepend(filenames, filename); + } + else { + filenames = g_list_append(filenames, filename); + } } - - g_dir_close(dir); + } + GList* item = NULL; + while (item = g_list_first(filenames)) { + if (module = module_load((gchar *)item->data)) { + modules = g_slist_prepend(modules, module); + } + filenames = g_list_delete_link(filenames, item); + } + g_list_free_full (g_steal_pointer (&filenames), g_object_unref); + g_dir_close(dir); } modules = modules_check_deps(modules); |