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);