aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeEngine.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2008-10-22 17:44:12 +0000
committerJohannes Schickel2008-10-22 17:44:12 +0000
commit7d331b734186b6d3116debf34eb28bd6c3d807ed (patch)
tree9c4ae505beb7005ebd23118c4afb8c7eb8351ade /gui/ThemeEngine.cpp
parentf881b95dddd5b9a2bf15179a2b4376f551a20bff (diff)
downloadscummvm-rg350-7d331b734186b6d3116debf34eb28bd6c3d807ed.tar.gz
scummvm-rg350-7d331b734186b6d3116debf34eb28bd6c3d807ed.tar.bz2
scummvm-rg350-7d331b734186b6d3116debf34eb28bd6c3d807ed.zip
Committed updated version of my patch #2184529 "SearchSet: Get rid of SharedPtr usage".
svn-id: r34837
Diffstat (limited to 'gui/ThemeEngine.cpp')
-rw-r--r--gui/ThemeEngine.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index 7d59720d7d..13fd1ea24d 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -525,38 +525,42 @@ bool ThemeEngine::loadThemeXML(const Common::String &themeName) {
if (!node.exists() || !node.isReadable())
return false;
- Common::ArchivePtr archive;
+ Common::Archive *archive;
if (node.getName().hasSuffix(".zip") && !node.isDirectory()) {
#ifdef USE_ZLIB
Common::ZipArchive *zipArchive = new Common::ZipArchive(node);
- archive = Common::ArchivePtr(zipArchive);
+ archive = zipArchive;
if (!zipArchive || !zipArchive->isOpen()) {
+ delete zipArchive;
warning("Failed to open Zip archive '%s'.", themeName.c_str());
return false;
}
#endif
} else if (node.isDirectory()) {
- archive = Common::ArchivePtr(new Common::FSDirectory(node));
+ archive = new Common::FSDirectory(node);
}
Common::File themercFile;
themercFile.open("THEMERC", *archive);
if (!themercFile.isOpen()) {
+ delete archive;
warning("Theme '%s' contains no 'THEMERC' file.", themeName.c_str());
return false;
}
Common::String stxHeader = themercFile.readLine();
if (!themeConfigParseHeader(stxHeader, _themeName) || _themeName.empty()) {
+ delete archive;
warning("Corrupted 'THEMERC' file in theme '%s'", _themeFileName.c_str());
return false;
}
Common::ArchiveMemberList members;
if (0 == archive->listMatchingMembers(members, "*.stx")) {
+ delete archive;
warning("Found no STX files for theme '%s'.", themeName.c_str());
return false;
}
@@ -566,12 +570,14 @@ bool ThemeEngine::loadThemeXML(const Common::String &themeName) {
assert((*i)->getName().hasSuffix(".stx"));
if (_parser->loadStream((*i)->open()) == false) {
+ delete archive;
warning("Failed to load STX file '%s'", (*i)->getName().c_str());
_parser->close();
return false;
}
if (_parser->parse() == false) {
+ delete archive;
warning("Failed to parse STX file '%s'", (*i)->getName().c_str());
_parser->close();
return false;
@@ -580,6 +586,7 @@ bool ThemeEngine::loadThemeXML(const Common::String &themeName) {
_parser->close();
}
+ delete archive;
assert(!_themeName.empty());
return true;
}