improvement of URIStreamOpener::open() implementation

This commit is contained in:
Günter Obiltschnig
2016-09-29 19:06:46 +02:00
parent 07f6f77d6e
commit 4a96c934ba
2 changed files with 26 additions and 24 deletions

View File

@@ -178,4 +178,5 @@ POCO_IMPLEMENT_EXCEPTION(URISyntaxException, SyntaxException, "Bad URI syntax")
POCO_IMPLEMENT_EXCEPTION(ApplicationException, Exception, "Application exception") POCO_IMPLEMENT_EXCEPTION(ApplicationException, Exception, "Application exception")
POCO_IMPLEMENT_EXCEPTION(BadCastException, RuntimeException, "Bad cast exception") POCO_IMPLEMENT_EXCEPTION(BadCastException, RuntimeException, "Bad cast exception")
} // namespace Poco } // namespace Poco

View File

@@ -65,22 +65,15 @@ std::istream* URIStreamOpener::open(const std::string& pathOrURI) const
{ {
return openURI(scheme, uri); return openURI(scheme, uri);
} }
else else if (scheme.length() <= 1) // could be Windows path
{ {
Path path; Path path;
if (path.tryParse(pathOrURI, Path::PATH_GUESS)) if (path.tryParse(pathOrURI, Path::PATH_GUESS))
{
return openFile(path); return openFile(path);
else }
throw UnknownURISchemeException(pathOrURI);
} }
} throw UnknownURISchemeException(pathOrURI);
catch (UnknownURISchemeException&)
{
throw;
}
catch (TooManyURIRedirectsException&)
{
throw;
} }
catch (URISyntaxException&) catch (URISyntaxException&)
{ {
@@ -105,24 +98,32 @@ std::istream* URIStreamOpener::open(const std::string& basePathOrURI, const std:
if (it != _map.end()) if (it != _map.end())
{ {
uri.resolve(pathOrURI); uri.resolve(pathOrURI);
scheme = uri.getScheme();
return openURI(scheme, uri); return openURI(scheme, uri);
} }
else if (scheme.length() <= 1) // could be Windows path
{
Path base;
Path path;
if (base.tryParse(basePathOrURI, Path::PATH_GUESS) && path.tryParse(pathOrURI, Path::PATH_GUESS))
{
base.resolve(path);
return openFile(base);
}
}
throw UnknownURISchemeException(basePathOrURI);
} }
catch (UnknownURISchemeException&) catch (URISyntaxException&)
{
throw;
}
catch (TooManyURIRedirectsException&)
{
throw;
}
catch (Exception&)
{ {
Path base;
Path path;
if (base.tryParse(basePathOrURI, Path::PATH_GUESS) && path.tryParse(pathOrURI, Path::PATH_GUESS))
{
base.resolve(path);
return openFile(base);
}
else throw;
} }
Path base(basePathOrURI, Path::PATH_GUESS);
Path path(pathOrURI, Path::PATH_GUESS);
base.resolve(path);
return openFile(base);
} }