diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/authserver/Main.cpp | 6 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 5 | ||||
-rw-r--r-- | src/server/shared/Configuration/Config.cpp | 17 | ||||
-rw-r--r-- | src/server/shared/Configuration/Config.h | 4 | ||||
-rw-r--r-- | src/server/worldserver/Main.cpp | 6 |
5 files changed, 23 insertions, 15 deletions
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index 7c2ed4951c5..69e0d5a1e64 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -68,10 +68,10 @@ int main(int argc, char** argv) if (vm.count("help")) return 0; - if (!sConfigMgr->LoadInitial(configFile)) + std::string configError; + if (!sConfigMgr->LoadInitial(configFile, configError)) { - printf("Invalid or missing configuration file : %s\n", configFile.c_str()); - printf("Verify that the file exists and has \'[authserver]\' written in the top of the file!\n"); + printf("Error in config file: %s\n", configError.c_str()); return 1; } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 533fbe6b2a4..bc1058d931d 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -408,9 +408,10 @@ void World::LoadConfigSettings(bool reload) { if (reload) { - if (!sConfigMgr->Reload()) + std::string configError; + if (!sConfigMgr->Reload(configError)) { - TC_LOG_ERROR("misc", "World settings reload fail: can't read settings from %s.", sConfigMgr->GetFilename().c_str()); + TC_LOG_ERROR("misc", "World settings reload fail: %s.", configError.c_str()); return; } sLog->LoadFromConfig(); 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) diff --git a/src/server/shared/Configuration/Config.h b/src/server/shared/Configuration/Config.h index 42c3a700f3f..ff0233b5669 100644 --- a/src/server/shared/Configuration/Config.h +++ b/src/server/shared/Configuration/Config.h @@ -31,7 +31,7 @@ class ConfigMgr public: /// Method used only for loading main configuration files (authserver.conf and worldserver.conf) - bool LoadInitial(std::string const& file); + bool LoadInitial(std::string const& file, std::string& error); static ConfigMgr* instance() { @@ -39,7 +39,7 @@ public: return &instance; } - bool Reload(); + bool Reload(std::string& error); std::string GetStringDefault(std::string const& name, const std::string& def); bool GetBoolDefault(std::string const& name, bool def); diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 02e6268cd26..3afa9e84e8b 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -109,10 +109,10 @@ extern int main(int argc, char** argv) WinServiceRun(); #endif - if (!sConfigMgr->LoadInitial(configFile)) + std::string configError; + if (!sConfigMgr->LoadInitial(configFile, configError)) { - printf("Invalid or missing configuration file : %s\n", configFile.c_str()); - printf("Verify that the file exists and has \'[worldserver]' written in the top of the file!\n"); + printf("Error in config file: %s\n", configError.c_str()); return 1; } |