Browse Source

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
Oldřich Jedlička 2 years ago
parent
commit
a368a59467
1 changed files with 6 additions and 1 deletions
  1. 6 1
      Source/cmOutputConverter.cxx

+ 6 - 1
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;
     }();