From: Christian Herdtweck Date: Thu, 22 Jan 2015 14:03:19 +0000 (+0100) Subject: changed return type of get_configuration in main: return configuration and bool flag X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=b588279a4f985b146ee16ecd4ff038191c504353;p=pingcheck changed return type of get_configuration in main: return configuration and bool flag this way, always get a valid configuration object with default values and some values set even if parsing other options failed. Important for --version where usually fail to read config file but do not need it anyway --- diff --git a/src/main.cpp b/src/main.cpp index bcf8e65..f331d94 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,7 +60,8 @@ const boost::posix_time::time_duration SIGNAL_CHECK_INTERVAL = boost::posix_time // Declarations //----------------------------------------------------------------------------- -ConfigurationItem get_configuration(int, const char**); +typedef std::pair GetConfigReturnType; +GetConfigReturnType get_configuration(int, const char**); LinkStatusItem get_status_notifier(const ConfigurationItem&); void init_logger(); void set_log_output(const ConfigurationItem &); @@ -105,22 +106,18 @@ struct signal_data_struct // Definitions //----------------------------------------------------------------------------- -ConfigurationItem get_configuration( +GetConfigReturnType get_configuration( int argc, const char *argv[] ) { - ConfigurationItem configuration; - ConfigurationReader config_reader; bool parsed_success = config_reader.parse( argc, argv ); - if ( parsed_success ) - { - Configuration config_obj = config_reader.get_configuration(); - configuration.reset( new Configuration( config_obj ) ); - } + Configuration config_obj = config_reader.get_configuration(); - return configuration; + ConfigurationItem configuration( new Configuration( config_obj ) ); + GetConfigReturnType return_val( parsed_success, configuration ); + return return_val; } LinkStatusItem get_status_notifier( @@ -455,12 +452,23 @@ int main( int argc, const char *argv[] ) unsigned max_exceptions = 0; try { - ConfigurationItem configuration = get_configuration( argc, argv ); - if ( configuration.get() == NULL ) + GetConfigReturnType success_and_config = get_configuration( argc, argv ); + ConfigurationItem configuration = success_and_config.second; + + if ( configuration->get_print_version() ) // do this even if parsing of config failed + { + GlobalLogger.debug() << "Printing version info (" << VERSION_STRING << ") and exit" << endl; + cout << PROJECT_NAME << " version " << VERSION_STRING << endl; + return 0; + } + + if ( ! success_and_config.first ) { - GlobalLogger.error() << "no configuration!"; + GlobalLogger.error() << "Could not read/parse configuration!"; + GlobalLogger.debug() << "Return 1 immediately" << endl; return 1; } + GlobalLogger.debug() << "Start setup" << endl; int log_level = configuration->get_log_level(); I2n::Logger::set_log_level( log_level );