From 1e0a2e93775c8d3b6b81b82d285986ad2f9d1cf1 Mon Sep 17 00:00:00 2001 From: KWSys Upstream Date: Tue, 15 May 2018 08:52:52 -0400 Subject: 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 --- SystemTools.cxx | 4 +++- testDirectory.cxx | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/SystemTools.cxx b/SystemTools.cxx index 52f509a..7167527 100644 --- a/SystemTools.cxx +++ b/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; diff --git a/testDirectory.cxx b/testDirectory.cxx index 983f2c6..62a0986 100644 --- a/testDirectory.cxx +++ b/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(); } -- cgit v0.12