diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 54195c2ee1cf..a36003d27661 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -856,8 +856,17 @@ void RPCConsole::walletReindex() void RPCConsole::buildParameterlist(QString arg) { // Get command-line arguments and remove the application name - QStringList args = QApplication::arguments(); - args.removeFirst(); + QStringList args; + + for (const auto& [key, values] : gArgs.GetCommandLineArgs()) { + for (const auto& value : values) { + if (value.empty()) { + args << QString::fromStdString(key); + } else { + args << QString::fromStdString(key + "=" + value); + } + } + } // Remove existing repair-options args.removeAll(SALVAGEWALLET); diff --git a/src/util/system.cpp b/src/util/system.cpp index 53ca09d26c7b..a268f6603c37 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -401,6 +401,7 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin { LOCK(cs_args); m_override_args.clear(); + m_command_line_args.clear(); for (int i = 1; i < argc; i++) { std::string key(argv[i]); @@ -438,6 +439,7 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin if (!InterpretOption(key, val, flags, m_override_args, error)) { return false; } + m_command_line_args[key].push_back(val); } else { error = strprintf("Invalid parameter %s", key.c_str()); return false; @@ -457,6 +459,12 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin return true; } +const std::map> ArgsManager::GetCommandLineArgs() const +{ + LOCK(cs_args); + return m_command_line_args; +} + unsigned int ArgsManager::FlagsOfKnownArg(const std::string& key) const { assert(key[0] == '-'); diff --git a/src/util/system.h b/src/util/system.h index b8fcbd3a87c3..8dd7daa94e66 100644 --- a/src/util/system.h +++ b/src/util/system.h @@ -193,6 +193,7 @@ class ArgsManager mutable CCriticalSection cs_args; std::map> m_override_args GUARDED_BY(cs_args); + std::map> m_command_line_args GUARDED_BY(cs_args); std::map> m_config_args GUARDED_BY(cs_args); std::string m_network GUARDED_BY(cs_args); std::set m_network_only_args GUARDED_BY(cs_args); @@ -225,6 +226,11 @@ class ArgsManager */ const std::list GetUnrecognizedSections() const; + /** + * Return the map of all the args passed via cmd line + */ + const std::map> GetCommandLineArgs() const; + /** * Return a vector of strings of the given argument *