#include <uobject/loadable.h>
#include <uobject/module.h>
#include <uobject/package.h>
+#include <uobject/vfs.h>
enum {
MODE_INFO,
int verbose = 0;
static const char *progname = "upkg";
-static const char *sopts = "ixvVH";
+static const char *sopts = "ixvf:VH";
static const struct option lopts[] = {
{ "info", 0, NULL, 'i' },
{ "export", 0, NULL, 'x' },
+ { "file", 1, NULL, 'f' },
{ "verbose", 0, NULL, 'v' },
{ "version", 0, NULL, 'V' },
{ "help", 0, NULL, 'H' },
void print_usage(FILE *f)
{
- fprintf(f, "Usage: %s [options] package\n", progname);
+ fprintf(f, "Usage: %s [options]\n", progname);
}
void print_help(void)
printf("%u - %s (%s.%s)\n", i+1, name, package, class);
printf(" Flags: %lx\n", upkg_export_flags(pkg, i));
- print_upkg_object_flags(" ", upkg_export_flags(pkg, i));
+ if (verbose >= 2) {
+ print_upkg_object_flags(" ", upkg_export_flags(pkg, i));
+ }
}
}
print_guid(pkg->guid);
printf("Flags: %lx\n", pkg->flags);
- if (verbose >= 1) {
+ if (verbose >= 2) {
print_upkg_flags(" ", pkg->flags);
}
- if (verbose >= 1) {
- printf("Names: %lu\n", pkg->name_count);
- if (verbose >= 2) {
- for (unsigned long i = 0; i < pkg->name_count; i++) {
- printf("\t%s\n", upkg_get_name(pkg, i));
- }
+ printf("Names: %lu\n", pkg->name_count);
+ if (verbose >= 3) {
+ for (unsigned long i = 0; i < pkg->name_count; i++) {
+ printf("\t%s\n", upkg_get_name(pkg, i));
}
}
int main(int argc, char **argv)
{
- UPkg *upkg;
+ GTypeModule *pkg;
+ const char *pkgname = NULL;
unsigned mode = MODE_INFO;
int opt, rc = EXIT_FAILURE;
if (argc > 0) progname = argv[0];
+ if (u_pkg_vfs_init() != 0)
+ return EXIT_FAILURE;
+ if (u_object_module_init() != 0)
+ return EXIT_FAILURE;
+
while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) {
switch (opt) {
+ case 'f':
+ pkgname = u_pkg_vfs_add_local(NULL, optarg);
+ if (!pkgname) {
+ fprintf(stderr, "failed to add package `%s'.\n", optarg);
+ return EXIT_FAILURE;
+ }
+ break;
case 'i':
mode = MODE_INFO;
break;
}
}
- if (argv[optind] == NULL) {
+ if (!pkgname) {
print_usage(stderr);
return EXIT_FAILURE;
}
- if (u_object_module_init() != 0)
+ pkg = u_pkg_open(pkgname);
+ if (!pkg) {
+ fprintf(stderr, "failed to open package!\n");
return EXIT_FAILURE;
+ }
- upkg = U_PKG(u_pkg_new_by_file(argv[optind]));
- if (!upkg) {
- fprintf(stderr, "failed to open package!\n");
+ if (!g_type_module_use(pkg) || !U_PKG(pkg)->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_type_module_unuse(pkg);
u_object_module_exit();
+ u_pkg_vfs_exit();
return rc;
}