diff options
author | KWSys Robot <kwrobot@kitware.com> | 2015-08-03 17:14:14 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-08-03 17:17:50 (GMT) |
commit | 9a59ae5c198f7c413bcaf29f1ab107a265677b95 (patch) | |
tree | c904a09ba88c1f96cfb0886c25a25cb1df019075 | |
parent | 1feafc643b1c50fd0fa8171a4170065ca39d4d4c (diff) | |
download | CMake-9a59ae5c198f7c413bcaf29f1ab107a265677b95.zip CMake-9a59ae5c198f7c413bcaf29f1ab107a265677b95.tar.gz CMake-9a59ae5c198f7c413bcaf29f1ab107a265677b95.tar.bz2 |
KWSys 2015-08-03 (dad68c33)
Extract upstream KWSys using the following shell commands.
$ git archive --prefix=upstream-kwsys/ dad68c33 | tar x
$ git shortlog --no-merges --abbrev=8 --format='%h %s' f63febb7..dad68c33
James Johnston (1):
dad68c33 Encoding: Fix undefined behavior if out of memory.
Jean-Christophe Fillion-Robin (2):
e5c23738 SystemTools: Fix DetectFileType failure on missing file
6d83c113 SystemTools: Fix DetectFileType failure on directory
Sebastian Schuberth (1):
4db8e69f SystemTools: Implement FileIsSymlink on Windows
-rw-r--r-- | EncodingC.c | 14 | ||||
-rw-r--r-- | SystemTools.cxx | 18 | ||||
-rw-r--r-- | testSystemTools.cxx | 22 |
3 files changed, 48 insertions, 6 deletions
diff --git a/EncodingC.c b/EncodingC.c index ba2cec2..32b9bff 100644 --- a/EncodingC.c +++ b/EncodingC.c @@ -45,8 +45,11 @@ wchar_t* kwsysEncoding_DupToWide(const char* str) if(length > 0) { ret = (wchar_t*)malloc((length)*sizeof(wchar_t)); - ret[0] = 0; - kwsysEncoding_mbstowcs(ret, str, length); + if(ret) + { + ret[0] = 0; + kwsysEncoding_mbstowcs(ret, str, length); + } } return ret; } @@ -72,8 +75,11 @@ char* kwsysEncoding_DupToNarrow(const wchar_t* str) if(length > 0) { ret = (char*)malloc(length); - ret[0] = 0; - kwsysEncoding_wcstombs(ret, str, length); + if(ret) + { + ret[0] = 0; + kwsysEncoding_wcstombs(ret, str, length); + } } return ret; } diff --git a/SystemTools.cxx b/SystemTools.cxx index 3452259..0714344 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -3198,8 +3198,16 @@ bool SystemTools::FileIsDirectory(const kwsys_stl::string& inName) bool SystemTools::FileIsSymlink(const kwsys_stl::string& name) { #if defined( _WIN32 ) - (void)name; - return false; + DWORD attr = GetFileAttributesW( + SystemTools::ConvertToWindowsExtendedPath(name).c_str()); + if (attr != INVALID_FILE_ATTRIBUTES) + { + return (attr & FILE_ATTRIBUTE_REPARSE_POINT) != 0; + } + else + { + return false; + } #else struct stat fs; if(lstat(name.c_str(), &fs) == 0) @@ -4230,6 +4238,11 @@ SystemTools::DetectFileType(const char *filename, return SystemTools::FileTypeUnknown; } + if (SystemTools::FileIsDirectory(filename)) + { + return SystemTools::FileTypeUnknown; + } + FILE *fp = Fopen(filename, "rb"); if (!fp) { @@ -4243,6 +4256,7 @@ SystemTools::DetectFileType(const char *filename, fclose(fp); if (read_length == 0) { + delete [] buffer; return SystemTools::FileTypeUnknown; } diff --git a/testSystemTools.cxx b/testSystemTools.cxx index 15d8eab..7b5c025 100644 --- a/testSystemTools.cxx +++ b/testSystemTools.cxx @@ -98,6 +98,10 @@ static bool CheckEscapeChars(kwsys_stl::string input, static bool CheckFileOperations() { bool res = true; + const kwsys_stl::string testNonExistingFile(TEST_SYSTEMTOOLS_SOURCE_DIR + "/testSystemToolsNonExistingFile"); + const kwsys_stl::string testDotFile(TEST_SYSTEMTOOLS_SOURCE_DIR + "/."); const kwsys_stl::string testBinFile(TEST_SYSTEMTOOLS_SOURCE_DIR "/testSystemTools.bin"); const kwsys_stl::string testTxtFile(TEST_SYSTEMTOOLS_SOURCE_DIR @@ -106,6 +110,24 @@ static bool CheckFileOperations() "/testSystemToolsNewDir"); const kwsys_stl::string testNewFile(testNewDir + "/testNewFile.txt"); + if (kwsys::SystemTools::DetectFileType(testNonExistingFile.c_str()) != + kwsys::SystemTools::FileTypeUnknown) + { + kwsys_ios::cerr + << "Problem with DetectFileType - failed to detect type of: " + << testNonExistingFile << kwsys_ios::endl; + res = false; + } + + if (kwsys::SystemTools::DetectFileType(testDotFile.c_str()) != + kwsys::SystemTools::FileTypeUnknown) + { + kwsys_ios::cerr + << "Problem with DetectFileType - failed to detect type of: " + << testDotFile << kwsys_ios::endl; + res = false; + } + if (kwsys::SystemTools::DetectFileType(testBinFile.c_str()) != kwsys::SystemTools::FileTypeBinary) { |