X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/21f95b5254e411d35653e1047ab395edd12062da..058939fc084207e06d34a2c82f4c62a103516dd8:/src/common/fs_inet.cpp diff --git a/src/common/fs_inet.cpp b/src/common/fs_inet.cpp index 53af80cad7..05bf75c348 100644 --- a/src/common/fs_inet.cpp +++ b/src/common/fs_inet.cpp @@ -67,12 +67,31 @@ class wxInetCacheNode : public wxObject //-------------------------------------------------------------------------------- +static wxString StripProtocolAnchor(const wxString& location) +{ + wxString myloc(location.BeforeLast(wxT('#'))); + if (myloc.IsEmpty()) myloc = location.AfterFirst(wxT(':')); + else myloc = myloc.AfterFirst(wxT(':')); + + // fix malformed url: + if (myloc.Left(2) != wxT("//")) + { + if (myloc.GetChar(0) != wxT('/')) myloc = wxT("//") + myloc; + else myloc = wxT("/") + myloc; + } + if (myloc.Mid(2).Find(wxT('/')) == wxNOT_FOUND) myloc << wxT('/'); + + return myloc; +} + + + bool wxInternetFSHandler::CanOpen(const wxString& location) { wxString p = GetProtocol(location); if ((p == wxT("http")) || (p == wxT("ftp"))) { - wxURL url(GetProtocol(location) + wxT(":") + GetRightLocation(location)); + wxURL url(p + wxT(":") + StripProtocolAnchor(location)); return (url.GetError() == wxURL_NOERR); } else @@ -82,17 +101,7 @@ bool wxInternetFSHandler::CanOpen(const wxString& location) wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location) { - wxString myloc(GetRightLocation(location)); - - // fix malformed url: - if (myloc.Left(2) != wxT("//")) - { - if (myloc[0] != wxT('/')) myloc = wxT("//") + myloc; - else myloc = wxT("/") + myloc; - } - if (myloc.Mid(2).Find(wxT('/')) == wxNOT_FOUND) myloc << wxT('/'); - - wxString right = GetProtocol(location) + wxT(":") + myloc; + wxString right = GetProtocol(location) + wxT(":") + StripProtocolAnchor(location); wxInputStream *s; wxString content; wxInetCacheNode *info;