summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Núñez <ianmalcom@gmail.com>2017-10-02 09:42:19 (GMT)
committerBrad King <brad.king@kitware.com>2017-10-24 15:04:25 (GMT)
commit393e0fbe630a698d9c8c972059e5de1da727f76a (patch)
tree3dd4c327edbf8e22d6eff02c5124126b4eccb525
parent640709e7db054e90d5e6609eeb16a01af34b5a5a (diff)
downloadCMake-393e0fbe630a698d9c8c972059e5de1da727f76a.zip
CMake-393e0fbe630a698d9c8c972059e5de1da727f76a.tar.gz
CMake-393e0fbe630a698d9c8c972059e5de1da727f76a.tar.bz2
cmTimestamp: For symlinks switch to timestamp of resolved path
ModifiedTime uses stat on UNIX which does resolve symlinks, however Windows implementation relies on GetFileAttributesExW which does not. Getting real file path before calling ModifiedTime will not change UNIX semantic and will fix Windows behavior. Fixes: #17206
-rw-r--r--Source/cmTimestamp.cxx6
1 files changed, 4 insertions, 2 deletions
diff --git a/Source/cmTimestamp.cxx b/Source/cmTimestamp.cxx
index 9fb79d9..e747adb 100644
--- a/Source/cmTimestamp.cxx
+++ b/Source/cmTimestamp.cxx
@@ -33,11 +33,13 @@ std::string cmTimestamp::FileModificationTime(const char* path,
const std::string& formatString,
bool utcFlag)
{
- if (!cmsys::SystemTools::FileExists(path)) {
+ std::string real_path = cmSystemTools::GetRealPath(path);
+
+ if (!cmsys::SystemTools::FileExists(real_path)) {
return std::string();
}
- time_t mtime = cmsys::SystemTools::ModifiedTime(path);
+ time_t mtime = cmsys::SystemTools::ModifiedTime(real_path);
return CreateTimestampFromTimeT(mtime, formatString, utcFlag);
}