aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Configuration/Config.cpp
diff options
context:
space:
mode:
authorDDuarte <dnpd.dd@gmail.com>2014-07-29 01:47:00 +0100
committerDDuarte <dnpd.dd@gmail.com>2014-07-29 01:47:00 +0100
commit0e52b111f3731611ff6c5be2bf0bd849d4e012fb (patch)
treeb2f1f6a1b16ab79078fdce924e088ca162b630db /src/server/shared/Configuration/Config.cpp
parent833195062c310685b479ed16ff4ac5ef5664c021 (diff)
Core/Config: User-friendlyfy configuration parsing errors
It will now print useful error messages that pinpoint the issue with the config file (missing file, bad syntax, etc) In memory of MitchesD that lost 18 hours finding a problem with his config because of a duplicated line.
Diffstat (limited to 'src/server/shared/Configuration/Config.cpp')
-rw-r--r--src/server/shared/Configuration/Config.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/server/shared/Configuration/Config.cpp b/src/server/shared/Configuration/Config.cpp
index ecebf30182e..6b83f562520 100644
--- a/src/server/shared/Configuration/Config.cpp
+++ b/src/server/shared/Configuration/Config.cpp
@@ -25,7 +25,7 @@
using namespace boost::property_tree;
-bool ConfigMgr::LoadInitial(std::string const& file)
+bool ConfigMgr::LoadInitial(std::string const& file, std::string& error)
{
std::lock_guard<std::mutex> lock(_configLock);
@@ -34,25 +34,32 @@ bool ConfigMgr::LoadInitial(std::string const& file)
try
{
ptree fullTree;
- boost::property_tree::ini_parser::read_ini(file, fullTree);
+ ini_parser::read_ini(file, fullTree);
if (fullTree.empty())
+ {
+ error = "empty file (" + file + ")";
return false;
+ }
// Since we're using only one section per config file, we skip the section and have direct property access
_config = fullTree.begin()->second;
}
- catch (std::exception const& /*ex*/)
+ catch (ini_parser::ini_parser_error const& e)
{
+ if (e.line() == 0)
+ error = e.message() + " (" + e.filename() + ")";
+ else
+ error = e.message() + " (" + e.filename() + ":" + std::to_string(e.line()) + ")";
return false;
}
return true;
}
-bool ConfigMgr::Reload()
+bool ConfigMgr::Reload(std::string& error)
{
- return LoadInitial(_filename.c_str());
+ return LoadInitial(_filename.c_str(), error);
}
std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def)