]> git.draconx.ca Git - upkg.git/blobdiff - src/upkg.c
package: Get rid of separate mechanisms for opening packages.
[upkg.git] / src / upkg.c
index 2c268b4c5cdafb97fcc6894b5539f9fbcc1d6ef9..d3a946b2fada97e2f3f649c25a89f5af0bbdcfa5 100644 (file)
@@ -29,6 +29,7 @@
 #include <uobject/loadable.h>
 #include <uobject/module.h>
 #include <uobject/package.h>
+#include <uobject/vfs.h>
 
 enum {
        MODE_INFO,
@@ -286,7 +287,8 @@ int package_export(struct upkg *pkg)
 
 int main(int argc, char **argv)
 {
-       UPkg *upkg;
+       GTypeModule *pkg;
+       const char *pkgname;
        unsigned mode = MODE_INFO;
        int opt, rc = EXIT_FAILURE;
 
@@ -320,25 +322,39 @@ int main(int argc, char **argv)
                return EXIT_FAILURE;
        }
 
+       if (u_pkg_vfs_init() != 0)
+               return EXIT_FAILURE;
        if (u_object_module_init() != 0)
                return EXIT_FAILURE;
 
-       upkg = U_PKG(u_pkg_new_by_file(argv[optind]));
-       if (!upkg) {
+       pkgname = u_pkg_vfs_add_local(NULL, argv[optind]);
+       if (!pkgname) {
+               fprintf(stderr, "failed to add package `%s'.\n", argv[optind]);
+               return EXIT_FAILURE;
+       }
+
+       pkg = u_pkg_open(pkgname);
+       if (!pkg) {
                fprintf(stderr, "failed to open package!\n");
                return EXIT_FAILURE;
        }
 
+       if (!g_type_module_use(pkg)) {
+               fprintf(stderr, "failed to load package: %s\n", pkg->name);
+               return EXIT_FAILURE;
+       }
+
        switch (mode) {
        case MODE_INFO:
-               rc = package_info(upkg->pkg);
+               rc = package_info(U_PKG(pkg)->pkg);
                break;
        case MODE_EXPORT:
-               rc = package_export(upkg->pkg);
+               rc = package_export(U_PKG(pkg)->pkg);
                break;
        }
 
-       g_object_unref(upkg);
+       g_object_unref(pkg);
        u_object_module_exit();
+       u_pkg_vfs_exit();
        return rc;
 }