+#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;
+ }
+}