+size_t wxInputStream::GetWBack(void *buf, size_t size)
+{
+ wxASSERT_MSG( buf, _T("Warning: Null pointer is about to be used") );
+
+ /* Clear buffer first */
+ memset(buf, 0x00, size);
+
+ if (!m_wback)
+ return 0;
+
+ // how many bytes do we have in the buffer?
+ size_t toget = m_wbacksize - m_wbackcur;
+
+ if ( size < toget )
+ {
+ // we won't read everything
+ toget = size;
+ }
+
+ // copy the data from the cache
+ memcpy(buf, m_wback + m_wbackcur, toget);
+
+ m_wbackcur += toget;
+ if ( m_wbackcur == m_wbacksize )
+ {
+ // TODO: should we really free it here all the time? maybe keep it?
+ free(m_wback);
+ m_wback = NULL;
+ m_wbacksize = 0;
+ m_wbackcur = 0;
+ }
+
+ // return the number of bytes copied
+ return toget;
+}
+
+size_t wxInputStream::Ungetch(const void *buf, size_t bufsize)
+{
+ wxASSERT_MSG( buf, _T("Warning: Null pointer is about to be used in Ungetch()") );
+
+ if ( m_lasterror != wxSTREAM_NO_ERROR && m_lasterror != wxSTREAM_EOF )
+ {
+ // can't operate on this stream until the error is cleared
+ return 0;
+ }
+
+ char *ptrback = AllocSpaceWBack(bufsize);
+ if (!ptrback)
+ return 0;
+
+ // Eof() shouldn't return true any longer
+ if ( m_lasterror == wxSTREAM_EOF )
+ m_lasterror = wxSTREAM_NO_ERROR;
+
+ memcpy(ptrback, buf, bufsize);
+ return bufsize;
+}
+
+bool wxInputStream::Ungetch(char c)
+{
+ return Ungetch(&c, sizeof(c)) != 0;
+}
+
+int wxInputStream::GetC()
+{
+ unsigned char c;
+ Read(&c, sizeof(c));
+ return LastRead() ? c : wxEOF;
+}
+
+wxInputStream& wxInputStream::Read(void *buf, size_t size)