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)
int main(int argc, char **argv)
{
GTypeModule *pkg;
- const char *pkgname;
+ 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) {
- print_usage(stderr);
- return EXIT_FAILURE;
- }
-
- if (u_pkg_vfs_init() != 0)
- return EXIT_FAILURE;
- if (u_object_module_init() != 0)
- return EXIT_FAILURE;
-
- pkgname = u_pkg_vfs_add_local(NULL, argv[optind]);
if (!pkgname) {
- fprintf(stderr, "failed to add package `%s'.\n", argv[optind]);
+ print_usage(stderr);
return EXIT_FAILURE;
}
return EXIT_FAILURE;
}
- if (!g_type_module_use(pkg)) {
+ if (!g_type_module_use(pkg) || !U_PKG(pkg)->pkg) {
fprintf(stderr, "failed to load package: %s\n", pkg->name);
return EXIT_FAILURE;
}
break;
}
- g_object_unref(pkg);
+ g_type_module_unuse(pkg);
u_object_module_exit();
u_pkg_vfs_exit();
return rc;