diff --git a/source/ps/Config.cpp b/source/ps/Config.cpp index b4bb27431f..3919b91e0b 100755 --- a/source/ps/Config.cpp +++ b/source/ps/Config.cpp @@ -1,6 +1,7 @@ -// Last modified: 13 November 2003 (Mark Thompson) +// Last modified: 22 November 2003 (Mark Thompson) // TODO: A few changes from VFS -> CFile usage if required. +// TODO: Optimizations, when we've decided what needs to be done. #include "Config.h" #include "vfs.h" @@ -19,11 +20,12 @@ running." ); // SConfigData: Internal file representation //-------------------------------------------------------- -SConfigData::SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader ) +SConfigData::SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader, bool _Static ) { Filename = _Filename; Data = _Data; DynamicLoader = _DynamicLoader; + Static = _Static; Timestamp = TIME_UNREGISTERED; } @@ -48,7 +50,7 @@ CConfig::CConfig() // Add a file to the registered list. //-------------------------------------------------------- -PS_RESULT CConfig::Register( CStr Filename, void* Data, LoaderFunction DynamicLoader ) +PS_RESULT CConfig::Register( CStr Filename, void* Data, LoaderFunction DynamicLoader, bool Static ) { assert( DynamicLoader != NULL ); @@ -76,17 +78,10 @@ PS_RESULT CConfig::Register( CStr Filename, void* Data, LoaderFunction DynamicLo return( PS_FILE_NOT_FOUND ); } - m_FileList.push_back( SConfigData( Filename, Data, DynamicLoader ) ); + m_FileList.push_back( SConfigData( Filename, Data, DynamicLoader, Static ) ); i = m_FileList.begin(); - if( m_LogFile ) - { - CStr Report = _T( "Adding file: " ); - Report += CStr( Filename ); - m_LogFile->WriteText( (const TCHAR*)Report ); - } - return( PS_OK ); } @@ -102,10 +97,16 @@ PS_RESULT CConfig::Update() _int failed = 0; struct stat FileInfo; - for( slice = 0; ( i != m_FileList.end() ) && ( slice < CONFIG_SLICE ); i++, slice++ ) + for( slice = 0; ( i != m_FileList.end() ) && ( slice < CONFIG_SLICE ); i++ ) { + // Ignore static files + + if( i->Static ) + continue; + slice++; + // TODO: CFile change on following line. - + if( vfs_stat( i->Filename, &FileInfo ) ) { // We can't find the file. @@ -252,7 +253,7 @@ PS_RESULT CConfig::ReloadAll() if( m_LogFile ) { CStr Error = _T( "Load failed on: " ); - Error += CStr( i->Filename ); + Error += i->Filename; Error += CStr( "Load function returned: " ); Error += CStr( Result ); m_LogFile->WriteError( (const TCHAR*)Error ); @@ -262,6 +263,9 @@ PS_RESULT CConfig::ReloadAll() return( PS_FILE_LOAD_FAILURE ); // Oops. Serious problem, bail. } } + + i = m_FileList.begin(); + if( notfound ) return( PS_FILE_NOT_FOUND ); if( failed ) @@ -272,7 +276,7 @@ PS_RESULT CConfig::ReloadAll() //-------------------------------------------------------- // CConfig::Clear() // -// Erases registered list. +// Erases registered and static lists. //-------------------------------------------------------- void CConfig::Clear() diff --git a/source/ps/Config.h b/source/ps/Config.h index cbeef2ff43..c7420c40d1 100755 --- a/source/ps/Config.h +++ b/source/ps/Config.h @@ -4,7 +4,7 @@ Config.h CConfig dynamic data file manager class Mark Thompson (mot20@cam.ac.uk) -Last modified: 6 November 2003 (Mark Thompson) +Last modified: 22 November 2003 (Mark Thompson) --Overview-- @@ -89,8 +89,9 @@ struct SConfigData CStr Filename; LoaderFunction DynamicLoader; void* Data; + bool Static; time_t Timestamp; - SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader ); + SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader, bool _Static ); }; class CConfig : public Singleton @@ -98,12 +99,12 @@ class CConfig : public Singleton public: CConfig(); //Register a new file with it's associated loader function - PS_RESULT Register( CStr Filename, void* Data, LoaderFunction DynamicLoader ); + PS_RESULT Register( CStr Filename, void* Data, LoaderFunction DynamicLoader, bool Static = false ); //Check all registered files, reload as neccessary PS_RESULT Update(); - //Force an update of all files in the registered list. + //Force an update of all files in the registered and static lists. PS_RESULT ReloadAll(); - //Erase the entire list of registered files + //Erase the entire list of registered and static files void Clear(); //Attach or detach a logfile class. void Attach( CLogFile* LogFile );