Index: ps/trunk/source/gui/CGUI.cpp =================================================================== --- ps/trunk/source/gui/CGUI.cpp +++ ps/trunk/source/gui/CGUI.cpp @@ -535,6 +535,7 @@ CXeromyces xeroFile; if (xeroFile.Load(g_VFS, Filename, "gui") != PSRETURN_OK) + // The error has already been reported by CXeromyces return; XMBElement node = xeroFile.GetRoot(); Index: ps/trunk/source/ps/XML/Xeromyces.cpp =================================================================== --- ps/trunk/source/ps/XML/Xeromyces.cpp +++ ps/trunk/source/ps/XML/Xeromyces.cpp @@ -126,14 +126,12 @@ if (ret == INFO::OK) { // Found a cached XMB - load it - if (m_Data.ReadFromFile(vfs, xmbPath)) - { - if(!Initialise(m_Data)) - return PSRETURN_Xeromyces_XMLParseError; + if (m_Data.ReadFromFile(vfs, xmbPath) && Initialise(m_Data)) return PSRETURN_OK; - } // If this fails then we'll continue and (re)create the loose cache - - // this failure legitimately happens due to partially-written XMB files. + // this failure legitimately happens due to partially-written XMB files or XMB version upgrades. + // NB: at this point xmbPath may point to an archived file, we want to write a loose cached version. + xmbPath = cacheLoader.LooseCachePath(filename, validatorGrammarHash, XMBStorage::XMBVersion); } else if (ret == INFO::SKIPPED) {