]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/stdstream.cpp
Avoid using buffer of already deallocated string in wxHTMLDataObject.
[wxWidgets.git] / src / common / stdstream.cpp
index af8475cdd3b331b37edd2966c7c61859f17e8a45..0f4fea1836da9cdff9e8174e6648f571d50eb896 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        wx/stdstream.h
+// Name:        src/common/stdstream.cpp
 // Purpose:     Implementation of std::istream and std::ostream derived
 //              wrappers for wxInputStream and wxOutputStream
 // Author:      Jonathan Liu <net147@gmail.com>
@@ -20,7 +20,7 @@
     #pragma hdrstop
 #endif
 
-#if wxUSE_STD_IOSTREAM
+#if wxUSE_STREAMS && wxUSE_STD_IOSTREAM
 
 #ifndef WX_PRECOMP
 #endif
@@ -39,7 +39,7 @@
 namespace
 {
 
-inline bool
+bool
 IosSeekDirToWxSeekMode(std::ios_base::seekdir way,
                        wxSeekMode& seekMode)
 {
@@ -183,16 +183,6 @@ wxStdInputStreamBuffer::pbackfail(int c)
     return m_stream.Ungetch((char) c) ? c : EOF;
 }
 
-// ==========================================================================
-// wxStdInputStream
-// ==========================================================================
-
-wxStdInputStream::wxStdInputStream(wxInputStream& stream) :
-    std::istream(NULL), m_streamBuffer(stream)
-{
-    std::ios::init(&m_streamBuffer);
-}
-
 // ==========================================================================
 // wxStdOutputStreamBuffer
 // ==========================================================================
@@ -260,13 +250,44 @@ wxStdOutputStreamBuffer::overflow(int c)
 }
 
 // ==========================================================================
-// wxStdOutputStream
+// wxStdInputStream and wxStdOutputStream
 // ==========================================================================
 
+// FIXME-VC6: it is impossible to call basic_ios<char>::init() with this
+//            compiler, it complains about invalid call to non-static member
+//            function so use a suspicious (as it uses a pointer to not yet
+//            constructed streambuf) but working workaround
+//
+//            It also doesn't like using istream in the ctor initializer list
+//            and we must spell it out as basic_istream<char>.
+#ifdef __VISUALC6__
+
+wxStdInputStream::wxStdInputStream(wxInputStream& stream)
+    : std::basic_istream<char, std::char_traits<char> >(&m_streamBuffer),
+      m_streamBuffer(stream)
+{
+}
+
+wxStdOutputStream::wxStdOutputStream(wxOutputStream& stream)
+    : std::basic_ostream<char, std::char_traits<char> >(&m_streamBuffer),
+      m_streamBuffer(stream)
+{
+}
+
+#else // !VC6
+
+wxStdInputStream::wxStdInputStream(wxInputStream& stream) :
+    std::istream(NULL), m_streamBuffer(stream)
+{
+    std::ios::init(&m_streamBuffer);
+}
+
 wxStdOutputStream::wxStdOutputStream(wxOutputStream& stream) :
     std::ostream(NULL), m_streamBuffer(stream)
 {
     std::ios::init(&m_streamBuffer);
 }
 
-#endif // wxUSE_STD_IOSTREAM
+#endif // VC6/!VC6
+
+#endif // wxUSE_STREAMS && wxUSE_STD_IOSTREAM