From 87a2186cc94b7bca2b06992cc6d14f3a3a086108 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 27 Apr 2005 01:22:27 +0000 Subject: [PATCH] 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) --- stepmania/src/RageFileDriverSlice.cpp | 14 +++++++++++--- stepmania/src/RageFileDriverSlice.h | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/stepmania/src/RageFileDriverSlice.cpp b/stepmania/src/RageFileDriverSlice.cpp index 1e94f7b4be..42465a9c3a 100644 --- a/stepmania/src/RageFileDriverSlice.cpp +++ b/stepmania/src/RageFileDriverSlice.cpp @@ -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; } diff --git a/stepmania/src/RageFileDriverSlice.h b/stepmania/src/RageFileDriverSlice.h index 363f5a32e5..19d96d9b85 100644 --- a/stepmania/src/RageFileDriverSlice.h +++ b/stepmania/src/RageFileDriverSlice.h @@ -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;