37 int (*load_module_so)(
void *module,
const char *libname,
const char *plugin_name),
38 void (*init_module)(
void *module),
39 gint (*sort_modules)(gconstpointer a, gconstpointer b))
41 GList *plugin_list = NULL;
43 const gchar *dir_name;
45 g_strlcat(moduledir, subdir,
sizeof(moduledir));
46 GDir *dir = g_dir_open(moduledir, 0, NULL);
50 while((dir_name = g_dir_read_name(dir)))
55 char *plugin_name = g_strndup(dir_name + name_offset, strlen(dir_name) - name_end);
56 void *
module = calloc(1, module_size);
57 gchar *libname = g_module_build_path(moduledir, plugin_name);
62 gchar *pref_line = g_strdup_printf(
"%s/%s/enable", subdir, plugin_name);
81 if(load) res = load_module_so(module, libname, plugin_name);
93 plugin_list = g_list_prepend(plugin_list, module);
95 if(init_module) init_module(module);
100 plugin_list = g_list_sort(plugin_list, sort_modules);
102 plugin_list = g_list_reverse(plugin_list);
GList * dt_module_load_modules(const char *subdir, size_t module_size, int(*load_module_so)(void *module, const char *libname, const char *plugin_name), void(*init_module)(void *module), gint(*sort_modules)(gconstpointer a, gconstpointer b))