From 9d3cb178db367962f68521985ef9e239e1d03fa9 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 9 Jun 2009 15:23:10 -0400 Subject: [PATCH] Early start of the module system. --- src/Makefile.am | 12 +++++++----- src/module.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/module.h | 7 +++++++ src/upkg.c | 8 ++++++-- 4 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 src/module.c create mode 100644 src/module.h diff --git a/src/Makefile.am b/src/Makefile.am index 95e7082..8b35676 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,9 +5,11 @@ include_HEADERS = upkg.h noinst_HEADERS = pack.h if BUILD_UPKG -bin_PROGRAMS = upkg -upkg_SOURCES = upkg.c exportable.c serializable.c music.c -upkg_CFLAGS = $(GLIB_CFLAGS) -upkg_LDFLAGS = $(GLIB_LIBS) -upkg_LDADD = libupkg.la $(LIBLTDL) + +bin_PROGRAMS = upkg +upkg_SOURCES = upkg.c module.c exportable.c serializable.c music.c +upkg_CPPFLAGS = $(GLIB_CFLAGS) $(LTDLINCL) +upkg_LDFLAGS = $(GLIB_LIBS) +upkg_LDADD = libupkg.la $(LIBLTDL) + endif diff --git a/src/module.c b/src/module.c new file mode 100644 index 0000000..5edc5e2 --- /dev/null +++ b/src/module.c @@ -0,0 +1,42 @@ +#include +#include +#include + +#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; + } +} diff --git a/src/module.h b/src/module.h new file mode 100644 index 0000000..ea52071 --- /dev/null +++ b/src/module.h @@ -0,0 +1,7 @@ +#ifndef MODULE_H_ +#define MODULE_H_ + +int module_init(void); +int module_exit(void); + +#endif diff --git a/src/upkg.c b/src/upkg.c index bcbee2f..a7e96bf 100644 --- a/src/upkg.c +++ b/src/upkg.c @@ -22,6 +22,7 @@ #include #include "upkg.h" +#include "module.h" #include "serializable.h" #include "exportable.h" #include "music.h" @@ -57,13 +58,14 @@ int main(int argc, char **argv) { struct upkg *pkg; - g_type_init(); - if (argc < 2) { fprintf(stderr, "usage: upkg file\n"); return EXIT_FAILURE; } + if (module_init() != 0) + return EXIT_FAILURE; + pkg = upkg_fopen(argv[1]); if (!pkg) { fprintf(stderr, "failed to open package!\n"); @@ -99,5 +101,7 @@ int main(int argc, char **argv) printf("Wrote %s\n", name); upkg_close(pkg); + module_exit(); + return 0; } -- 2.43.2