diff --git a/Config.cpp b/Config.cpp index 963ac755..7dada817 100644 --- a/Config.cpp +++ b/Config.cpp @@ -238,18 +238,26 @@ namespace config { ; } - void ParseCmdline(int argc, char* argv[]) { - try { + void ParseCmdline(int argc, char* argv[], bool ignoreUnknown) + { + try + { auto style = boost::program_options::command_line_style::unix_style | boost::program_options::command_line_style::allow_long_disguise; style &= ~ boost::program_options::command_line_style::allow_guessing; - store(parse_command_line(argc, argv, m_OptionsDesc, style), m_Options); - } catch (boost::program_options::error& e) { + if (ignoreUnknown) + store(command_line_parser(argc, argv).options(m_OptionsDesc).style (style).allow_unregistered().run(), m_Options); + else + store(parse_command_line(argc, argv, m_OptionsDesc, style), m_Options); + } + catch (boost::program_options::error& e) + { std::cerr << "args: " << e.what() << std::endl; exit(EXIT_FAILURE); } - if (m_Options.count("help") || m_Options.count("h")) { + if (!ignoreUnknown && (m_Options.count("help") || m_Options.count("h"))) + { std::cout << "i2pd version " << I2PD_VERSION << " (" << I2P_VERSION << ")" << std::endl; std::cout << m_OptionsDesc; exit(EXIT_SUCCESS); diff --git a/Config.h b/Config.h index 595331cd..1895da55 100644 --- a/Config.h +++ b/Config.h @@ -41,7 +41,7 @@ namespace config { * * Other exceptions will be passed to higher level. */ - void ParseCmdline(int argc, char* argv[]); + void ParseCmdline(int argc, char* argv[], bool ignoreUnknown = false); /** * @brief Load and parse given config file diff --git a/api.cpp b/api.cpp index ec109439..ffc2de6e 100644 --- a/api.cpp +++ b/api.cpp @@ -19,7 +19,7 @@ namespace api void InitI2P (int argc, char* argv[], const char * appName) { i2p::config::Init (); - i2p::config::ParseCmdline (argc, argv); + i2p::config::ParseCmdline (argc, argv, true); // ignore unknown options and help i2p::config::Finalize (); std::string datadir; i2p::config::GetOption("datadir", datadir);