HRESULT CProjectDBI::Load () { HRESULT hr; CString strDBIFile; CFile file; CString strName; CFileStatus fileStatus; if (m_bLoaded) { return (S_OK); }; // Currently loading? Recursive call!!! if (m_bLoading) { return (E_FAIL); }; m_bLoading = true; strDBIFile.Format ("%s\\%s", (LPCTSTR)m_pContext->GetDebugInfoPath (), PROJECT_DBI_FILE); if (!file.Open (strDBIFile, CFile::modeRead | CFile::shareDenyWrite)) { m_bLoading = false; return (S_FALSE); }; try { CXMLArchive ar (&file, CArchive::load); try { ar.Load (); if (!ar.MoveDown (DBI_XML_PROJECT)) { Corrupt (); throw E_FAIL; }; } catch (HRESULT hr) { try { ar.Close (); } catch (HRESULT) { }; m_bLoading = false; return (hr); }; try { if (!ar.GetAttribute (DBI_XML_ID, strName)) { Corrupt (); throw E_FAIL; }; m_strName = strName; hr = LoadPOUs (ar); if (FAILED (hr)) { throw hr; }; } catch (HRESULT hr) { try { ar.MoveUp (); } catch (HRESULT) { }; try { ar.Close (); } catch (HRESULT) { }; m_bLoading = false; return (hr); }; try { ar.MoveUp (); } catch (HRESULT hr) { try { ar.Close (); } catch (HRESULT) { }; return (hr); }; ar.Close (); } catch (HRESULT hr) { return (hr); }; m_bLoaded = true; m_bLoading = false; if (!CFile::GetStatus (strDBIFile, fileStatus)) { fileStatus.m_mtime = 0; } else { m_Timestamp = fileStatus.m_mtime; }; return (S_OK); }
void Dnode:: NotifyCorrupt(bool bk) { Corrupt(bk); }