X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/ca8ee16cfde42ea27d40f8e45fa6d96dc24cd5d9..2cfc23174c99ea95a83cdca4e731949574b1e9c8:/src/upkg.c diff --git a/src/upkg.c b/src/upkg.c index 87794cb..94ace92 100644 --- a/src/upkg.c +++ b/src/upkg.c @@ -2,9 +2,9 @@ * 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, @@ -13,8 +13,7 @@ * 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 . */ #include @@ -25,10 +24,10 @@ #include #include "upkg.h" -#include "module.h" -#include "uobject.h" -#include "exportable.h" -#include "loadable.h" +#include +#include +#include +#include enum { MODE_INFO, @@ -54,6 +53,7 @@ void print_version(void) printf("%s\n", PACKAGE_STRING); puts("\ Copyright (C) 2009 Nick Bowler.\n\ +License GPLv3+: GNU GPL version 3 or later .\n\ This is free software: you are free to change and redistribute it.\n\ There is NO WARRANTY, to the extent permitted by law." ); @@ -82,7 +82,7 @@ void print_help(void) } } -void print_upkg_flags(const char *prefix, unsigned long flags) +static void print_upkg_flags(const char *prefix, unsigned long flags) { if (flags & UPKG_FLAG_ALLOW_DOWNLOAD) printf("%sAllowDownload\n", prefix); @@ -98,6 +98,70 @@ void print_upkg_flags(const char *prefix, unsigned long flags) printf("%sRequired\n", prefix); } +static void print_upkg_object_flags(const char *prefix, unsigned long flags) +{ + if (flags & UPKG_OBJ_FLAG_TRANSACTIONAL) + printf("%sTransactional\n", prefix); + if (flags & UPKG_OBJ_FLAG_UNREACHABLE) + printf("%sUnreachable\n", prefix); + if (flags & UPKG_OBJ_FLAG_PUBLIC) + printf("%sPublic\n", prefix); + if (flags & UPKG_OBJ_FLAG_TAG_IMPORT) + printf("%sImport\n", prefix); + if (flags & UPKG_OBJ_FLAG_TAG_EXPORT) + printf("%sTagExport\n", prefix); + if (flags & UPKG_OBJ_FLAG_SOURCE_MODIFIED) + printf("%sSourceModified\n", prefix); + if (flags & UPKG_OBJ_FLAG_TAG_GARBAGE) + printf("%sTagGarbage\n", prefix); + if (flags & UPKG_OBJ_FLAG_NEED_LOAD) + printf("%sNeedLoad\n", prefix); + if (flags & UPKG_OBJ_FLAG_HIGHLIGHT_NAME) + printf("%sHighlightName\n", prefix); + if (flags & UPKG_OBJ_FLAG_IN_SINGULAR_FUNC) + printf("%sInSingularFunc\n", prefix); + if (flags & UPKG_OBJ_FLAG_SUPPRESSED) + printf("%sSuppressed\n", prefix); + if (flags & UPKG_OBJ_FLAG_IN_END_STATE) + printf("%sInEndState\n", prefix); + if (flags & UPKG_OBJ_FLAG_TRANSIENT) + printf("%sTransient\n", prefix); + if (flags & UPKG_OBJ_FLAG_PRELOADING) + printf("%sPreloading\n", prefix); + if (flags & UPKG_OBJ_FLAG_LOAD_FOR_CLIENT) + printf("%sLoadForClient\n", prefix); + if (flags & UPKG_OBJ_FLAG_LOAD_FOR_SERVER) + printf("%sLoadForServer\n", prefix); + if (flags & UPKG_OBJ_FLAG_LOAD_FOR_EDIT) + printf("%sLoadForEdit\n", prefix); + if (flags & UPKG_OBJ_FLAG_STANDALONE) + printf("%sStandalone\n", prefix); + if (flags & UPKG_OBJ_FLAG_NOT_FOR_CLIENT) + printf("%sNotForClient\n", prefix); + if (flags & UPKG_OBJ_FLAG_NOT_FOR_SERVER) + printf("%sNotForServer\n", prefix); + if (flags & UPKG_OBJ_FLAG_NOT_FOR_EDIT) + printf("%sNotForEdit\n", prefix); + if (flags & UPKG_OBJ_FLAG_DESTROYED) + printf("%sDestroyed\n", prefix); + if (flags & UPKG_OBJ_FLAG_NEED_POST_LOAD) + printf("%sNeedPostLoad\n", prefix); + if (flags & UPKG_OBJ_FLAG_HAS_STACK) + printf("%sHasStack\n", prefix); + if (flags & UPKG_OBJ_FLAG_NATIVE) + printf("%sNative\n", prefix); + if (flags & UPKG_OBJ_FLAG_MARKED) + printf("%sMarked\n", prefix); + if (flags & UPKG_OBJ_FLAG_ERROR_SHUTDOWN) + printf("%sErrorShutdown\n", prefix); + if (flags & UPKG_OBJ_FLAG_DEBUG_POST_LOAD) + printf("%sDebugPostLoad\n", prefix); + if (flags & UPKG_OBJ_FLAG_DEBUG_SERIALIZE) + printf("%sDebugSerialize\n", prefix); + if (flags & UPKG_OBJ_FLAG_DEBUG_DESTROY) + printf("%sDebugDestroy\n", prefix); +} + void print_guid(unsigned char guid[static 16]) { for (unsigned i = 0; i < 16; i++) { @@ -121,6 +185,8 @@ void print_upkg_exports(struct upkg *pkg) continue; 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)); } } @@ -133,7 +199,7 @@ int package_info(struct upkg *pkg) printf("Flags: %lx\n", pkg->flags); if (verbose >= 1) { - print_upkg_flags("\t", pkg->flags); + print_upkg_flags(" ", pkg->flags); } if (verbose >= 1) { @@ -154,17 +220,15 @@ int package_info(struct upkg *pkg) static int export(struct upkg *pkg, GObject *obj, unsigned idx) { - struct upkg_file *f = upkg_export_open(pkg, idx); char name[256]; FILE *of; - int rc = -1; - if (u_object_deserialize(obj, f) != 0) { - goto out; + if (u_object_deserialize(obj, pkg, idx) != 0) { + return -1; } if (U_OBJECT_IS_LOADABLE(obj) && u_object_load(obj) != 0) { - goto out; + return -1; } u_object_export_name(obj, name, sizeof name); @@ -173,24 +237,21 @@ static int export(struct upkg *pkg, GObject *obj, unsigned idx) of = fopen(name, "wb"); if (!of) { perror(name); - goto out; + return -1; } - rc = u_object_export(obj, of); + u_object_export(obj, of); if (fclose(of) != 0) { perror(name); - rc = -1; - goto out; + return -1; } if (U_OBJECT_IS_LOADABLE(obj)) { u_object_unload(obj); } -out: - upkg_export_close(f); - return rc; + return 0; } int package_export(struct upkg *pkg) @@ -202,8 +263,12 @@ int package_export(struct upkg *pkg) for (unsigned i = 0; i < pkg->export_count; i++) { class = upkg_export_class(pkg, i, &package); + if (!class) { + fprintf(stderr, "error getting class information.\n"); + return EXIT_FAILURE; + } - type = module_get_class(package, class); + type = u_object_module_get_class(package, class); if (!type) continue; obj = g_object_new(type, NULL); @@ -254,7 +319,7 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - if (module_init() != 0) + if (u_object_module_init() != 0) return EXIT_FAILURE; pkg = upkg_fopen(argv[optind]); @@ -273,6 +338,6 @@ int main(int argc, char **argv) } upkg_close(pkg); - module_exit(); + u_object_module_exit(); return rc; }