From 1ee8cdc52f4376c2ebd0dc2794b526dac930f8d4 Mon Sep 17 00:00:00 2001 From: Philipp Seiler Date: Fri, 18 May 2018 13:03:07 +0200 Subject: [PATCH] Added support for listing the output file Added information about listing parameter in README.md --- README.md | 4 ++++ pkg2zip.c | 58 +++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 847c213..b22956a 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,10 @@ If you don't have zRIF fake license, but just want to unpack files, then omit la Resulting zip file will not include work.bin. This is useful for patch pkg files. +To get output file name of the zip, use `-l` (must come before pkg file and cannot be used with `-x`): + + pkg2zip -l package.pkg + To avoid zipping process and create individual files, use `-x` argument (must come before pkg file): pkg2zip -x package.pkg [zRIF_STRING] diff --git a/pkg2zip.c b/pkg2zip.c index c99d17e..3a6686a 100644 --- a/pkg2zip.c +++ b/pkg2zip.c @@ -272,9 +272,9 @@ typedef enum { int main(int argc, char* argv[]) { sys_output_init(); - sys_output("pkg2zip v1.8\n"); int zipped = 1; + int listing = 0; int cso = 0; const char* pkg_arg = NULL; const char* zrif_arg = NULL; @@ -284,6 +284,10 @@ int main(int argc, char* argv[]) { zipped = 0; } + else if (strcmp(argv[i], "-l") == 0) + { + listing = 1; + } else if (strncmp(argv[i], "-c", 2) == 0) { if (argv[i][2] != 0) @@ -305,14 +309,20 @@ int main(int argc, char* argv[]) } } } - + if (listing == 0) + { + sys_output("pkg2zip v1.8\n"); + } if (pkg_arg == NULL) { fprintf(stderr, "ERROR: no pkg file specified\n"); - sys_error("Usage: %s [-x] [-c[N]] file.pkg [zRIF]\n", argv[0]); + sys_error("Usage: %s [-x] [-l] [-c[N]] file.pkg [zRIF]\n", argv[0]); } - sys_output("[*] loading...\n"); + if (listing == 0) + { + sys_output("[*] loading...\n"); + } uint64_t pkg_size; sys_file pkg = sys_open(pkg_arg, &pkg_size); @@ -496,32 +506,50 @@ int main(int argc, char* argv[]) type_str = content_type == 0xe ? "PSP-Go" : content_type == 0xf ? "PSP-Mini" : "PSP-NeoGeo"; } snprintf(root, sizeof(root), "%s [%.9s] [%s]%s", title, id, type_str, ext); - sys_output("[*] unpacking %s\n", type_str); + if (listing == 0) + { + sys_output("[*] unpacking %s\n", type_str); + } } else if (type == PKG_TYPE_PSX) { snprintf(root, sizeof(root), "%s [%.9s] [PSX]%s", title, id, ext); - sys_output("[*] unpacking PSX\n"); + if (listing == 0) + { + sys_output("[*] unpacking PSX\n"); + } } else if (type == PKG_TYPE_VITA_DLC) { snprintf(root, sizeof(root), "%s [%.9s] [%s] [DLC-%s]%s", title, id, get_region(id), id2, ext); - sys_output("[*] unpacking Vita DLC\n"); + if (listing == 0) + { + sys_output("[*] unpacking Vita DLC\n"); + } } else if (type == PKG_TYPE_VITA_PATCH) { snprintf(root, sizeof(root), "%s [%.9s] [%s] [PATCH] [v%s]%s", title, id, get_region(id), pkg_version, ext); - sys_output("[*] unpacking Vita PATCH\n"); + if (listing == 0) + { + sys_output("[*] unpacking Vita PATCH\n"); + } } else if (type == PKG_TYPE_VITA_PSM) { snprintf(root, sizeof(root), "%.9s [%s] [PSM]%s", id, get_region(id), ext); - sys_output("[*] unpacking Vita PSM\n"); + if (listing == 0) + { + sys_output("[*] unpacking Vita PSM\n"); + } } else if (type == PKG_TYPE_VITA_APP) { snprintf(root, sizeof(root), "%s [%.9s] [%s]%s", title, id, get_region(id), ext); - sys_output("[*] unpacking Vita APP\n"); + if (listing == 0) + { + sys_output("[*] unpacking Vita APP\n"); + } } else { @@ -529,6 +557,16 @@ int main(int argc, char* argv[]) sys_error("ERROR: unsupported type\n"); } + if (listing && zipped) + { + sys_output("%s\n", root); + exit(0); + } + else if (listing || zipped) + { + sys_error("ERROR: Listing option without creating zip is useless\n"); + } + if (zipped) { sys_output("[*] creating '%s' archive\n", root);