mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Fix incorrectly finding 'executable' directories instead of files.
This broke for example the 'not' utility, if a directory called 'FileCheck' is executable and in the path before the actual 'FileCheck'. This patch steals the implementation of the "old" PathV1 canExecute implementation: - checks for R_OK (file readable): this is necessary for executing scripts; we should not regress here unless we have good reasons - checks for S_ISREG; if we want to get rid of this, we'd need to change all callers who already made the assumption when depending on Path V1. llvm-svn: 184074
This commit is contained in:
parent
3231ab74d4
commit
2a1720f206
@ -296,7 +296,14 @@ bool can_execute(const Twine &Path) {
|
||||
SmallString<128> PathStorage;
|
||||
StringRef P = Path.toNullTerminatedStringRef(PathStorage);
|
||||
|
||||
return ::access(P.begin(), X_OK) != -1;
|
||||
if (0 != access(P.begin(), R_OK | X_OK))
|
||||
return false;
|
||||
struct stat buf;
|
||||
if (0 != stat(P.begin(), &buf))
|
||||
return false;
|
||||
if (!S_ISREG(buf.st_mode))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool equivalent(file_status A, file_status B) {
|
||||
|
Loading…
Reference in New Issue
Block a user