]> git.draconx.ca Git - upkg.git/blobdiff - src/module.c
Early start of the module system.
[upkg.git] / src / module.c
diff --git a/src/module.c b/src/module.c
new file mode 100644 (file)
index 0000000..5edc5e2
--- /dev/null
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <glib-object.h>
+#include <ltdl.h>
+
+#include "module.h"
+
+static unsigned initialized;
+
+static void dl_print_errors(const char *prefix)
+{
+       const char *err;
+       while (err = lt_dlerror()) {
+               if (prefix) fprintf(stderr, "%s: ", prefix);
+               puts(lt_dlerror());
+       }
+}
+
+int module_init(void)
+{
+       if (!initialized) {
+               if (lt_dlinit() != 0) {
+                       dl_print_errors(__func__);
+                       return -1;
+               }
+
+               g_type_init();
+       }
+
+       initialized++;
+       return 0;
+}
+
+int module_exit(void)
+{
+       if (--initialized)
+               return 0;
+
+       if (lt_dlexit() != 0) {
+               dl_print_errors(__func__);
+               return -1;
+       }
+}