From 0f219e5ae6eb13d92d2f3dda22c23bf502cf0d4a Mon Sep 17 00:00:00 2001 From: John Wu Date: Thu, 31 Oct 2019 02:37:24 -0400 Subject: [PATCH] Better argument parsing logic --- native/jni/magiskboot/main.cpp | 36 +++++++++++++++------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/native/jni/magiskboot/main.cpp b/native/jni/magiskboot/main.cpp index 9efa10d49..2c5a89c5d 100644 --- a/native/jni/magiskboot/main.cpp +++ b/native/jni/magiskboot/main.cpp @@ -148,29 +148,25 @@ int main(int argc, char *argv[]) { printf("\n"); munmap(buf, size); } else if (argc > 2 && action == "unpack") { - if (argv[2] == "-n"sv) { - if (argv[3] == "-h"sv) { - if (argc == 4) + int idx = 2; + bool nodecomp = false; + bool hdr = false; + for (;;) { + if (idx >= argc) + usage(argv[0]); + if (argv[idx][0] != '-') + break; + for (char *flag = &argv[idx][1]; *flag; ++flag) { + if (*flag == 'n') + nodecomp = true; + else if (*flag == 'h') + hdr = true; + else usage(argv[0]); - return unpack(argv[4], true, true); - } else { - if (argc == 3) - usage(argv[0]); - return unpack(argv[3], true); } - } else if (argv[2] == "-h"sv) { - if (argv[3] == "-n"sv) { - if (argc == 4) - usage(argv[0]); - return unpack(argv[4], true, true); - } else { - if (argc == 3) - usage(argv[0]); - return unpack(argv[3], false, true); - } - } else { - return unpack(argv[2]); + ++idx; } + return unpack(argv[idx], nodecomp, hdr); } else if (argc > 2 && action == "repack") { if (argv[2] == "-n"sv) { if (argc == 3)