]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wfstream.cpp
A bit of confusion over what is RGB stands for blue...
[wxWidgets.git] / src / common / wfstream.cpp
index 8e731791bf62b11d69d03a8732a46b16f1f94f1e..af90722dd08a861976ba447d718f07e95b059f09 100644 (file)
@@ -69,7 +69,7 @@ wxFileOffset wxFileInputStream::GetLength() const
 
 size_t wxFileInputStream::OnSysRead(void *buffer, size_t size)
 {
-    size_t ret = m_file->Read(buffer, size);
+    ssize_t ret = m_file->Read(buffer, size);
 
     // NB: we can't use a switch here because HP-UX CC doesn't allow
     //     switching over long long (which size_t is in 64bit mode)
@@ -79,7 +79,7 @@ size_t wxFileInputStream::OnSysRead(void *buffer, size_t size)
         // nothing read, so nothing more to read
         m_lasterror = wxSTREAM_EOF;
     }
-    else if ( ret == (size_t)wxInvalidOffset )
+    else if ( ret == wxInvalidOffset )
     {
         m_lasterror = wxSTREAM_READ_ERROR;
         ret = 0;
@@ -234,11 +234,12 @@ wxFileOffset wxFFileInputStream::GetLength() const
 
 size_t wxFFileInputStream::OnSysRead(void *buffer, size_t size)
 {
-    size_t ret = m_file->Read(buffer, size);
+    ssize_t ret = m_file->Read(buffer, size);
 
-    if (m_file->Eof())
+    // It is not safe to call Eof() if the file is not opened.
+    if (!m_file->IsOpened() || m_file->Eof())
         m_lasterror = wxSTREAM_EOF;
-    if (ret == (size_t)wxInvalidOffset)
+    if (ret == wxInvalidOffset)
     {
         m_lasterror = wxSTREAM_READ_ERROR;
         ret = 0;
@@ -252,7 +253,8 @@ wxFileOffset wxFFileInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
 #ifdef __VMS
 #pragma message disable intsignchange
 #endif
-   return ( m_file->Seek(pos, mode) ? (wxFileOffset)m_file->Tell() : wxInvalidOffset );
+    wxASSERT_MSG( pos >= LONG_MIN && pos <= LONG_MAX, _T("no huge wxFFile support") );
+    return ( m_file->Seek((long)pos, mode) ? (wxFileOffset)m_file->Tell() : wxInvalidOffset );
 #ifdef __VMS
 #pragma message enable intsignchange
 #endif
@@ -314,7 +316,8 @@ wxFFileOutputStream::~wxFFileOutputStream()
 size_t wxFFileOutputStream::OnSysWrite(const void *buffer, size_t size)
 {
     size_t ret = m_file->Write(buffer, size);
-    if (m_file->Error())
+    // It is not safe to call Error() if the file is not opened.
+    if (!m_file->IsOpened() || m_file->Error())
         m_lasterror = wxSTREAM_WRITE_ERROR;
     else
         m_lasterror = wxSTREAM_NO_ERROR;
@@ -331,7 +334,8 @@ wxFileOffset wxFFileOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
 #ifdef __VMS
 #pragma message disable intsignchange
 #endif
-    return ( m_file->Seek(pos, mode) ? (wxFileOffset)m_file->Tell() : wxInvalidOffset );
+    wxASSERT_MSG( pos >= LONG_MIN && pos <= LONG_MAX, _T("no huge wxFFile support") );
+    return ( m_file->Seek((long)pos, mode) ? (wxFileOffset)m_file->Tell() : wxInvalidOffset );
 #ifdef __VMS
 #pragma message enable intsignchange
 #endif