5 #include <glib-object.h>
10 G_DEFINE_TYPE(UPkgModule, upkg_module, G_TYPE_TYPE_MODULE);
12 static unsigned initialized;
14 static void dl_print_errors(const char *prefix)
17 while (err = lt_dlerror()) {
18 if (prefix) fprintf(stderr, "%s: ", prefix);
23 static gboolean module_load(GTypeModule *m)
25 UPkgModule *mod = UPKG_MODULE(m);
26 int (*init_func)(GTypeModule *);
28 mod->dl = lt_dlopenext(G_TYPE_MODULE(m)->name);
30 dl_print_errors(__func__);
34 init_func = lt_dlsym(mod->dl, "init");
35 if (!init_func || init_func(m) != 0) {
36 dl_print_errors(__func__);
44 static void module_unload(GTypeModule *m)
46 UPkgModule *mod = UPKG_MODULE(m);
48 if (lt_dlclose(mod->dl) != 0) {
49 dl_print_errors(__func__);
53 static void upkg_module_init(UPkgModule *mod)
57 static void upkg_module_class_init(UPkgModuleClass *class)
59 GTypeModuleClass *modclass = G_TYPE_MODULE_CLASS(class);
61 modclass->load = module_load;
62 modclass->unload = module_unload;
65 UPkgModule *upkg_module_new(const char *name)
75 name2 = malloc(len+1);
80 UPkgModule *mod = g_object_new(UPKG_MODULE_TYPE, NULL);
86 G_TYPE_MODULE(mod)->name = name2;
87 for (size_t i = 0; i < len; i++) {
88 name2[i] = tolower(name[i]);
98 if (lt_dlinit() != 0) {
99 dl_print_errors(__func__);
110 int module_exit(void)
115 if (lt_dlexit() != 0) {
116 dl_print_errors(__func__);