projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Updated list of subprojects.
[wxWidgets.git]
/
src
/
common
/
stream.cpp
diff --git
a/src/common/stream.cpp
b/src/common/stream.cpp
index e797ad3f67686662de7508628230724fddfc7371..18bcc6f518478364b5e9b22848d3fd3aa71fcfdc 100644
(file)
--- a/
src/common/stream.cpp
+++ b/
src/common/stream.cpp
@@
-18,28
+18,24
@@
// headers
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "stream.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
- #pragma hdrstop
+
#pragma hdrstop
#endif
#endif
+#if wxUSE_STREAMS
+
+#include "wx/stream.h"
+
#ifndef WX_PRECOMP
#ifndef WX_PRECOMP
-
#include "wx/defs
.h"
+
#include "wx/log
.h"
#endif
#endif
-#if wxUSE_STREAMS
-
#include <ctype.h>
#include <ctype.h>
-#include "wx/stream.h"
#include "wx/datstrm.h"
#include "wx/textfile.h"
#include "wx/datstrm.h"
#include "wx/textfile.h"
-#include "wx/log.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// constants
@@
-121,7
+117,10
@@
wxStreamBuffer::wxStreamBuffer(const wxStreamBuffer& buffer)
void wxStreamBuffer::FreeBuffer()
{
if ( m_destroybuf )
void wxStreamBuffer::FreeBuffer()
{
if ( m_destroybuf )
+ {
free(m_buffer_start);
free(m_buffer_start);
+ m_buffer_start = NULL;
+ }
}
wxStreamBuffer::~wxStreamBuffer()
}
wxStreamBuffer::~wxStreamBuffer()
@@
-167,15
+166,15
@@
void wxStreamBuffer::SetBufferIO(void *start,
void wxStreamBuffer::SetBufferIO(size_t bufsize)
{
void wxStreamBuffer::SetBufferIO(size_t bufsize)
{
- // start by freeing the old buffer
- FreeBuffer();
-
if ( bufsize )
{
if ( bufsize )
{
+ // this will free the old buffer and allocate the new one
SetBufferIO(malloc(bufsize), bufsize, true /* take ownership */);
}
else // no buffer size => no buffer
{
SetBufferIO(malloc(bufsize), bufsize, true /* take ownership */);
}
else // no buffer size => no buffer
{
+ // still free the old one
+ FreeBuffer();
InitBuffer();
}
}
InitBuffer();
}
}
@@
-372,18
+371,23
@@
char wxStreamBuffer::GetChar()
size_t wxStreamBuffer::Read(void *buffer, size_t size)
{
size_t wxStreamBuffer::Read(void *buffer, size_t size)
{
+ wxASSERT_MSG( buffer, _T("Warning: Null pointer is about to be used") );
+
+ /* Clear buffer first */
+ memset(buffer, 0x00, size);
+
// lasterror is reset before all new IO calls
if ( m_stream )
m_stream->Reset();
// lasterror is reset before all new IO calls
if ( m_stream )
m_stream->Reset();
- size_t read;
+ size_t read
Bytes
;
if ( !HasBuffer() )
{
wxInputStream *inStream = GetInputStream();
wxCHECK_MSG( inStream, 0, _T("should have a stream in wxStreamBuffer") );
if ( !HasBuffer() )
{
wxInputStream *inStream = GetInputStream();
wxCHECK_MSG( inStream, 0, _T("should have a stream in wxStreamBuffer") );
- read = inStream->OnSysRead(buffer, size);
+ read
Bytes
= inStream->OnSysRead(buffer, size);
}
else // we have a buffer, use it
{
}
else // we have a buffer, use it
{
@@
-414,13
+418,13
@@
size_t wxStreamBuffer::Read(void *buffer, size_t size)
}
}
}
}
- read = orig_size - size;
+ read
Bytes
= orig_size - size;
}
if ( m_stream )
}
if ( m_stream )
- m_stream->m_lastcount = read;
+ m_stream->m_lastcount = read
Bytes
;
- return read;
+ return read
Bytes
;
}
// this should really be called "Copy()"
}
// this should really be called "Copy()"
@@
-434,7
+438,7
@@
size_t wxStreamBuffer::Read(wxStreamBuffer *dbuf)
do
{
do
{
- nRead = Read(
d
buf, WXSIZEOF(buf));
+ nRead = Read(buf, WXSIZEOF(buf));
if ( nRead )
{
nRead = dbuf->Write(buf, nRead);
if ( nRead )
{
nRead = dbuf->Write(buf, nRead);
@@
-448,6
+452,8
@@
size_t wxStreamBuffer::Read(wxStreamBuffer *dbuf)
size_t wxStreamBuffer::Write(const void *buffer, size_t size)
{
size_t wxStreamBuffer::Write(const void *buffer, size_t size)
{
+ wxASSERT_MSG( buffer, _T("Warning: Null pointer is about to be send") );
+
if (m_stream)
{
// lasterror is reset before all new IO calls
if (m_stream)
{
// lasterror is reset before all new IO calls
@@
-580,7
+586,9
@@
wxFileOffset wxStreamBuffer::Seek(wxFileOffset pos, wxSeekMode mode)
}
if (diff < 0 || diff > last_access)
return wxInvalidOffset;
}
if (diff < 0 || diff > last_access)
return wxInvalidOffset;
- SetIntPosition(diff);
+ size_t int_diff = wx_truncate_cast(size_t, diff);
+ wxCHECK_MSG( (wxFileOffset)int_diff == diff, wxInvalidOffset, wxT("huge file not supported") );
+ SetIntPosition(int_diff);
return diff;
}
return diff;
}
@@
-605,7
+613,9
@@
wxFileOffset wxStreamBuffer::Seek(wxFileOffset pos, wxSeekMode mode)
}
else
{
}
else
{
- SetIntPosition(diff);
+ size_t int_diff = wx_truncate_cast(size_t, diff);
+ wxCHECK_MSG( (wxFileOffset)int_diff == diff, wxInvalidOffset, wxT("huge file not supported") );
+ SetIntPosition(int_diff);
return pos;
}
return pos;
}
@@
-660,7
+670,13
@@
wxStreamBase::~wxStreamBase()
size_t wxStreamBase::GetSize() const
{
wxFileOffset length = GetLength();
size_t wxStreamBase::GetSize() const
{
wxFileOffset length = GetLength();
- return length == wxInvalidOffset ? 0 : (size_t)length;
+ if ( length == (wxFileOffset)wxInvalidOffset )
+ return 0;
+
+ const size_t len = wx_truncate_cast(size_t, length);
+ wxASSERT_MSG( len == length + size_t(0), _T("large files not supported") );
+
+ return len;
}
wxFileOffset wxStreamBase::OnSysSeek(wxFileOffset WXUNUSED(seek), wxSeekMode WXUNUSED(mode))
}
wxFileOffset wxStreamBase::OnSysSeek(wxFileOffset WXUNUSED(seek), wxSeekMode WXUNUSED(mode))
@@
-673,20
+689,6
@@
wxFileOffset wxStreamBase::OnSysTell() const
return wxInvalidOffset;
}
return wxInvalidOffset;
}
-#if WXWIN_COMPATIBILITY_2_2
-
-wxStreamError wxStreamBase::LastError() const
-{
- return m_lasterror;
-}
-
-size_t wxStreamBase::StreamSize() const
-{
- return GetSize();
-}
-
-#endif // WXWIN_COMPATIBILITY_2_2
-
// ----------------------------------------------------------------------------
// wxInputStream
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// wxInputStream
// ----------------------------------------------------------------------------
@@
-746,6
+748,11
@@
char *wxInputStream::AllocSpaceWBack(size_t needed_size)
size_t wxInputStream::GetWBack(void *buf, size_t size)
{
size_t wxInputStream::GetWBack(void *buf, size_t size)
{
+ wxASSERT_MSG( buf, _T("Warning: Null pointer is about to be used") );
+
+ /* Clear buffer first */
+ memset(buf, 0x00, size);
+
if (!m_wback)
return 0;
if (!m_wback)
return 0;
@@
-777,6
+784,8
@@
size_t wxInputStream::GetWBack(void *buf, size_t size)
size_t wxInputStream::Ungetch(const void *buf, size_t bufsize)
{
size_t wxInputStream::Ungetch(const void *buf, size_t bufsize)
{
+ wxASSERT_MSG( buf, _T("Warning: Null pointer is about to be used in Ungetch()") );
+
if ( m_lasterror != wxSTREAM_NO_ERROR && m_lasterror != wxSTREAM_EOF )
{
// can't operate on this stream until the error is cleared
if ( m_lasterror != wxSTREAM_NO_ERROR && m_lasterror != wxSTREAM_EOF )
{
// can't operate on this stream until the error is cleared
@@
-809,6
+818,8
@@
char wxInputStream::GetC()
wxInputStream& wxInputStream::Read(void *buf, size_t size)
{
wxInputStream& wxInputStream::Read(void *buf, size_t size)
{
+ wxASSERT_MSG( buf, _T("Warning: Null pointer is about to be read") );
+
char *p = (char *)buf;
m_lastcount = 0;
char *p = (char *)buf;
m_lastcount = 0;
@@
-994,18
+1005,22
@@
size_t wxCountingOutputStream::OnSysWrite(const void *WXUNUSED(buffer),
wxFileOffset wxCountingOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
wxFileOffset wxCountingOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
+ ssize_t new_pos = wx_truncate_cast(ssize_t, pos);
+
switch ( mode )
{
case wxFromStart:
switch ( mode )
{
case wxFromStart:
-
m_currentPos = pos
;
+
wxCHECK_MSG( (wxFileOffset)new_pos == pos, wxInvalidOffset, wxT("huge position not supported") )
;
break;
case wxFromEnd:
break;
case wxFromEnd:
- m_currentPos = m_lastcount + pos;
+ new_pos = m_lastcount + new_pos;
+ wxCHECK_MSG( (wxFileOffset)new_pos == (wxFileOffset)(m_lastcount + pos), wxInvalidOffset, wxT("huge position not supported") );
break;
case wxFromCurrent:
break;
case wxFromCurrent:
- m_currentPos += pos;
+ new_pos = m_currentPos + new_pos;
+ wxCHECK_MSG( (wxFileOffset)new_pos == (wxFileOffset)(m_currentPos + pos), wxInvalidOffset, wxT("huge position not supported") );
break;
default:
break;
default:
@@
-1013,6
+1028,8
@@
wxFileOffset wxCountingOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode
return wxInvalidOffset;
}
return wxInvalidOffset;
}
+ m_currentPos = new_pos;
+
if (m_currentPos > m_lastcount)
m_lastcount = m_currentPos;
if (m_currentPos > m_lastcount)
m_lastcount = m_currentPos;
@@
-1269,5
+1286,4
@@
wxOutputStream& wxEndL(wxOutputStream& stream)
return stream.Write(eol, wxStrlen(eol));
}
return stream.Write(eol, wxStrlen(eol));
}
-#endif
- // wxUSE_STREAMS
+#endif // wxUSE_STREAMS