Skip to content

Commit 8d3da29

Browse files
more refactoring
1 parent 6c98bd3 commit 8d3da29

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

Server/mods/deathmatch/logic/CMainConfig.cpp

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include "CHTTPD.h"
2323
#include "CStaticFunctionDefinitions.h"
2424

25-
#define MTA_SERVER_CONF_TEMPLATE "mtaserver.conf.template"
25+
#define SETTINGS_TEMPLATE_PATH "mtaserver.conf.template"
2626

2727
extern CGame* g_pGame;
2828

@@ -853,44 +853,52 @@ bool CMainConfig::AddMissingSettings()
853853
if (!g_pGame->IsUsingMtaServerConf())
854854
return false;
855855

856-
SString templateFileName = PathJoin(g_pServerInterface->GetServerModPath(), MTA_SERVER_CONF_TEMPLATE);
856+
const std::string templateFileName = PathJoin(g_pServerInterface->GetServerModPath(), SETTINGS_TEMPLATE_PATH);
857857
if (!FileExists(templateFileName))
858858
return false;
859859

860-
CXMLFile* templateFile = g_pServerInterface->GetXML()->CreateXML(templateFileName);
861-
CXMLNode* templateRootNode = templateFile && templateFile->Parse() ? templateFile->GetRootNode() : nullptr;
860+
std::unique_ptr<CXMLFile> templateFile(g_pServerInterface->GetXML()->CreateXML(templateFileName.c_str()));
861+
if (!templateFile || !templateFile->Parse())
862+
{
863+
CLogger::ErrorPrintf("Failed to parse template file: '%s'\n", templateFileName.c_str());
864+
return false;
865+
}
866+
867+
CXMLNode* templateRootNode = templateFile->GetRootNode();
862868
if (!templateRootNode)
863869
{
864-
CLogger::ErrorPrintf("Can't parse '%s'\n", *templateFileName);
870+
CLogger::ErrorPrintf("Template file '%s' has no root node\n", templateFileName.c_str());
865871
return false;
866872
}
867873

868874
// Check that each item in the template also exists in the server config
869-
bool configChanged = false;
875+
bool configChanged = false;
870876
CXMLNode* previousNode = nullptr;
877+
871878
for (auto it = templateRootNode->ChildrenBegin(); it != templateRootNode->ChildrenEnd(); ++it)
872879
{
873880
CXMLNode* templateNode = *it;
874-
SString templateNodeName = templateNode->GetTagName();
881+
const std::string& templateNodeName = templateNode->GetTagName();
875882

876883
// Skip certain optional nodes
877884
if (templateNodeName == "resource" || templateNodeName == "module")
878885
continue;
879886

880-
CXMLNode* foundNode = m_pRootNode->FindSubNode(templateNodeName);
887+
CXMLNode* foundNode = m_pRootNode->FindSubNode(templateNodeName.c_str());
881888
if (!foundNode)
882889
{
883-
SString templateNodeValue = templateNode->GetTagContent();
884-
SString templateNodeComment = templateNode->GetCommentText();
885-
foundNode = m_pRootNode->CreateSubNode(templateNodeName, previousNode);
886-
foundNode->SetTagContent(templateNodeValue);
887-
foundNode->SetCommentText(templateNodeComment, true);
888-
CLogger::LogPrintf("[%s] Added missing '%s' setting to mtaserver.conf\n", MTA_SERVER_CONF_TEMPLATE, *templateNodeName);
890+
const std::string templateNodeValue = templateNode->GetTagContent();
891+
const std::string templateNodeComment = templateNode->GetCommentText();
892+
893+
foundNode = m_pRootNode->CreateSubNode(templateNodeName.c_str(), previousNode);
894+
foundNode->SetTagContent(templateNodeValue.c_str());
895+
foundNode->SetCommentText(templateNodeComment.c_str(), true);
896+
897+
CLogger::LogPrintf("Added missing '%s' setting to mtaserver.conf\n", &templateNodeName);
889898
configChanged = true;
890899
}
891900
previousNode = foundNode;
892901
}
893-
g_pServerInterface->GetXML()->DeleteXML(templateFile);
894902
return configChanged;
895903
}
896904

0 commit comments

Comments
 (0)