X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00b89a1d1da61a1f842db63b244ad08c0554121c..eea4d01c65f9b29baa1193db762b4c6b8144af24:/src/common/webviewfilehandler.cpp diff --git a/src/common/webviewfilehandler.cpp b/src/common/webviewfilehandler.cpp index 4c87f547b0..3dbbbb3398 100644 --- a/src/common/webviewfilehandler.cpp +++ b/src/common/webviewfilehandler.cpp @@ -52,11 +52,20 @@ wxWebFileHandler::wxWebFileHandler() wxFSFile* wxWebFileHandler::GetFile(const wxString &uri) { + //If there is a fragment at the end of the path then we need to strip it + //off as not all backends do this for us + wxString path = uri; + size_t hashloc = uri.find('#'); + if(hashloc != wxString::npos) + { + path = uri.substr(0, hashloc); + } + //We iterate through the string to see if there is a protocol description - int start = -1; - for(int i = 0; i < uri.length(); i++) + size_t start = wxString::npos; + for(size_t i = 0; i < path.length(); i++) { - if(uri[i] == ';' && uri.substr(i, 10) == ";protocol=") + if(path[i] == ';' && path.substr(i, 10) == ";protocol=") { start = i; break; @@ -64,32 +73,32 @@ wxFSFile* wxWebFileHandler::GetFile(const wxString &uri) } //We do not have a protocol string so we just pass the path withouth the - if(start == -1) + if(start == wxString::npos) { - size_t doubleslash = uri.find("//"); + size_t doubleslash = path.find("//"); //The path is incorrectly formed without // after the scheme if(doubleslash == wxString::npos) return NULL; wxString fspath = "file:" + - EscapeFileNameCharsInURL(uri.substr(doubleslash + 2)); + EscapeFileNameCharsInURL(path.substr(doubleslash + 2)); return m_fileSystem->OpenFile(fspath); } //Otherwise we need to extract the protocol else { - int end = uri.find('/', start); + size_t end = path.find('/', start); //For the path to be valid there must to a path after the protocol if(end == wxString::npos) { return NULL; } - wxString mainpath = uri.substr(0, start); - wxString archivepath = uri.substr(end); - wxString protstring = uri.substr(start, end - start); + wxString mainpath = path.substr(0, start); + wxString archivepath = path.substr(end); + wxString protstring = path.substr(start, end - start); wxString protocol = protstring.substr(10); //We can now construct the correct path - size_t doubleslash = uri.find("//"); + size_t doubleslash = path.find("//"); //The path is incorrectly formed without // after the first protocol if(doubleslash == wxString::npos) return NULL;