X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/277b43db46539ddd2f741be806340df69ab0247e..b5a18d3dd9ca4315f9d7f75e90363410db405935:/src/upkg.c diff --git a/src/upkg.c b/src/upkg.c index ee1023a..55d13f8 100644 --- a/src/upkg.c +++ b/src/upkg.c @@ -206,18 +206,39 @@ static void import_print_fullname(const struct upkg_import *import) } } -void print_upkg_exports(struct upkg *pkg) +static void +export_print_class(GTypeModule *pkg, const struct upkg_export *export) { - for (unsigned i = 0; i < pkg->export_count; i++) { - const struct upkg_export *export = upkg_get_export(pkg, i); - const char *package, *class; + struct upkg *upkg = U_PKG(pkg)->pkg; - class = upkg_export_class(pkg, i, &package); + if (export->class < 0) { + const struct upkg_import *class; - if (!class) - continue; + class = upkg_get_import(upkg, -(export->class+1)); + import_print_fullname(class); + } else if (export->class > 0) { + const struct upkg_export *class; + + class = upkg_get_export(upkg, export->class-1); + export_print_fullname(pkg, class); + } else { + printf("Core.Class"); + } +} + +void print_upkg_exports(GTypeModule *pkg) +{ + struct upkg *upkg = U_PKG(pkg)->pkg; + + for (unsigned i = 0; i < upkg->export_count; i++) { + const struct upkg_export *export = upkg_get_export(upkg, i); + + printf("%u - ", i+1); + export_print_fullname(pkg, export); + printf(" ("); + export_print_class(pkg, export); + printf(")\n"); - printf("%u - %s (%s.%s)\n", i+1, export->name, package, class); printf(" Flags: %lx\n", export->flags); if (verbose >= 2) { print_upkg_object_flags(" ", export->flags); @@ -236,29 +257,31 @@ void print_upkg_imports(struct upkg *pkg) } } -int package_info(struct upkg *pkg) +int package_info(GTypeModule *pkg) { - printf("Version: %u\n", pkg->version); - printf("License: %u\n", pkg->license); + struct upkg *upkg = U_PKG(pkg)->pkg; + + printf("Version: %u\n", upkg->version); + printf("License: %u\n", upkg->license); printf("GUID: "); - print_guid(pkg->guid); + print_guid(upkg->guid); - printf("Flags: %lx\n", pkg->flags); + printf("Flags: %lx\n", upkg->flags); if (verbose >= 2) { - print_upkg_flags(" ", pkg->flags); + print_upkg_flags(" ", upkg->flags); } - printf("Names: %lu\n", pkg->name_count); + printf("Names: %lu\n", upkg->name_count); if (verbose >= 3) { - for (unsigned long i = 0; i < pkg->name_count; i++) { - printf("%lu - %s\n", i, upkg_get_name(pkg, i)); + for (unsigned long i = 0; i < upkg->name_count; i++) { + printf("%lu - %s\n", i, upkg_get_name(upkg, i)); } } - printf("Exports: %lu\n", pkg->export_count); + printf("Exports: %lu\n", upkg->export_count); if (verbose >= 1) print_upkg_exports(pkg); - printf("Imports: %lu\n", pkg->import_count); - if (verbose >= 1) print_upkg_imports(pkg); + printf("Imports: %lu\n", upkg->import_count); + if (verbose >= 1) print_upkg_imports(upkg); return 0; } @@ -282,10 +305,9 @@ static int package_list(GTypeModule *pkg, long current) export_print_fullname(pkg, export); if (verbose >= 1) { - const char *class, *package; - - class = upkg_export_class(upkg, i, &package); - printf(" (%s.%s)", package, class); + printf(" ("); + export_print_class(pkg, export); + printf(")"); } putchar('\n'); @@ -359,14 +381,14 @@ static int object_info(GTypeModule *pkg, unsigned long idx) { struct upkg *upkg = U_PKG(pkg)->pkg; const struct upkg_export *export; - const char *class, *package; int ret = 0; export = upkg_get_export(upkg, idx); export_print_fullname(pkg, export); - class = upkg_export_class(upkg, idx, &package); - printf(" (%s.%s)\n", package, class); + printf(" ("); + export_print_class(pkg, export); + printf(")\n"); if (verbose >= 1 && object_dump_properties(pkg, idx) != 0) ret = -1; @@ -513,7 +535,7 @@ static int process_object(int mode, const char *objname) switch (mode) { case MODE_INFO: if (current < 0) - ret = package_info(U_PKG(pkg)->pkg); + ret = package_info(pkg); else ret = object_info(pkg, current); break;