switch ( OpenMode )
{
default:
- wxFAIL_MSG( _T("unknown open mode in wxTextFile::Open") );
+ wxFAIL_MSG( wxT("unknown open mode in wxTextFile::Open") );
// fall through
case ReadAccess :
bool wxTextFile::OnRead(const wxMBConv& conv)
{
// file should be opened
- wxASSERT_MSG( m_file.IsOpened(), _T("can't read closed file") );
+ wxASSERT_MSG( m_file.IsOpened(), wxT("can't read closed file") );
// read the entire file in memory: this is not the most efficient thing to
// do it but there is no good way to avoid it in Unicode build because if
return false;
// if the file is seekable, also check that we're at its beginning
- wxASSERT_MSG( m_file.Tell() == 0, _T("should be at start of file") );
+ wxASSERT_MSG( m_file.Tell() == 0, wxT("should be at start of file") );
char *dst = buf.data();
- for ( ;; )
+ for ( size_t nRemaining = bufSize; nRemaining > 0; )
{
- ssize_t nRead = m_file.Read(dst, BLOCK_SIZE);
+ size_t nToRead = BLOCK_SIZE;
+
+ // the file size could have changed, avoid overflowing the buffer
+ // even if it did
+ if ( nToRead > nRemaining )
+ nToRead = nRemaining;
+
+ ssize_t nRead = m_file.Read(dst, nToRead);
if ( nRead == wxInvalidOffset )
{
if ( nRead == 0 )
{
// this file can't be empty because we checked for this above
+ // so this must be the end of file
break;
}
dst += nRead;
+ nRemaining -= nRead;
}
wxASSERT_MSG( dst - buf.data() == (wxFileOffset)bufSize,
- _T("logic error") );
+ wxT("logic error") );
}
else // file is not seekable
{