added: a new mount type: static
some path in winix can be redirected to a specified static directory git-svn-id: svn://ttmath.org/publicrep/winix/trunk@738 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
154
core/misc.h
154
core/misc.h
@@ -389,6 +389,160 @@ void NoFirstHttp(StringType & s)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
this method returns true if there are two dots meaning 'go up' somewhere in the path
|
||||
|
||||
for example such paths return true:
|
||||
".."
|
||||
"test/../path"
|
||||
"test/where/../"
|
||||
"test/where/.."
|
||||
"../abc"
|
||||
*/
|
||||
template<class StringType>
|
||||
bool PathHasUpDir(const StringType * str)
|
||||
{
|
||||
size_t i = 0;
|
||||
|
||||
while( str[i] )
|
||||
{
|
||||
if( str[i]=='.' && str[i+1]=='.' )
|
||||
{
|
||||
i += 2;
|
||||
|
||||
if( str[i]=='/' || str[i]==0 )
|
||||
return true;
|
||||
}
|
||||
|
||||
// skipping until to next slash
|
||||
while( str[i] && str[i]!='/' )
|
||||
i += 1;
|
||||
|
||||
// skipping the slash (or slashes)
|
||||
while( str[i]=='/' )
|
||||
i += 1;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
template<class StringType>
|
||||
bool PathHasUpDir(const StringType & str)
|
||||
{
|
||||
return PathHasUpDir(str.c_str());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
this method calculates how many directories there are in the given path
|
||||
input:
|
||||
str - path
|
||||
last_is_dir - true if the last part of the path should be treated as a directory too
|
||||
|
||||
samples:
|
||||
HowManyDirs("", false) -> 0
|
||||
HowManyDirs("", true) -> 0
|
||||
HowManyDirs("abc", false) -> 0
|
||||
HowManyDirs("abc", true) -> 1
|
||||
HowManyDirs("/abc/", true) -> 1
|
||||
HowManyDirs("////", false) -> 0
|
||||
HowManyDirs("////", true) -> 0
|
||||
HowManyDirs("////abc", false) -> 0
|
||||
HowManyDirs("////abc", true) -> 1
|
||||
HowManyDirs("/var/static", false) -> 1
|
||||
HowManyDirs("/var/static", true) -> 2
|
||||
HowManyDirs("/var/static/", false) -> 2
|
||||
HowManyDirs("/var/static/", true) -> 2
|
||||
*/
|
||||
template<class StringType>
|
||||
size_t HowManyDirs(const StringType * str, bool is_last_dir = false)
|
||||
{
|
||||
size_t res = 0;
|
||||
size_t i = 0;
|
||||
|
||||
// first slash (root dir) is not calculated
|
||||
while( str[i]=='/' )
|
||||
i += 1;
|
||||
|
||||
while( str[i] )
|
||||
{
|
||||
if( str[i]=='/' )
|
||||
{
|
||||
res += 1;
|
||||
|
||||
while( str[i]=='/' )
|
||||
i += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if( is_last_dir && i>0 && str[i-1]!='/' )
|
||||
res += 1;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
template<class StringType>
|
||||
size_t HowManyDirs(const StringType & str, bool is_last_dir = false)
|
||||
{
|
||||
return HowManyDirs(str.c_str(), is_last_dir);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
this method skips some first directories from given path
|
||||
|
||||
samples:
|
||||
SkipDirs("/var/test", 1) -> "test"
|
||||
SkipDirs("/var/test/somewhere", 1) -> "test/somewhere"
|
||||
SkipDirs("/var/test/somewhere", 2) -> "somewhere"
|
||||
SkipDirs("/var/test/somewhere", 10) -> ""
|
||||
*/
|
||||
template<class StringType>
|
||||
const StringType * SkipDirs(const StringType * str, size_t how_many_skip)
|
||||
{
|
||||
size_t i = 0;
|
||||
size_t skipped = 0;
|
||||
|
||||
if( how_many_skip == 0 )
|
||||
return str;
|
||||
|
||||
// first slash (root dir) is not calculated
|
||||
while( str[i]=='/' )
|
||||
i += 1;
|
||||
|
||||
while( str[i] )
|
||||
{
|
||||
if( str[i]=='/' )
|
||||
{
|
||||
skipped += 1;
|
||||
|
||||
while( str[i]=='/' )
|
||||
i += 1;
|
||||
|
||||
if( skipped == how_many_skip )
|
||||
return str+i;
|
||||
}
|
||||
else
|
||||
{
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return str + i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool ValidateEmail(const std::wstring & email);
|
||||
|
Reference in New Issue
Block a user