From b69dc620627b9e354d63c4c2ed1d37c8567a7047 Mon Sep 17 00:00:00 2001 From: jakcron Date: Tue, 1 May 2018 13:20:50 +0800 Subject: [PATCH] [nstool] implement --partX command for nca. --- programs/nstool/source/UserSettings.cpp | 44 ++++++++++++++++++++++--- programs/nstool/source/UserSettings.h | 19 +++++++++-- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/programs/nstool/source/UserSettings.cpp b/programs/nstool/source/UserSettings.cpp index d95993d..e447efc 100644 --- a/programs/nstool/source/UserSettings.cpp +++ b/programs/nstool/source/UserSettings.cpp @@ -52,7 +52,6 @@ void UserSettings::showHelp() printf(" nstool [--listfs] [--fsdir ] \n"); printf(" --listfs Print file system\n"); printf(" --fsdir Extract file system to directory\n"); - /* printf("\n NCA (Nintendo Content Archive)\n"); printf(" nstool [--listfs] [--bodykey --titlekey ] [--part0 ...] <.nca file>\n"); printf(" --listfs Print file system in embedded partitions\n"); @@ -62,7 +61,6 @@ void UserSettings::showHelp() printf(" --part1 Extract \"partition 1\" to directory \n"); printf(" --part2 Extract \"partition 2\" to directory \n"); printf(" --part3 Extract \"partition 3\" to directory \n"); - */ } const std::string UserSettings::getInputPath() const @@ -115,6 +113,26 @@ const sOptional& UserSettings::getFsPath() const return mFsPath; } +const sOptional& UserSettings::getPart0Path() const +{ + return mPart0Path; +} + +const sOptional& UserSettings::getPart1Path() const +{ + return mPart1Path; +} + +const sOptional& UserSettings::getPart2Path() const +{ + return mPart2Path; +} + +const sOptional& UserSettings::getPart3Path() const +{ + return mPart3Path; +} + void UserSettings::populateCmdArgs(int argc, char** argv, sCmdArgs& cmd_args) { @@ -226,10 +244,28 @@ void UserSettings::populateCmdArgs(int argc, char** argv, sCmdArgs& cmd_args) cmd_args.nca_bodykey = args[i+1]; } - else if (args[i] == "-o") + else if (args[i] == "--part0") { if (!hasParamter) throw fnd::Exception(kModuleName, args[i] + " requries a parameter."); - cmd_args.output_path = args[i+1]; + cmd_args.part0_path = args[i+1]; + } + + else if (args[i] == "--part1") + { + if (!hasParamter) throw fnd::Exception(kModuleName, args[i] + " requries a parameter."); + cmd_args.part1_path = args[i+1]; + } + + else if (args[i] == "--part2") + { + if (!hasParamter) throw fnd::Exception(kModuleName, args[i] + " requries a parameter."); + cmd_args.part2_path = args[i+1]; + } + + else if (args[i] == "--part3") + { + if (!hasParamter) throw fnd::Exception(kModuleName, args[i] + " requries a parameter."); + cmd_args.part3_path = args[i+1]; } else diff --git a/programs/nstool/source/UserSettings.h b/programs/nstool/source/UserSettings.h index fbd1afe..030d6d5 100644 --- a/programs/nstool/source/UserSettings.h +++ b/programs/nstool/source/UserSettings.h @@ -26,6 +26,10 @@ public: const sOptional& getNormalPath() const; const sOptional& getSecurePath() const; const sOptional& getFsPath() const; + const sOptional& getPart0Path() const; + const sOptional& getPart1Path() const; + const sOptional& getPart2Path() const; + const sOptional& getPart3Path() const; private: const std::string kModuleName = "UserSettings"; @@ -33,7 +37,6 @@ private: struct sCmdArgs { sOptional input_path; - sOptional output_path; sOptional devkit_keys; sOptional keyset_path; sOptional file_type; @@ -47,11 +50,14 @@ private: sOptional fs_path; sOptional nca_titlekey; sOptional nca_bodykey; + sOptional part0_path; + sOptional part1_path; + sOptional part2_path; + sOptional part3_path; void clear() { input_path.isSet = false; - output_path.isSet = false; devkit_keys.isSet = false; keyset_path.isSet = false; file_type.isSet = false; @@ -65,6 +71,10 @@ private: fs_path.isSet = false; nca_titlekey.isSet = false; nca_bodykey.isSet = false; + part0_path.isSet = false; + part1_path.isSet = false; + part2_path.isSet = false; + part3_path.isSet = false; } }; @@ -80,6 +90,11 @@ private: sOptional mSecurePath; sOptional mFsPath; + sOptional mPart0Path; + sOptional mPart1Path; + sOptional mPart2Path; + sOptional mPart3Path; + void populateCmdArgs(int argc, char** argv, sCmdArgs& cmd_args); void populateKeyset(sCmdArgs& args); void populateUserSettings(sCmdArgs& args);