summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKWSys Upstream <kwrobot@kitware.com>2016-08-03 16:32:48 (GMT)
committerBrad King <brad.king@kitware.com>2016-08-04 14:11:06 (GMT)
commit6c0820a8748e24155d3b7ce6991a90f5a396f524 (patch)
treea73fc87560b8d3b6c22c7da819ff3a45ef171e69
parent3e6ec47c421808123efac2cf67850f8b75839c67 (diff)
downloadCMake-6c0820a8748e24155d3b7ce6991a90f5a396f524.zip
CMake-6c0820a8748e24155d3b7ce6991a90f5a396f524.tar.gz
CMake-6c0820a8748e24155d3b7ce6991a90f5a396f524.tar.bz2
KWSys 2016-08-03 (6d23dd7e)
Code extracted from: http://public.kitware.com/KWSys.git at commit 6d23dd7e455a7b2088c4ec6dce760d8243b84ee6 (master). Upstream Shortlog ----------------- Ben Boeckel (1): 6d23dd7e SystemTools: add a PathExists method
-rw-r--r--SystemTools.cxx26
-rw-r--r--SystemTools.hxx.in5
-rw-r--r--testSystemTools.cxx42
3 files changed, 73 insertions, 0 deletions
diff --git a/SystemTools.cxx b/SystemTools.cxx
index d479ee1..eb2bec6 100644
--- a/SystemTools.cxx
+++ b/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/SystemTools.hxx.in b/SystemTools.hxx.in
index aa1bf1b..28ff0b3 100644
--- a/SystemTools.hxx.in
+++ b/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/testSystemTools.cxx b/testSystemTools.cxx
index 4dab347..9252ea6 100644
--- a/testSystemTools.cxx
+++ b/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.