fix copying RageFileDriverSlice doesn't init RageFileObj properly, causing desync between file pointers (RageFileObj thinks it's at 0, RageFileDriverSlice thinks it's at somewhere else)

This commit is contained in:
Glenn Maynard
2005-04-27 01:22:27 +00:00
parent e836c16466
commit 87a2186cc9
2 changed files with 13 additions and 4 deletions
+11 -3
View File
@@ -10,6 +10,16 @@ RageFileDriverSlice::RageFileDriverSlice( RageFileBasic *pFile, int iOffset, int
m_bFileOwned = false;
}
RageFileDriverSlice::RageFileDriverSlice( const RageFileDriverSlice &cpy ):
RageFileObj(cpy)
{
m_pFile = cpy.m_pFile->Copy();
m_iOffset = cpy.m_iOffset;
m_iFileSize = cpy.m_iFileSize;
m_iFilePos = cpy.m_iFilePos;
m_bFileOwned = true;
}
RageFileDriverSlice::~RageFileDriverSlice()
{
if( m_bFileOwned )
@@ -18,9 +28,7 @@ RageFileDriverSlice::~RageFileDriverSlice()
RageFileBasic *RageFileDriverSlice::Copy() const
{
RageFileDriverSlice *pRet = new RageFileDriverSlice( m_pFile->Copy(), m_iOffset, m_iFileSize );
pRet->m_bFileOwned = true;
pRet->m_iFilePos = m_iFilePos;
RageFileDriverSlice *pRet = new RageFileDriverSlice( *this );
return pRet;
}
+2 -1
View File
@@ -8,8 +8,9 @@
class RageFileDriverSlice: public RageFileObj
{
public:
/* pFile will be freed. */
/* pFile will be freed if DeleteFileWhenFinished is called. */
RageFileDriverSlice( RageFileBasic *pFile, int iOffset, int iFileSize );
RageFileDriverSlice( const RageFileDriverSlice &cpy );
~RageFileDriverSlice();
RageFileBasic *Copy() const;