Commit c6a83ecf authored by Kitware Robot's avatar Kitware Robot Committed by Brad King

KWSys 2017-12-12 (3ba214b7)

Code extracted from:

    https://gitlab.kitware.com/utils/kwsys.git

at commit 3ba214b7963fdd59f6f230c100550f9c5aa3deab (master).

Upstream Shortlog
-----------------

Gregor Jasny (1):
      8e029751 SystemTools: Fix IsSubDirectory for subdirs of drive root
parent 3b1bb703
......@@ -4234,11 +4234,16 @@ bool SystemTools::IsSubDirectory(const std::string& cSubdir,
std::string dir = cDir;
SystemTools::ConvertToUnixSlashes(subdir);
SystemTools::ConvertToUnixSlashes(dir);
if (subdir.size() > dir.size() && subdir[dir.size()] == '/') {
std::string s = subdir.substr(0, dir.size());
return SystemTools::ComparePath(s, dir);
if (subdir.size() <= dir.size() || dir.empty()) {
return false;
}
return false;
bool isRootPath = *dir.rbegin() == '/'; // like "/" or "C:/"
size_t expectedSlashPosition = isRootPath ? dir.size() - 1u : dir.size();
if (subdir[expectedSlashPosition] != '/') {
return false;
}
std::string s = subdir.substr(0, dir.size());
return SystemTools::ComparePath(s, dir);
}
void SystemTools::Delay(unsigned int msec)
......
......@@ -813,6 +813,39 @@ static bool CheckFind()
return res;
}
static bool CheckIsSubDirectory()
{
bool res = true;
if (kwsys::SystemTools::IsSubDirectory("/foo", "/") == false) {
std::cerr << "Problem with IsSubDirectory (root - unix): " << std::endl;
res = false;
}
if (kwsys::SystemTools::IsSubDirectory("c:/foo", "c:/") == false) {
std::cerr << "Problem with IsSubDirectory (root - dos): " << std::endl;
res = false;
}
if (kwsys::SystemTools::IsSubDirectory("/foo/bar", "/foo") == false) {
std::cerr << "Problem with IsSubDirectory (deep): " << std::endl;
res = false;
}
if (kwsys::SystemTools::IsSubDirectory("/foo", "/foo") == true) {
std::cerr << "Problem with IsSubDirectory (identity): " << std::endl;
res = false;
}
if (kwsys::SystemTools::IsSubDirectory("/fooo", "/foo") == true) {
std::cerr << "Problem with IsSubDirectory (substring): " << std::endl;
res = false;
}
if (kwsys::SystemTools::IsSubDirectory("/foo/", "/foo") == true) {
std::cerr << "Problem with IsSubDirectory (prepended slash): "
<< std::endl;
res = false;
}
return res;
}
static bool CheckGetLineFromStream()
{
const std::string fileWithFiveCharsOnFirstLine(TEST_SYSTEMTOOLS_SOURCE_DIR
......@@ -897,6 +930,8 @@ int testSystemTools(int, char* [])
res &= CheckFind();
res &= CheckIsSubDirectory();
res &= CheckGetLineFromStream();
res &= CheckGetFilenameName();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment