aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbigbear <ns@bigbear.dk>2024-02-08 02:36:30 +0100
committerbigbear <ns@bigbear.dk>2024-02-08 19:52:53 +0100
commitadd478fbe01e68d63309697dfa016e09f12c2603 (patch)
tree5200488e6c7ea3c6f01491e46dbdd116d4dfc18c
parent162eb04a748a19a93c5dbaaa977c693c961f6ccf (diff)
PR696 - module loading order
-rw-r--r--hardinfo2/util.c28
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);