Config: Print parsing errors instead of ignoring them

This commit is contained in:
Jonas Kulla 2014-09-23 19:23:11 +02:00
parent 17efcbbbbd
commit 3983fe66e9
1 changed files with 26 additions and 14 deletions

View File

@ -121,6 +121,8 @@ static bool validUtf8(const char *string)
typedef std::vector<std::string> StringVec; typedef std::vector<std::string> StringVec;
namespace po = boost::program_options; namespace po = boost::program_options;
#define CONF_FILE "mkxp.conf"
Config::Config() Config::Config()
: rgssVersion(0), : rgssVersion(0),
debugMode(false), debugMode(false),
@ -190,26 +192,36 @@ void Config::read(int argc, char *argv[])
po::variables_map vm; po::variables_map vm;
/* Parse command line options */ /* Parse command line options */
po::parsed_options cmdPo = try
po::command_line_parser(argc, argv).options(podesc) {
.allow_unregistered() po::parsed_options cmdPo =
.run(); po::command_line_parser(argc, argv).options(podesc).run();
po::store(cmdPo, vm);
}
catch (po::error &error)
{
Debug() << "Command line:" << error.what();
}
GUARD_ALL( po::store(cmdPo, vm); ) /* Parse configuration file */
/* Parse configuration file (mkxp.conf) */
std::ifstream confFile; std::ifstream confFile;
confFile.open("mkxp.conf"); confFile.open(CONF_FILE);
if (confFile) if (confFile)
{ {
GUARD_ALL( po::store(po::parse_config_file(confFile, podesc, true), vm); ) try
{
po::store(po::parse_config_file(confFile, podesc, true), vm);
po::notify(vm);
}
catch (po::error &error)
{
Debug() << CONF_FILE":" << error.what();
}
confFile.close();
} }
confFile.close();
po::notify(vm);
#undef PO_DESC #undef PO_DESC
#define PO_DESC(key, type) GUARD_ALL( key = vm[#key].as< type >(); ) #define PO_DESC(key, type) GUARD_ALL( key = vm[#key].as< type >(); )
@ -276,7 +288,7 @@ void Config::readGameINI()
iniFile.open((iniPath).c_str()); iniFile.open((iniPath).c_str());
po::variables_map vm; po::variables_map vm;
GUARD_ALL( po::store(po::parse_config_file(iniFile, podesc, true), vm); ) po::store(po::parse_config_file(iniFile, podesc, true), vm);
po::notify(vm); po::notify(vm);
iniFile.close(); iniFile.close();