diff options
author | Brad King <brad.king@kitware.com> | 2016-08-04 14:11:07 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-08-04 14:11:07 (GMT) |
commit | 8abca14034c22014aead0fd4f3be737cd3835ce4 (patch) | |
tree | c8a7b6f16feb152f58c949e84971c502e38221ed /Source/kwsys | |
parent | 995b54256ede7752b5d6fde049097d15aa16c405 (diff) | |
parent | 6c0820a8748e24155d3b7ce6991a90f5a396f524 (diff) | |
download | CMake-8abca14034c22014aead0fd4f3be737cd3835ce4.zip CMake-8abca14034c22014aead0fd4f3be737cd3835ce4.tar.gz CMake-8abca14034c22014aead0fd4f3be737cd3835ce4.tar.bz2 |
Merge branch 'upstream-KWSys' into update-kwsys
* upstream-KWSys:
KWSys 2016-08-03 (6d23dd7e)
Diffstat (limited to 'Source/kwsys')
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 26 | ||||
-rw-r--r-- | Source/kwsys/SystemTools.hxx.in | 5 | ||||
-rw-r--r-- | Source/kwsys/testSystemTools.cxx | 42 |
3 files changed, 73 insertions, 0 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index d479ee1..eb2bec6 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -1292,6 +1292,32 @@ bool SystemTools::SameFile(const std::string& file1, const std::string& file2) } //---------------------------------------------------------------------------- +bool SystemTools::PathExists(const std::string& path) +{ + if(path.empty()) + { + return false; + } +#if defined(__CYGWIN__) + // Convert path to native windows path if possible. + char winpath[MAX_PATH]; + if(SystemTools::PathCygwinToWin32(path.c_str(), winpath)) + { + return (GetFileAttributesA(winpath) != INVALID_FILE_ATTRIBUTES); + } + struct stat st; + return lstat(path.c_str(), &st) == 0; +#elif defined(_WIN32) + return (GetFileAttributesW( + SystemTools::ConvertToWindowsExtendedPath(path).c_str()) + != INVALID_FILE_ATTRIBUTES); +#else + struct stat st; + return lstat(path.c_str(), &st) == 0; +#endif +} + +//---------------------------------------------------------------------------- bool SystemTools::FileExists(const char* filename) { if(!filename) diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in index aa1bf1b..28ff0b3 100644 --- a/Source/kwsys/SystemTools.hxx.in +++ b/Source/kwsys/SystemTools.hxx.in @@ -306,6 +306,11 @@ public: static std::string ConvertToWindowsOutputPath(const std::string&); /** + * Return true if a path with the given name exists in the current directory. + */ + static bool PathExists(const std::string& path); + + /** * Return true if a file exists in the current directory. * If isFile = true, then make sure the file is a file and * not a directory. If isFile = false, then return true diff --git a/Source/kwsys/testSystemTools.cxx b/Source/kwsys/testSystemTools.cxx index 4dab347..9252ea6 100644 --- a/Source/kwsys/testSystemTools.cxx +++ b/Source/kwsys/testSystemTools.cxx @@ -204,6 +204,14 @@ static bool CheckFileOperations() << testNewDir << std::endl; res = false; } + // check existence + if (!kwsys::SystemTools::PathExists(testNewDir)) + { + std::cerr + << "Problem with PathExists for: " + << testNewDir << std::endl; + res = false; + } // remove it if (!kwsys::SystemTools::RemoveADirectory(testNewDir)) { @@ -221,6 +229,15 @@ static bool CheckFileOperations() << testNewDir << std::endl; res = false; } + // check existence + if (kwsys::SystemTools::PathExists(testNewDir)) + { + std::cerr + << "After RemoveADirectory: " + << "Problem with PathExists for: " + << testNewDir << std::endl; + res = false; + } // create it using the char* version if (!kwsys::SystemTools::MakeDirectory(testNewDir.c_str())) { @@ -329,6 +346,31 @@ static bool CheckFileOperations() res = false; } + // calling with an empty string should return false + if (kwsys::SystemTools::PathExists(std::string())) + { + std::cerr + << "Problem with PathExists(std::string())" + << std::endl; + res = false; + } + // PathExists(x) should return true on a directory + if (!kwsys::SystemTools::PathExists(testNewDir)) + { + std::cerr + << "Problem with PathExists for: " + << testNewDir << std::endl; + res = false; + } + // should work, was created as new file before + if (!kwsys::SystemTools::PathExists(testNewFile)) + { + std::cerr + << "Problem with PathExists for: " + << testNewDir << std::endl; + res = false; + } + // Reset umask #if defined(_WIN32) && !defined(__CYGWIN__) // NOTE: Windows doesn't support toggling _S_IREAD. |