use a block scope to invoke wxFFile's destructor before renaming temporary file

This commit is contained in:
Dick Hollenbeck 2012-04-18 07:24:40 -05:00
parent f3e171797c
commit 9a6612c6ec
1 changed files with 20 additions and 13 deletions

View File

@ -3933,8 +3933,10 @@ void FPL_CACHE::Save()
wxString tempFileName = wxFileName::CreateTempFileName( m_lib_name );
wxLogDebug( "tempFileName:'%s'\n", TO_UTF8( tempFileName ) );
// wxLogDebug( "tempFileName:'%s'\n", TO_UTF8( tempFileName ) );
// a block {} scope to fire wxFFile wxf()'s destructor
{
FILE* fp = wxFopen( tempFileName, wxT( "w" ) );
if( !fp )
{
@ -3943,13 +3945,18 @@ void FPL_CACHE::Save()
m_lib_name.GetData() ) );
}
// wxf now owns fp, will close on exception or return
// wxf now owns fp, will close on exception or exit from
// this block {} scope
wxFFile wxf( fp );
SaveHeader( fp );
SaveIndex( fp );
SaveModules( fp );
SaveEndOfFile( fp );
}
// fp is now closed here, and that seems proper before trying to rename
// the temporary file to m_lib_name.
wxRemove( m_lib_name ); // it is not an error if this does not exist