// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include "cfile.h"
CFile::CFile()
{
m_bOpened = FALSE;
m_hFile = 0;
m_bIsDirty = FALSE;
}
CFile::~CFile()
{
Close();
}
//opens file for reading, binary
BOOL CFile::Open( char* szName )
{
if ( m_bOpened )
return FALSE;
m_hFile = open( szName, O_BINARY | O_RDONLY );
if ( m_hFile == -1 )
{
m_hFile = 0;
//printf( "CFile::Open %s Err:%d\n", szName, errno );
return FALSE;
}
m_bOpened = TRUE;
m_lLength = lseek( m_hFile, 0, SEEK_END );
lseek( m_hFile, 0, SEEK_SET );
return TRUE;
}
//creates new file, opened for rdwr, binary, deletes existing
BOOL CFile::Create( char* szName )
{
if ( m_bOpened )
return FALSE;
m_bIsDirty = FALSE;
m_hFile = open( szName, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666 );
if ( m_hFile == -1 )
{
m_hFile = 0;
return FALSE;
}
m_bOpened = TRUE;
m_lLength = lseek( m_hFile, 0, SEEK_END );
lseek( m_hFile, 0, SEEK_SET );
return TRUE;
}
//reads iBytesToRead bytes to buffer
BOOL CFile::Read( void* pBuff, int iBytesToRead, int* piBytesRead )
{
if ( !m_bOpened )
return FALSE;
m_bIsDirty = FALSE;
int iBytesRead = read( m_hFile, pBuff, iBytesToRead );
if ( piBytesRead )
*piBytesRead = iBytesRead;
if ( -1 == iBytesRead )
return FALSE;
m_lCurrPtr = tell( m_hFile );
return TRUE;
}
//writes iBytesToWrite from buffer
//TODO:check for file being opened for writing
BOOL CFile::Write( void* pBuff, int iBytesToWrite, int* piBytesWritten )
{
if ( !m_bOpened )
return FALSE;
int iBytesWritten = write( m_hFile, pBuff, iBytesToWrite );
if ( piBytesWritten )
*piBytesWritten = iBytesWritten;
if ( -1 == iBytesWritten )
return FALSE;
m_lCurrPtr = tell( m_hFile );
m_bIsDirty = TRUE;
return TRUE;
}
//seek
BOOL CFile::Seek( long lPos, int iType )
{
m_lCurrPtr = lseek( m_hFile, lPos, iType );
return TRUE;
}
//closes the file
void CFile::Close()
{
if ( m_hFile )
close( m_hFile );
m_bIsDirty = FALSE;
m_hFile = 0;
m_bOpened = FALSE;
}