* upkg: tool for manipulating Unreal Tournament packages.
* Copyright (C) 2009 Nick Bowler
*
- * This program is free software; you can redistribute it and/or modify
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <config.h>
#include <uobject/exportable.h>
#include <uobject/loadable.h>
#include <uobject/module.h>
+#include <uobject/package.h>
+#include <uobject/vfs.h>
enum {
MODE_INFO,
printf("%s\n", PACKAGE_STRING);
puts("\
Copyright (C) 2009 Nick Bowler.\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\
This is free software: you are free to change and redistribute it.\n\
There is NO WARRANTY, to the extent permitted by law."
);
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)
{
- struct upkg *pkg;
+ GTypeModule *pkg;
+ const char *pkgname;
unsigned mode = MODE_INFO;
int opt, rc = EXIT_FAILURE;
return EXIT_FAILURE;
}
+ if (u_pkg_vfs_init() != 0)
+ return EXIT_FAILURE;
if (u_object_module_init() != 0)
return EXIT_FAILURE;
- pkg = upkg_fopen(argv[optind]);
+ 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(pkg);
+ rc = package_info(U_PKG(pkg)->pkg);
break;
case MODE_EXPORT:
- rc = package_export(pkg);
+ rc = package_export(U_PKG(pkg)->pkg);
break;
}
- upkg_close(pkg);
+ g_object_unref(pkg);
u_object_module_exit();
+ u_pkg_vfs_exit();
return rc;
}