X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b2f60e03ccc39fc15ad9673dad7b27b86c42996f..33754c4d83c59b7523a6da0c4fb21079cb60301c:/src/common/fs_inet.cpp diff --git a/src/common/fs_inet.cpp b/src/common/fs_inet.cpp index 8d295d4677..cba29271dc 100644 --- a/src/common/fs_inet.cpp +++ b/src/common/fs_inet.cpp @@ -20,7 +20,7 @@ limitation) */ #ifdef __GNUG__ -#pragma implementation +#pragma implementation "fs_inet.h" #endif #include "wx/wxprec.h" @@ -34,10 +34,9 @@ limitation) #define wxUSE_FS_INET 0 #endif -#if wxUSE_FS_INET +#if wxUSE_FILESYSTEM && wxUSE_FS_INET #ifndef WXPRECOMP -#include "wx/wx.h" #endif #include "wx/wfstream.h" @@ -67,32 +66,41 @@ 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"))) + 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 - return FALSE; + + return FALSE; } wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location) { - wxString myloc(GetRightLocation(location)); - - // 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('/'); - - wxString right = GetProtocol(location) + wxT(":") + myloc; + wxString right = GetProtocol(location) + wxT(":") + StripProtocolAnchor(location); wxInputStream *s; wxString content; wxInetCacheNode *info; @@ -103,7 +111,7 @@ wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxStri if (info == NULL) { wxURL url(right); - if (url.GetError() == wxURL_NOERR) + if (url.GetError() == wxURL_NOERR) { s = url.GetInputStream(); content = url.GetProtocol().GetContentType(); @@ -131,15 +139,14 @@ wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxStri // Load item from cache: s = new wxFileInputStream(info->GetTemp()); - if (s) - { - return new wxFSFile(s, - right, - info->GetMime(), - GetAnchor(location), - wxDateTime::Today()); - } - else return (wxFSFile*) NULL; + if (!s) + return (wxFSFile*) NULL; + + return new wxFSFile(s, + right, + info->GetMime(), + GetAnchor(location), + wxDateTime::Now()); } @@ -173,4 +180,4 @@ class wxFileSystemInternetModule : public wxModule IMPLEMENT_DYNAMIC_CLASS(wxFileSystemInternetModule, wxModule) -#endif // wxUSE_FS_INET +#endif // wxUSE_FILESYSTEM && wxUSE_FS_INET