diff --git a/stepmania/src/RageFile.cpp b/stepmania/src/RageFile.cpp index 0c24ec48dd..6b8a5ea5e3 100644 --- a/stepmania/src/RageFile.cpp +++ b/stepmania/src/RageFile.cpp @@ -74,7 +74,7 @@ RageFile::RageFile( const RageFile &cpy ) ResetBuf(); /* This will copy the file driver, including its internal file pointer. */ - m_File = cpy.m_File->Copy( *this ); + m_File = FILEMAN->CopyFileObj( cpy.m_File, *this ); m_Path = cpy.m_Path; m_Mode = cpy.m_Mode; m_Error = cpy.m_Error; diff --git a/stepmania/src/RageFileManager.cpp b/stepmania/src/RageFileManager.cpp index bb4ed4f5cf..2ca19327a4 100644 --- a/stepmania/src/RageFileManager.cpp +++ b/stepmania/src/RageFileManager.cpp @@ -339,6 +339,20 @@ RageFileObj *RageFileManager::Open( const CString &sPath, RageFile::OpenMode mod return NULL; } +/* Copy a RageFileObj for a new RageFile. */ +RageFileObj *RageFileManager::CopyFileObj( const RageFileObj *cpy, RageFile &p ) +{ + FileReferences::const_iterator it = g_Refs.find( cpy ); + RAGE_ASSERT_M( it != g_Refs.end(), ssprintf( "RemoveReference: Missing reference (%s)", cpy->GetDisplayPath().c_str() ) ); + + RageFileObj *ret = cpy->Copy( p ); + + /* It's from the same driver as the original. */ + AddReference( ret, it->second ); + + return ret; +} + RageFileObj *RageFileManager::OpenForWriting( const CString &sPath, RageFile::OpenMode mode, RageFile &p, int &err ) { /* diff --git a/stepmania/src/RageFileManager.h b/stepmania/src/RageFileManager.h index f9c9676176..007f5da220 100644 --- a/stepmania/src/RageFileManager.h +++ b/stepmania/src/RageFileManager.h @@ -31,6 +31,7 @@ public: /* Used only by RageFile: */ RageFileObj *Open( const CString &sPath, RageFile::OpenMode mode, RageFile &p, int &err ); void Close( RageFileObj *obj ); + RageFileObj *CopyFileObj( const RageFileObj *cpy, RageFile &p ); private: RageFileObj *OpenForWriting( const CString &sPath, RageFile::OpenMode mode, RageFile &p, int &err );