diff options
author | Johannes Schickel | 2008-10-22 17:44:12 +0000 |
---|---|---|
committer | Johannes Schickel | 2008-10-22 17:44:12 +0000 |
commit | 7d331b734186b6d3116debf34eb28bd6c3d807ed (patch) | |
tree | 9c4ae505beb7005ebd23118c4afb8c7eb8351ade /gui/ThemeEngine.cpp | |
parent | f881b95dddd5b9a2bf15179a2b4376f551a20bff (diff) | |
download | scummvm-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.cpp | 13 |
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; } |