X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6285e36ba0e3861efbaaba2097a15fc1a536cc46..8e190f0ed9c242e6df5fd4dd99fdaf6c9dea1cda:/src/common/stream.cpp diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 1f1c94c688..32e6fe8d15 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -192,6 +192,28 @@ void wxStreamBuffer::ResetBuffer() : m_buffer_start; } +void wxStreamBuffer::Truncate() +{ + size_t new_size = m_buffer_pos - m_buffer_start; + if ( new_size == m_buffer_size ) + return; + + if ( !new_size ) + { + FreeBuffer(); + InitBuffer(); + return; + } + + char *new_start = (char *)realloc(m_buffer_start, new_size); + wxCHECK_RET( new_size, _T("shrinking buffer shouldn't fail") ); + + m_buffer_start = new_start; + m_buffer_size = new_size; + m_buffer_end = m_buffer_start + m_buffer_size; + m_buffer_pos = m_buffer_end; +} + // fill the buffer with as much data as possible (only for read buffers) bool wxStreamBuffer::FillBuffer() { @@ -1134,29 +1156,25 @@ wxString wxFilterClassFactoryBase::PopExtension(const wxString& location) const } wxString::size_type wxFilterClassFactoryBase::FindExtension( - const wxChar *location) const + const wxString& location) const { - size_t len = wxStrlen(location); - for (const wxChar *const *p = GetProtocols(wxSTREAM_FILEEXT); *p; p++) { - size_t l = wxStrlen(*p); - - if (l <= len && wxStrcmp(*p, location + len - l) == 0) - return len - l; + if ( location.EndsWith(*p) ) + return location.length() - wxStrlen(*p); } return wxString::npos; } -bool wxFilterClassFactoryBase::CanHandle(const wxChar *protocol, +bool wxFilterClassFactoryBase::CanHandle(const wxString& protocol, wxStreamProtocolType type) const { if (type == wxSTREAM_FILEEXT) return FindExtension(protocol) != wxString::npos; else for (const wxChar *const *p = GetProtocols(type); *p; p++) - if (wxStrcmp(*p, protocol) == 0) + if (protocol == *p) return true; return false;