]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/textfile.cpp
patch from Dimitri fixing crashes when decoding the invalid GIFs
[wxWidgets.git] / src / common / textfile.cpp
index f0e08b4012308a4457c2230fbf2e644654b7699f..5f4dd6a2687ecfb3b641190e18ecf415847af994 100644 (file)
 #if wxUSE_TEXTFILE
 
 #ifndef WX_PRECOMP
 #if wxUSE_TEXTFILE
 
 #ifndef WX_PRECOMP
-    #include  "wx/string.h"
-    #include  "wx/intl.h"
-    #include  "wx/file.h"
-    #include  "wx/log.h"
+    #include "wx/string.h"
+    #include "wx/intl.h"
+    #include "wx/file.h"
+    #include "wx/log.h"
 #endif
 
 #include "wx/textfile.h"
 #endif
 
 #include "wx/textfile.h"
+#include "wx/filename.h"
 
 // ============================================================================
 // wxTextFile class implementation
 
 // ============================================================================
 // wxTextFile class implementation
@@ -61,20 +62,22 @@ bool wxTextFile::OnExists() const
 
 bool wxTextFile::OnOpen(const wxString &strBufferName, wxTextBufferOpenMode OpenMode)
 {
 
 bool wxTextFile::OnOpen(const wxString &strBufferName, wxTextBufferOpenMode OpenMode)
 {
-    wxFile::OpenMode FileOpenMode = wxFile::read;
-  
-    switch (OpenMode)
-  {
+    wxFile::OpenMode FileOpenMode;
+
+    switch ( OpenMode )
+    {
+        default:
+            wxFAIL_MSG( _T("unknown open mode in wxTextFile::Open") );
+            // fall through
+
         case ReadAccess :
             FileOpenMode = wxFile::read;
             break;
         case ReadAccess :
             FileOpenMode = wxFile::read;
             break;
+
         case WriteAccess :
             FileOpenMode = wxFile::write;
             break;
         case WriteAccess :
             FileOpenMode = wxFile::write;
             break;
-        default :
-            wxASSERT(0); // Should not happen.
-            break;
-  }
+    }
 
     return m_file.Open(strBufferName.c_str(), FileOpenMode);
 }
 
     return m_file.Open(strBufferName.c_str(), FileOpenMode);
 }
@@ -136,6 +139,7 @@ bool wxTextFile::OnRead(wxMBConv& conv)
                     AddLine(str, wxTextFileType_Mac);
             chLast = ch;
 #if wxUSE_UNICODE
                     AddLine(str, wxTextFileType_Mac);
             chLast = ch;
 #if wxUSE_UNICODE
+            conv_mbBuf[0] = ch;
             if (conv.MB2WC(conv_wcBuf, conv_mbBuf, 2) == (size_t)-1)
                 conv_wcBuf[0] = ch;
             str = conv_wcBuf[0];
             if (conv.MB2WC(conv_wcBuf, conv_mbBuf, 2) == (size_t)-1)
                 conv_wcBuf[0] = ch;
             str = conv_wcBuf[0];
@@ -146,6 +150,7 @@ bool wxTextFile::OnRead(wxMBConv& conv)
           else {
             // add to the current line
 #if wxUSE_UNICODE
           else {
             // add to the current line
 #if wxUSE_UNICODE
+            conv_mbBuf[0] = ch;
             if (conv.MB2WC(conv_wcBuf, conv_mbBuf, 2) == (size_t)-1)
                 conv_wcBuf[0] = ch;
             str += conv_wcBuf[0];
             if (conv.MB2WC(conv_wcBuf, conv_mbBuf, 2) == (size_t)-1)
                 conv_wcBuf[0] = ch;
             str += conv_wcBuf[0];
@@ -168,7 +173,11 @@ bool wxTextFile::OnRead(wxMBConv& conv)
 
 bool wxTextFile::OnWrite(wxTextFileType typeNew, wxMBConv& conv)
 {
 
 bool wxTextFile::OnWrite(wxTextFileType typeNew, wxMBConv& conv)
 {
-    wxTempFile fileTmp(m_strBufferName);
+    wxFileName fn = m_strBufferName;
+    if ( !fn.IsAbsolute() )
+        fn.Normalize();
+
+    wxTempFile fileTmp(fn.GetFullPath());
 
     if ( !fileTmp.IsOpened() ) {
         wxLogError(_("can't write buffer '%s' to disk."), m_strBufferName.c_str());
 
     if ( !fileTmp.IsOpened() ) {
         wxLogError(_("can't write buffer '%s' to disk."), m_strBufferName.c_str());