]> git.draconx.ca Git - upkg.git/commitdiff
uobject: Add a helper function to load objects from packages.
authorNick Bowler <nbowler@draconx.ca>
Tue, 22 Mar 2011 00:11:55 +0000 (20:11 -0400)
committerNick Bowler <nbowler@draconx.ca>
Tue, 22 Mar 2011 21:46:22 +0000 (17:46 -0400)
src/uobject/uobject.c
src/uobject/uobject.h
src/upkg.c

index 581ac0798f3d45d0c4542ba31f3c5d49e5d52950..7b0a79e4e4a751f2a435582ea1ee934e30afdfbb 100644 (file)
@@ -23,6 +23,7 @@
 #include <glib-object.h>
 
 #include <uobject/uobject.h>
+#include <uobject/module.h>
 #include "upkg.h"
 #include "pack.h"
 
@@ -216,6 +217,27 @@ int u_object_deserialize(GObject *obj, struct upkg *pkg, unsigned long idx)
        return rc;
 }
 
+GObject *u_object_new_from_package(struct upkg *upkg, unsigned long idx)
+{
+       const struct upkg_export *export;
+       const char *class, *package;
+       GObject *obj = NULL;
+       GType type;
+
+       class = upkg_export_class(upkg, idx, &package);
+
+       type = u_object_module_get_class(package, class);
+       if (type) {
+               obj = g_object_new(type, NULL);
+               if (u_object_deserialize(obj, upkg, idx) != 0) {
+                       g_object_unref(obj);
+                       return NULL;
+               }
+       }
+
+       return obj;
+}
+
 static void u_object_init(UObject *o)
 {
        o->pkg      = NULL;
index 7319ee68efb2d0b5b89aaa271c81c0e8844fdf8c..0d0d45c1692b2568da4655f369143d3786617866 100644 (file)
@@ -54,4 +54,6 @@ GType u_object_get_type(void);
 
 int u_object_deserialize(GObject *obj, struct upkg *pkg, unsigned long idx);
 
+GObject *u_object_new_from_package(struct upkg *pkg, unsigned long idx);
+
 #endif
index 5766e8ba4bed90d2152074ffcb0560c39df1db3a..c13a867f7b1dfd8cbdbf21977c537ccc89d8da19 100644 (file)
@@ -279,19 +279,12 @@ static int object_info(GTypeModule *pkg, unsigned long idx)
        if (verbose >= 1) {
                GParamSpec **props;
                GObject *obj;
-               GType type;
                unsigned n;
 
-               type = u_object_module_get_class(package, class);
-               if (!type) {
-                       printf("  (unknown class)\n");
-                       return 0;
-               }
-
-               obj = g_object_new(type, NULL);
-
-               if (u_object_deserialize(obj, upkg, idx) != 0) {
-                       g_object_unref(obj);
+               obj = u_object_new_from_package(upkg, idx);
+               if (!obj) {
+                       fprintf(stderr, "%s: failed to load object.\n",
+                                       progname);
                        return -1;
                }