From cb2d17e316da7d12a8121bcc93c1a9a6b1afc5df Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Wed, 12 Nov 2014 14:27:17 +0100 Subject: [PATCH] more rigorous command line option checking; ensure parser errors are printed to stderr --- src/config/configurationcommandline.cpp | 22 +++++++--------------- src/config/configurationreader.cpp | 6 ++++++ src/main.cpp | 5 ----- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/config/configurationcommandline.cpp b/src/config/configurationcommandline.cpp index afce481..c7add1d 100644 --- a/src/config/configurationcommandline.cpp +++ b/src/config/configurationcommandline.cpp @@ -33,8 +33,6 @@ using boost::program_options::options_description; using boost::program_options::parsed_options; using boost::program_options::positional_options_description; using boost::program_options::variables_map; -using boost::program_options::collect_unrecognized; -using boost::program_options::include_positional; using I2n::Logger::GlobalLogger; //----------------------------------------------------------------------------- @@ -117,25 +115,19 @@ bool ConfigurationCommandLine::process( variables_map *vm ) parsed_options parsed_opt = command_line_parser( argc, const_cast( argv ) ). options( cmdline_options ). positional( p ). - allow_unregistered(). run(); - - // TODO not sure whether the "allow_unregistered()" above is required or not - // Because of this option, it is easy to make mistakes in options, so at least - // warn - vector unrecognized_options = collect_unrecognized(parsed_opt.options, - include_positional); - if ( !unrecognized_options.empty() ) - { - GlobalLogger.warning() << "Accepted unrecognized options" << endl; - } - store( parsed_opt, *vm ); notify( *vm ); } catch ( const std::exception &ex ) { - GlobalLogger.error() << ex.what() << endl; + GlobalLogger.error() << "Error parsing command line options: " << ex.what() << endl; + + if (true) // TODO: if GlobalLogger is not logging to console + { // ensure that error about command line options shows on command line + cerr << "Error parsing command line options: " << ex.what() << endl; + } + return false; } diff --git a/src/config/configurationreader.cpp b/src/config/configurationreader.cpp index 48f8261..ef8a62d 100644 --- a/src/config/configurationreader.cpp +++ b/src/config/configurationreader.cpp @@ -81,6 +81,12 @@ bool ConfigurationReader::parse( } string file_name = Config.get_config_file_name(); + if (file_name.empty()) + { + return false; // otherwise only get message about failed + // file name assertion which is confusing because error lies elsewhere + } + ConfigurationFile file( file_name ); bool configuration_file_processed = file.process( &vm ); if ( configuration_file_processed ) diff --git a/src/main.cpp b/src/main.cpp index a467405..25c0da1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,11 +82,6 @@ ConfigurationItem get_configuration( Configuration config_obj = config_reader.get_configuration(); configuration.reset( new Configuration( config_obj ) ); } - else - { - GlobalLogger.error() << "Failed to parse options from command line and/or config file! " - << "Continue with standard values." << endl; - } return configuration; } -- 1.7.1