- if (m_iolimit == 1)
- return 0;
-
- switch (mode) {
- case wxFromStart:
- if ((size_t)pos > m_length)
- return m_position_o;
- return (m_position_o = pos);
-
- case wxFromCurrent:
- if ((size_t)(m_position_o+pos) > m_length)
- return m_position_o;
-
- return (m_position_o += pos);
-
- case wxFromEnd:
- if ((size_t)(m_length-pos) > m_length)
- return m_position_o;
-
- return (m_position_o = m_length-pos);
- }
-
- return m_position_o;
+ size_t bufsize = m_o_streambuf->GetBufferEnd() - m_o_streambuf->GetBufferStart();
+ size_t oldpos = m_o_streambuf->GetIntPosition();
+ m_o_streambuf->Write(buffer, nbytes);
+ size_t newpos = m_o_streambuf->GetIntPosition();
+ if (newpos == 0) return bufsize - oldpos;
+ else return newpos - oldpos;