// Declarations
//-----------------------------------------------------------------------------
-ConfigurationItem get_configuration(int, const char**);
+typedef std::pair<bool, ConfigurationItem> GetConfigReturnType;
+GetConfigReturnType get_configuration(int, const char**);
LinkStatusItem get_status_notifier(const ConfigurationItem&);
void init_logger();
void set_log_output(const ConfigurationItem &);
// 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(
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 );