From ea79ec3e1bd60860cdf0bb933ea749de8279b837 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 12 Dec 2004 04:07:22 +0000 Subject: [PATCH] add RageFileDriverSlice::DeleteFileWhenFinished --- stepmania/src/RageFileDriverSlice.cpp | 5 ++++- stepmania/src/RageFileDriverSlice.h | 3 +++ stepmania/src/RageFileDriverZip.cpp | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/stepmania/src/RageFileDriverSlice.cpp b/stepmania/src/RageFileDriverSlice.cpp index 9bfabdc141..1e94f7b4be 100644 --- a/stepmania/src/RageFileDriverSlice.cpp +++ b/stepmania/src/RageFileDriverSlice.cpp @@ -7,16 +7,19 @@ RageFileDriverSlice::RageFileDriverSlice( RageFileBasic *pFile, int iOffset, int m_iOffset = iOffset; m_iFileSize = iFileSize; m_iFilePos = 0; + m_bFileOwned = false; } RageFileDriverSlice::~RageFileDriverSlice() { - delete m_pFile; + if( m_bFileOwned ) + delete m_pFile; } RageFileBasic *RageFileDriverSlice::Copy() const { RageFileDriverSlice *pRet = new RageFileDriverSlice( m_pFile->Copy(), m_iOffset, m_iFileSize ); + pRet->m_bFileOwned = true; pRet->m_iFilePos = m_iFilePos; return pRet; } diff --git a/stepmania/src/RageFileDriverSlice.h b/stepmania/src/RageFileDriverSlice.h index 117807d95e..363f5a32e5 100644 --- a/stepmania/src/RageFileDriverSlice.h +++ b/stepmania/src/RageFileDriverSlice.h @@ -13,6 +13,8 @@ public: ~RageFileDriverSlice(); RageFileBasic *Copy() const; + void DeleteFileWhenFinished() { m_bFileOwned = true; } + int ReadInternal( void *pBuffer, size_t iBytes ); int WriteInternal( const void *pBuffer, size_t iBytes ) { SetError( "Not implemented" ); return -1; } int SeekInternal( int iOffset ); @@ -22,6 +24,7 @@ private: RageFileBasic *m_pFile; int m_iFilePos; int m_iOffset, m_iFileSize; + bool m_bFileOwned; }; #endif diff --git a/stepmania/src/RageFileDriverZip.cpp b/stepmania/src/RageFileDriverZip.cpp index a5460cef36..a04ed3d600 100644 --- a/stepmania/src/RageFileDriverZip.cpp +++ b/stepmania/src/RageFileDriverZip.cpp @@ -366,7 +366,9 @@ RageFileBasic *RageFileDriverZip::Open( const CString &path, int mode, int &err zip.Seek( info->data_offset ); - RageFileBasic *pFile = new RageFileDriverSlice( zip.Copy(), info->data_offset, info->compr_size ); + RageFileDriverSlice *pFile = new RageFileDriverSlice( zip.Copy(), info->data_offset, info->compr_size ); + pFile->DeleteFileWhenFinished(); + switch( info->compression_method ) { case STORED: