]> git.draconx.ca Git - upkg.git/commitdiff
uobject: Clean up the module loader namespace.
authorNick Bowler <nbowler@draconx.ca>
Fri, 24 Jul 2009 15:52:11 +0000 (11:52 -0400)
committerNick Bowler <nbowler@draconx.ca>
Fri, 24 Jul 2009 15:52:11 +0000 (11:52 -0400)
src/module.c
src/module.h [new file with mode: 0644]
src/uobject/module.h
src/upkg.c

index b1067dbd60bda507705eb5dc29c6eea3b3f97676..88a7f81b00137b81a57ed2f7030673e32e7bb03f 100644 (file)
@@ -25,6 +25,7 @@
 #include <ltdl.h>
 
 #include <uobject/module.h>
+#include "module.h"
 #include "avl.h"
 
 static unsigned initialized;
@@ -94,7 +95,7 @@ static void upkg_module_class_init(UPkgModuleClass *class)
        modclass->unload = module_unload;
 }
 
-UPkgModule *upkg_module_new(const char *name)
+static UPkgModule *uobject_module_new(const char *name)
 {
        char *name2;
 
@@ -125,7 +126,7 @@ static int modcmp(const void *a, const void *b, void *_data)
        return strcmp(ma->name, mb->name);
 }
 
-int module_init(void)
+int uobject_module_init(void)
 {
        if (!initialized) {
                package_tree = avl_create(modcmp, NULL, NULL);
@@ -147,7 +148,7 @@ int module_init(void)
        return 0;
 }
 
-int module_exit(void)
+int uobject_module_exit(void)
 {
        if (--initialized)
                return 0;
@@ -160,7 +161,7 @@ int module_exit(void)
        return 0;
 }
 
-GType module_get_class(const char *package, const char *class)
+GType uobject_module_get_class(const char *package, const char *class)
 {
        char buf[strlen(package) + strlen(class) + 1];
        GTypeModule search = { .name = str_cpy_lower(buf, package) };
@@ -169,7 +170,7 @@ GType module_get_class(const char *package, const char *class)
        if (!mod) {
                void **p;
 
-               mod = G_TYPE_MODULE(upkg_module_new(package));
+               mod = G_TYPE_MODULE(uobject_module_new(package));
                if (!mod) {
                        return 0;
                }
diff --git a/src/module.h b/src/module.h
new file mode 100644 (file)
index 0000000..d28dabb
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ *  upkg: tool for manipulating Unreal Tournament packages.
+ *  Copyright (C) 2009 Nick Bowler
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef MODULE_H_
+#define MODULE_H_
+
+#include <glib-object.h>
+#include <ltdl.h>
+
+#define UPKG_MODULE_TYPE (upkg_module_get_type())
+#define UPKG_MODULE(obj) \
+       G_TYPE_CHECK_INSTANCE_CAST(obj, UPKG_MODULE_TYPE, UPkgModule)
+#define UPKG_MODULE_CLASS(class) \
+       G_TYPE_CHECK_CLASS_CAST(class, UPKG_MODULE_TYPE, UPkgModuleClass)
+#define IS_UPKG_MODULE(obj) \
+       G_TYPE_CHECK_INSTANCE_TYPE(obj, UPKG_MODULE_TYPE)
+#define IS_UPKG_MODULE_CLASS(class) \
+       G_TYPE_CHECK_CLASS_TYPE(class, UPKG_MODULE_TYPE, UPkgModuleClass)
+
+typedef struct UPkgModule      UPkgModule;
+typedef struct UPkgModuleClass UPkgModuleClass;
+
+struct UPkgModule {
+       GTypeModule parent;
+
+       lt_dlhandle dl;
+};
+
+struct UPkgModuleClass {
+       GTypeModuleClass parent;
+};
+
+static UPkgModule *uobject_module_new(const char *name);
+
+#endif
index 03fe0ec70d9cdf7680c569e0ffb50bbbcbdee8b0..2f5a211b867dc49a9e037dc5bf82f7db703543b8 100644 (file)
 #define UOBJECT_MODULE_H_
 
 #include <glib-object.h>
-#include <ltdl.h>
 
-#define UPKG_MODULE_TYPE (upkg_module_get_type())
-#define UPKG_MODULE(obj) \
-       G_TYPE_CHECK_INSTANCE_CAST(obj, UPKG_MODULE_TYPE, UPkgModule)
-#define UPKG_MODULE_CLASS(class) \
-       G_TYPE_CHECK_CLASS_CAST(class, UPKG_MODULE_TYPE, UPkgModuleClass)
-#define IS_UPKG_MODULE(obj) \
-       G_TYPE_CHECK_INSTANCE_TYPE(obj, UPKG_MODULE_TYPE)
-#define IS_UPKG_MODULE_CLASS(class) \
-       G_TYPE_CHECK_CLASS_TYPE(class, UPKG_MODULE_TYPE, UPkgModuleClass)
-
-typedef struct UPkgModule      UPkgModule;
-typedef struct UPkgModuleClass UPkgModuleClass;
-
-struct UPkgModule {
-       GTypeModule parent;
-
-       lt_dlhandle dl;
-};
-
-struct UPkgModuleClass {
-       GTypeModuleClass parent;
-};
-
-UPkgModule *upkg_module_new(const char *name);
+/*
+ * Initialize the UObject module system.  Returns 0 on success, -1 otherwise.
+ * The module system can be safely initialized multiple times.
+ */
+int uobject_module_init(void);
 
-int module_init(void);
-int module_exit(void);
+/*
+ * Shutdown the UObject module system.  Returns 0 on success, -1 otherwise.
+ * The module system is only shut down when this function has been called as
+ * many times as uobject_module_init.
+ */
+int uobject_module_exit(void);
 
-GType module_get_class(const char *package, const char *class);
+/*
+ * Get a class handle from the UObject module system.  This will load the
+ * appropriate shared object if necessary.  The resulting handle can then be
+ * used to create instances of the class with g_object_new.
+ *
+ * Returns 0 on failure.
+ */
+GType uobject_module_get_class(const char *package, const char *class);
 
 #endif
index 4e524ef8cc2912bb9a83494a6c0fa49146148777..c8d2469ae7578039acf5411ce11096683d9479b5 100644 (file)
@@ -202,7 +202,7 @@ int package_export(struct upkg *pkg)
                        return EXIT_FAILURE;
                }
 
-               type = module_get_class(package, class);
+               type = uobject_module_get_class(package, class);
                if (!type) continue;
 
                obj = g_object_new(type, NULL);
@@ -253,7 +253,7 @@ int main(int argc, char **argv)
                return EXIT_FAILURE;
        }
 
-       if (module_init() != 0)
+       if (uobject_module_init() != 0)
                return EXIT_FAILURE;
 
        pkg = upkg_fopen(argv[optind]);
@@ -272,6 +272,6 @@ int main(int argc, char **argv)
        }
 
        upkg_close(pkg);
-       module_exit();
+       uobject_module_exit();
        return rc;
 }