summaryrefslogtreecommitdiff
path: root/src/game-server/skillmanager.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2011-03-23 21:11:18 +0100
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2011-03-23 23:08:23 +0100
commit7967b82c19bfa5bd2249abcb807a7a55af031abe (patch)
tree751fdbd7c49466aa2f4a47e237ca489895078018 /src/game-server/skillmanager.cpp
parent0391a2203100d1c6c45e8eb92f10ab625d66906b (diff)
downloadmanaserv-7967b82c19bfa5bd2249abcb807a7a55af031abe.tar.gz
manaserv-7967b82c19bfa5bd2249abcb807a7a55af031abe.tar.bz2
manaserv-7967b82c19bfa5bd2249abcb807a7a55af031abe.tar.xz
manaserv-7967b82c19bfa5bd2249abcb807a7a55af031abe.zip
Fixed problems with loading XML files containing Windows newlines
By using xmlParseFile instead of xmlParseMemory, the system-dependent newlines should be handled automatically. The .tmx.gz files should still be supported, but instead of manually decompressing them the xmlParseFile function should take care of that. It also fixes the leaking of XML documents in both the SkillManager as well as the PermissionManager, since they now rely on XML::Document, which cleans up automatically. Reviewed-by: Stefan Dombrowski
Diffstat (limited to 'src/game-server/skillmanager.cpp')
-rw-r--r--src/game-server/skillmanager.cpp40
1 files changed, 10 insertions, 30 deletions
diff --git a/src/game-server/skillmanager.cpp b/src/game-server/skillmanager.cpp
index d15219a4..75f5f53c 100644
--- a/src/game-server/skillmanager.cpp
+++ b/src/game-server/skillmanager.cpp
@@ -20,7 +20,6 @@
#include "game-server/skillmanager.h"
-#include "common/resourcemanager.h"
#include "utils/string.h" // for the toUpper function
#include "utils/logger.h"
#include "utils/xml.h"
@@ -45,42 +44,23 @@ void SkillManager::reload()
skillMap["KNIFE"] = 101;
*/
- int size;
- char *data = ResourceManager::loadFile(skillReferenceFile, size);
+ XML::Document doc(skillReferenceFile);
+ xmlNodePtr rootNode = doc.rootNode();
- std::string absPathFile = ResourceManager::resolve(skillReferenceFile);
-
- if (!data)
- {
- LOG_ERROR("Skill Manager: Could not find " << skillReferenceFile << "!");
- free(data);
- return;
- }
-
- xmlDocPtr doc = xmlParseMemory(data, size);
- free(data);
-
- if (!doc)
+ if (!rootNode || !xmlStrEqual(rootNode->name, BAD_CAST "skills"))
{
- LOG_ERROR("Skill Manager: Error while parsing skill database ("
- << absPathFile << ")!");
- return;
- }
-
- xmlNodePtr node = xmlDocGetRootElement(doc);
- if (!node || !xmlStrEqual(node->name, BAD_CAST "skills"))
- {
- LOG_ERROR("Skill Manager: " << absPathFile
+ LOG_ERROR("Skill Manager: " << skillReferenceFile
<< " is not a valid database file!");
- xmlFreeDoc(doc);
return;
}
- LOG_INFO("Loading skill reference: " << absPathFile);
+ LOG_INFO("Loading skill reference: " << skillReferenceFile);
- for_each_xml_child_node(setnode, node)
+ for_each_xml_child_node(setnode, rootNode)
{
- if (xmlStrEqual(setnode->name, BAD_CAST "set"))
+ if (!xmlStrEqual(setnode->name, BAD_CAST "set"))
+ continue;
+
// we don't care about sets server-sided (yet?)
for_each_xml_child_node(skillnode, setnode)
{
@@ -158,7 +138,7 @@ void SkillManager::reload()
"Skill map loading. Defaults will fall back to id 0.");
LOG_INFO("Loaded " << skillMap.size() << " skill references from "
- << absPathFile);
+ << skillReferenceFile);
}
int SkillManager::getIdFromString(const std::string &name)