X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/166c3ef0f9a77a66143968be2c1b58747994d32e..a4609ab847819b47c996674420871f4514d50625:/src/common/stream.cpp diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 618ae6ed32..8ae48e1605 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -809,11 +809,11 @@ bool wxInputStream::Ungetch(char c) return Ungetch(&c, sizeof(c)) != 0; } -char wxInputStream::GetC() +int wxInputStream::GetC() { - char c; + unsigned char c; Read(&c, sizeof(c)); - return c; + return LastRead() ? c : wxEOF; } wxInputStream& wxInputStream::Read(void *buf, size_t size) @@ -1106,38 +1106,53 @@ wxFilterOutputStream::~wxFilterOutputStream() } // ---------------------------------------------------------------------------- -// wxFilterClassFactory +// wxFilterClassFactoryBase // ---------------------------------------------------------------------------- -IMPLEMENT_ABSTRACT_CLASS(wxFilterClassFactory, wxObject) +IMPLEMENT_ABSTRACT_CLASS(wxFilterClassFactoryBase, wxObject) -wxFilterClassFactory *wxFilterClassFactory::sm_first = NULL; +wxString wxFilterClassFactoryBase::PopExtension(const wxString& location) const +{ + return location.substr(0, FindExtension(location)); +} -bool wxFilterClassFactory::CanHandle(const wxChar *protocol, - wxStreamProtocolType type) const +wxString::size_type wxFilterClassFactoryBase::FindExtension( + const wxChar *location) const { - if (type == wxSTREAM_FILEEXTENSION) - { - size_t len = wxStrlen(protocol); + size_t len = wxStrlen(location); - for (const wxChar * const *p = GetProtocols(type); p && *p; p++) - { - size_t l = wxStrlen(*p); + for (const wxChar *const *p = GetProtocols(wxSTREAM_FILEEXT); *p; p++) + { + size_t l = wxStrlen(*p); - if (l <= len && wxStrcmp(*p, protocol + len - l) == 0) - return true; - } + if (l <= len && wxStrcmp(*p, location + len - l) == 0) + return len - l; } + + return wxString::npos; +} + +bool wxFilterClassFactoryBase::CanHandle(const wxChar *protocol, + wxStreamProtocolType type) const +{ + if (type == wxSTREAM_FILEEXT) + return FindExtension(protocol) != wxString::npos; else - { - for (const wxChar * const *p = GetProtocols(type); p && *p; p++) + for (const wxChar *const *p = GetProtocols(type); *p; p++) if (wxStrcmp(*p, protocol) == 0) return true; - } return false; } +// ---------------------------------------------------------------------------- +// wxFilterClassFactory +// ---------------------------------------------------------------------------- + +IMPLEMENT_ABSTRACT_CLASS(wxFilterClassFactory, wxFilterClassFactoryBase) + +wxFilterClassFactory *wxFilterClassFactory::sm_first = NULL; + void wxFilterClassFactory::Remove() { if (m_next != this)