Browse Source

KWSys 2018-05-15 (5f757898)

Code extracted from:

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

at commit 5f757898119974aa30f700d5c38928ee48407320 (master).

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

Marian Klymov (1):
      d06fcab7 SystemTools: Check source directory in CopyADirectory
KWSys Upstream 7 years ago
parent
commit
1e0a2e9377
2 changed files with 35 additions and 2 deletions
  1. 3 1
      SystemTools.cxx
  2. 32 1
      testDirectory.cxx

+ 3 - 1
SystemTools.cxx

@@ -2282,7 +2282,9 @@ bool SystemTools::CopyADirectory(const std::string& source,
                                  const std::string& destination, bool always)
 {
   Directory dir;
-  dir.Load(source);
+  if (dir.Load(source) == 0) {
+    return false;
+  }
   size_t fileNum;
   if (!SystemTools::MakeDirectory(destination)) {
     return false;

+ 32 - 1
testDirectory.cxx

@@ -73,7 +73,38 @@ int _doLongPathTest()
   return res;
 }
 
+int _copyDirectoryTest()
+{
+  using namespace kwsys;
+  const std::string source(TEST_SYSTEMTOOLS_BINARY_DIR
+                           "/directory_testing/copyDirectoryTestSrc");
+  if (SystemTools::PathExists(source)) {
+    std::cerr << source << " shouldn't exist before test" << std::endl;
+    return 1;
+  }
+  const std::string destination(TEST_SYSTEMTOOLS_BINARY_DIR
+                                "/directory_testing/copyDirectoryTestDst");
+  if (SystemTools::PathExists(destination)) {
+    std::cerr << destination << " shouldn't exist before test" << std::endl;
+    return 2;
+  }
+  const bool copysuccess = SystemTools::CopyADirectory(source, destination);
+  const bool destinationexists = SystemTools::PathExists(destination);
+  if (copysuccess) {
+    std::cerr << "CopyADirectory should have returned false" << std::endl;
+    SystemTools::RemoveADirectory(destination);
+    return 3;
+  }
+  if (destinationexists) {
+    std::cerr << "CopyADirectory returned false, but destination directory"
+              << " has been created" << std::endl;
+    SystemTools::RemoveADirectory(destination);
+    return 4;
+  }
+  return 0;
+}
+
 int testDirectory(int, char* [])
 {
-  return _doLongPathTest();
+  return _doLongPathTest() + _copyDirectoryTest();
 }