]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/stdstream.h
support SDK < 10.6, fixes #14902
[wxWidgets.git] / include / wx / stdstream.h
index 993c1eae73d534d4b763ffce1e852146fa572161..27d48d5c8b02a4f1069ab17f48be4d1d4a2e80da 100644 (file)
 
 #include "wx/defs.h"    // wxUSE_STD_IOSTREAM
 
 
 #include "wx/defs.h"    // wxUSE_STD_IOSTREAM
 
-#if wxUSE_STD_IOSTREAM
+#if wxUSE_STREAMS && wxUSE_STD_IOSTREAM
 
 
-#include <iosfwd>
-#include <wx/defs.h>
-#include <wx/stream.h>
+#include "wx/defs.h"
+#include "wx/stream.h"
+#include "wx/ioswrap.h"
 
 // ==========================================================================
 // wxStdInputStreamBuffer
 
 // ==========================================================================
 // wxStdInputStreamBuffer
@@ -47,6 +47,18 @@ protected:
     virtual int uflow();
     virtual int pbackfail(int c = EOF);
 
     virtual int uflow();
     virtual int pbackfail(int c = EOF);
 
+    // Special work around for VC8/9 (this bug was fixed in VC10 and later):
+    // these versions have non-standard _Xsgetn_s() that it being called from
+    // the stream code instead of xsgetn() and so our overridden implementation
+    // never actually gets used. To work around this, forward to it explicitly.
+#if defined(__VISUALC8__) || defined(__VISUALC9__)
+    virtual std::streamsize
+    _Xsgetn_s(char *s, size_t WXUNUSED(size), std::streamsize n)
+    {
+        return xsgetn(s, n);
+    }
+#endif // VC8 or VC9
+
     wxInputStream& m_stream;
     int m_lastChar;
 };
     wxInputStream& m_stream;
     int m_lastChar;
 };
@@ -106,6 +118,6 @@ protected:
     wxStdOutputStreamBuffer m_streamBuffer;
 };
 
     wxStdOutputStreamBuffer m_streamBuffer;
 };
 
-#endif // wxUSE_STD_IOSTREAM
+#endif // wxUSE_STREAMS && wxUSE_STD_IOSTREAM
 
 #endif // _WX_STDSTREAM_H_
 
 #endif // _WX_STDSTREAM_H_