summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOldřich Jedlička <oldium.pro@gmail.com>2023-04-26 09:26:43 +0200
committerBrad King <brad.king@kitware.com>2023-04-26 10:40:05 -0400
commita368a5946744191b3385774882b08a2f0cf7bd48 (patch)
treeb0718f887f0bee36a7d84ce297c5f3262405f799
parent827d5b75d47126205faba26cabc8856c6d9c3362 (diff)
downloadcmake-a368a5946744191b3385774882b08a2f0cf7bd48.tar.gz
Windows: Tolerate GetShortPathNameW failure
This function is used by NMake Makefile generator, but when shortening path fails, it previously returned an empty string. `ERROR_ACCESS_DENIED` is returned for paths within `C:\Program Files\WindowsApps`, which is a special folder with limited access rights. It looks like this is [by design](https://superuser.com/a/1730061/213587). Fixes: #24853
-rw-r--r--Source/cmOutputConverter.cxx7
1 files changed, 6 insertions, 1 deletions
diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx
index 40fed80cfc..53cb21e59d 100644
--- a/Source/cmOutputConverter.cxx
+++ b/Source/cmOutputConverter.cxx
@@ -175,7 +175,12 @@ std::string cmOutputConverter::ConvertToOutputForExisting(
}
std::string tmp{};
- cmSystemTools::GetShortPath(remote, tmp);
+ cmsys::Status status = cmSystemTools::GetShortPath(remote, tmp);
+ if (!status) {
+ // Fallback for cases when Windows refuses to resolve the short path,
+ // like for C:\Program Files\WindowsApps\...
+ tmp = remote;
+ }
shortPathCache[remote] = tmp;
return tmp;
}();