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;
}
//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;