mirror of
https://github.com/reactos/CMake.git
synced 2024-11-28 14:01:21 +00:00
KWSys 2017-09-01 (aee0cf59)
Code extracted from: https://gitlab.kitware.com/utils/kwsys.git at commit aee0cf59bbed8c8ccc07fa3d77760024cdca520a (master). Upstream Shortlog ----------------- Steven Velez (1): 80652055 Directory: Use Windows Extended Paths
This commit is contained in:
parent
9e0026216f
commit
37760743fc
@ -1032,6 +1032,7 @@ IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
|
||||
testSystemTools
|
||||
testCommandLineArguments
|
||||
testCommandLineArguments1
|
||||
testDirectory
|
||||
)
|
||||
IF(KWSYS_STL_HAS_WSTRING)
|
||||
SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS}
|
||||
|
@ -118,8 +118,8 @@ bool Directory::Load(const std::string& name)
|
||||
struct _wfinddata_t data; // data of current file
|
||||
|
||||
// Now put them into the file array
|
||||
srchHandle =
|
||||
_wfindfirst_func((wchar_t*)Encoding::ToWide(buf).c_str(), &data);
|
||||
srchHandle = _wfindfirst_func(
|
||||
(wchar_t*)Encoding::ToWindowsExtendedPath(buf).c_str(), &data);
|
||||
delete[] buf;
|
||||
|
||||
if (srchHandle == -1) {
|
||||
|
@ -2269,11 +2269,7 @@ bool SystemTools::CopyADirectory(const std::string& source,
|
||||
const std::string& destination, bool always)
|
||||
{
|
||||
Directory dir;
|
||||
#ifdef _WIN32
|
||||
dir.Load(Encoding::ToNarrow(Encoding::ToWindowsExtendedPath(source)));
|
||||
#else
|
||||
dir.Load(source);
|
||||
#endif
|
||||
size_t fileNum;
|
||||
if (!SystemTools::MakeDirectory(destination)) {
|
||||
return false;
|
||||
@ -2626,11 +2622,7 @@ bool SystemTools::RemoveADirectory(const std::string& source)
|
||||
}
|
||||
|
||||
Directory dir;
|
||||
#ifdef _WIN32
|
||||
dir.Load(Encoding::ToNarrow(Encoding::ToWindowsExtendedPath(source)));
|
||||
#else
|
||||
dir.Load(source);
|
||||
#endif
|
||||
size_t fileNum;
|
||||
for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum) {
|
||||
if (strcmp(dir.GetFile(static_cast<unsigned long>(fileNum)), ".") &&
|
||||
|
79
testDirectory.cxx
Normal file
79
testDirectory.cxx
Normal file
@ -0,0 +1,79 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing#kwsys for details. */
|
||||
#include "kwsysPrivate.h"
|
||||
#include KWSYS_HEADER(Directory.hxx)
|
||||
#include KWSYS_HEADER(Encoding.hxx)
|
||||
#include KWSYS_HEADER(SystemTools.hxx)
|
||||
|
||||
// Work-around CMake dependency scanning limitation. This must
|
||||
// duplicate the above list of headers.
|
||||
#if 0
|
||||
#include "Directory.hxx.in"
|
||||
#include "Encoding.hxx.in"
|
||||
#include "SystemTools.hxx.in"
|
||||
#endif
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include <testSystemTools.h>
|
||||
|
||||
int _doLongPathTest()
|
||||
{
|
||||
using namespace kwsys;
|
||||
static const int LONG_PATH_THRESHOLD = 512;
|
||||
int res = 0;
|
||||
std::string topdir(TEST_SYSTEMTOOLS_BINARY_DIR "/directory_testing/");
|
||||
std::stringstream testpathstrm;
|
||||
std::string testdirpath;
|
||||
std::string extendedtestdirpath;
|
||||
|
||||
testpathstrm << topdir;
|
||||
size_t pathlen = testpathstrm.str().length();
|
||||
testpathstrm.seekp(0, std::ios_base::end);
|
||||
while (pathlen < LONG_PATH_THRESHOLD) {
|
||||
testpathstrm << "0123456789/";
|
||||
pathlen = testpathstrm.str().length();
|
||||
}
|
||||
|
||||
testdirpath = testpathstrm.str();
|
||||
#ifdef _WIN32
|
||||
extendedtestdirpath =
|
||||
Encoding::ToNarrow(SystemTools::ConvertToWindowsExtendedPath(testdirpath));
|
||||
#else
|
||||
extendedtestdirpath = testdirpath;
|
||||
#endif
|
||||
|
||||
if (SystemTools::MakeDirectory(extendedtestdirpath)) {
|
||||
std::ofstream testfile1(
|
||||
(extendedtestdirpath + "longfilepathtest1.txt").c_str());
|
||||
std::ofstream testfile2(
|
||||
(extendedtestdirpath + "longfilepathtest2.txt").c_str());
|
||||
testfile1 << "foo";
|
||||
testfile2 << "bar";
|
||||
testfile1.close();
|
||||
testfile2.close();
|
||||
|
||||
Directory testdir;
|
||||
// Set res to failure if the directory doesn't load
|
||||
res += !testdir.Load(testdirpath);
|
||||
// Increment res failure if the directory appears empty
|
||||
res += testdir.GetNumberOfFiles() == 0;
|
||||
// Increment res failures if the path has changed from
|
||||
// what was provided.
|
||||
res += testdirpath != testdir.GetPath();
|
||||
|
||||
SystemTools::RemoveADirectory(topdir);
|
||||
} else {
|
||||
std::cerr << "Failed to create directory with long path: "
|
||||
<< extendedtestdirpath << std::endl;
|
||||
res += 1;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
int testDirectory(int, char* [])
|
||||
{
|
||||
return _doLongPathTest();
|
||||
}
|
Loading…
Reference in New Issue
Block a user