mirror of
				https://github.com/pocoproject/poco.git
				synced 2025-11-04 12:17:37 +01:00 
			
		
		
		
	improvement of URIStreamOpener::open() implementation
This commit is contained in:
		@@ -178,4 +178,5 @@ POCO_IMPLEMENT_EXCEPTION(URISyntaxException, SyntaxException, "Bad URI syntax")
 | 
			
		||||
POCO_IMPLEMENT_EXCEPTION(ApplicationException, Exception, "Application exception")
 | 
			
		||||
POCO_IMPLEMENT_EXCEPTION(BadCastException, RuntimeException, "Bad cast exception")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // namespace Poco
 | 
			
		||||
 
 | 
			
		||||
@@ -65,22 +65,15 @@ std::istream* URIStreamOpener::open(const std::string& pathOrURI) const
 | 
			
		||||
		{
 | 
			
		||||
			return openURI(scheme, uri);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		else if (scheme.length() <= 1) // could be Windows path
 | 
			
		||||
		{
 | 
			
		||||
			Path path;
 | 
			
		||||
			if (path.tryParse(pathOrURI, Path::PATH_GUESS))
 | 
			
		||||
			{
 | 
			
		||||
				return openFile(path);
 | 
			
		||||
			else 
 | 
			
		||||
				throw UnknownURISchemeException(pathOrURI);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	catch (UnknownURISchemeException&)
 | 
			
		||||
	{
 | 
			
		||||
		throw;
 | 
			
		||||
	}
 | 
			
		||||
	catch (TooManyURIRedirectsException&)
 | 
			
		||||
	{
 | 
			
		||||
		throw;
 | 
			
		||||
		throw UnknownURISchemeException(pathOrURI);
 | 
			
		||||
	}
 | 
			
		||||
	catch (URISyntaxException&)
 | 
			
		||||
	{
 | 
			
		||||
@@ -105,24 +98,32 @@ std::istream* URIStreamOpener::open(const std::string& basePathOrURI, const std:
 | 
			
		||||
		if (it != _map.end())
 | 
			
		||||
		{
 | 
			
		||||
			uri.resolve(pathOrURI);
 | 
			
		||||
			scheme = uri.getScheme();
 | 
			
		||||
			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&)
 | 
			
		||||
	{
 | 
			
		||||
		throw;
 | 
			
		||||
	} 
 | 
			
		||||
	catch (TooManyURIRedirectsException&)
 | 
			
		||||
	{
 | 
			
		||||
		throw;
 | 
			
		||||
	} 
 | 
			
		||||
	catch (Exception&)
 | 
			
		||||
	catch (URISyntaxException&)
 | 
			
		||||
	{
 | 
			
		||||
		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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user