@ -89,27 +89,37 @@ void ConfigurationManager::processPaths(Files::PathContainer& dataDirs)
const std : : string & path = it - > string ( ) ;
// Check if path contains a token
if ( ! path . empty ( ) & & * path . begin ( ) = = ' ? ' & & * path . rbegin ( ) = = ' ? ' )
if ( ! path . empty ( ) & & * path . begin ( ) = = ' ? ' )
{
TokensMappingContainer: : iterator tokenIt = mTokensMapping . find ( path ) ;
if ( tokenIt ! = mTokensMapping . end ( ) )
std: : string : : size_type pos = path . find ( ' ? ' , 1 ) ;
if ( pos ! = std : : string : : npos & & pos ! = 0 )
{
boost : : filesystem : : path tempPath ( ( ( mFixedPath ) . * ( tokenIt - > second ) ) ( ) ) ;
if ( boost : : filesystem : : is_directory ( tempPath ) )
TokensMappingContainer : : iterator tokenIt = mTokensMapping . find ( path . substr ( 0 , pos + 1 ) ) ;
if ( tokenIt ! = mTokensMapping . end ( ) )
{
( * it ) = tempPath ;
boost : : filesystem : : path tempPath ( ( ( mFixedPath ) . * ( tokenIt - > second ) ) ( ) ) ;
if ( pos < path . length ( ) - 1 )
{
// There is something after the token, so we should
// append it to the path
tempPath / = path . substr ( pos + 1 , path . length ( ) - pos ) ;
}
if ( boost : : filesystem : : is_directory ( tempPath ) )
{
( * it ) = tempPath ;
}
else
{
( * it ) . clear ( ) ;
}
}
else
{
// Clean invalid / unknown token, it will be removed outside the loop
( * it ) . clear ( ) ;
}
}
else
{
// Clean invalid / unknown token, it will be removed outside the loop
( * it ) . clear ( ) ;
}
}
}