]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlfilt.cpp
remove incorrect cast of wxString to char* (unnecessary and breaks wxUSE_STL build)
[wxWidgets.git] / src / html / htmlfilt.cpp
index 025a19e15542820381bb79bdf42e4a2c61ae23f2..9aaa86d4ebadd4146ff018785f214fbadf66012c 100644 (file)
 
 #if wxUSE_HTML && wxUSE_STREAMS
 
-#ifndef WXPRECOMP
+#ifndef WX_PRECOMP
     #include "wx/log.h"
     #include "wx/intl.h"
 #endif
 
 #include "wx/strconv.h"
+#include "wx/sstream.h"
 #include "wx/html/htmlfilt.h"
 #include "wx/html/htmlwin.h"
 
-// utility function: read a wxString from a wxInputStream
+// utility function: read entire contents of an wxInputStream into a wxString
+//
+// TODO: error handling?
 static void ReadString(wxString& str, wxInputStream* s, wxMBConv& conv)
 {
-    size_t streamSize = s->GetSize();
-
-    if (streamSize == ~(size_t)0)
-    {
-        const size_t bufSize = 4095;
-        char buffer[bufSize+1];
-        size_t lastRead;
-
-        do
-        {
-            s->Read(buffer, bufSize);
-            lastRead = s->LastRead();
-            buffer[lastRead] = 0;
-            str.Append(wxString(buffer, conv));
-        }
-        while (lastRead == bufSize);
-    }
-    else
-    {
-        char* src = new char[streamSize+1];
-        s->Read(src, streamSize);
-        src[streamSize] = 0;
-        str = wxString(src, conv);
-        delete[] src;
-    }
+    wxStringOutputStream out(&str, conv);
+    s->Read(out);
 }
 
 /*
@@ -173,15 +153,19 @@ wxString wxHtmlFilterHTML::ReadFile(const wxFSFile& file) const
     }
     else
     {
-        wxString tmpdoc;
-        ReadString(tmpdoc, s, wxConvISO8859_1);
+        size_t size = s->GetSize();
+        wxCharBuffer buf( size+1 );
+        s->Read( buf.data(), size );
+        *(buf.data() + size) = 0;
+        wxString tmpdoc( buf, wxConvISO8859_1);
+        
         wxString charset = wxHtmlParser::ExtractCharsetInformation(tmpdoc);
         if (charset.empty())
             doc = tmpdoc;
         else
         {
             wxCSConv conv(charset);
-            doc = wxString(tmpdoc.mb_str(wxConvISO8859_1), conv);
+            doc = wxString( buf, conv );
         }
     }
 #else // !wxUSE_UNICODE