[llvm] 74cb287 - [Support] Windows Filesystem fs::status Conditionally Call GetFileAttributes (#78118)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 15 05:08:15 PST 2024
Author: Haydn Trigg
Date: 2024-01-15T08:08:11-05:00
New Revision: 74cb2879ba10dcad7c745ffc4e8ed3092a5c0f15
URL: https://github.com/llvm/llvm-project/commit/74cb2879ba10dcad7c745ffc4e8ed3092a5c0f15
DIFF: https://github.com/llvm/llvm-project/commit/74cb2879ba10dcad7c745ffc4e8ed3092a5c0f15.diff
LOG: [Support] Windows Filesystem fs::status Conditionally Call GetFileAttributes (#78118)
Rather than conditionally using the output from GetFileAttributesW move
the branch to avoid calling GetFileAttributesW entirely if not required.
This avoids hitting IO an extra time for a small performance
improvement.
Added:
Modified:
llvm/lib/Support/Windows/Path.inc
Removed:
################################################################################
diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc
index 2bf68b7972e746f..7f5e76779412c0d 100644
--- a/llvm/lib/Support/Windows/Path.inc
+++ b/llvm/lib/Support/Windows/Path.inc
@@ -777,14 +777,16 @@ std::error_code status(const Twine &path, file_status &result, bool Follow) {
if (std::error_code ec = widenPath(path8, path_utf16))
return ec;
- DWORD attr = ::GetFileAttributesW(path_utf16.begin());
- if (attr == INVALID_FILE_ATTRIBUTES)
- return getStatus(INVALID_HANDLE_VALUE, result);
-
DWORD Flags = FILE_FLAG_BACKUP_SEMANTICS;
- // Handle reparse points.
- if (!Follow && (attr & FILE_ATTRIBUTE_REPARSE_POINT))
- Flags |= FILE_FLAG_OPEN_REPARSE_POINT;
+ if (!Follow) {
+ DWORD attr = ::GetFileAttributesW(path_utf16.begin());
+ if (attr == INVALID_FILE_ATTRIBUTES)
+ return getStatus(INVALID_HANDLE_VALUE, result);
+
+ // Handle reparse points.
+ if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+ Flags |= FILE_FLAG_OPEN_REPARSE_POINT;
+ }
ScopedFileHandle h(
::CreateFileW(path_utf16.begin(), 0, // Attributes only.
More information about the llvm-commits
mailing list