diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 5dc5d218cc..7597d43689 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -404,9 +404,9 @@ extension FileManager { let handle: HANDLE = try FileManager.default._fileSystemRepresentation(withPath: path) { CreateFileW($0, GENERIC_READ, - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - nil, DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS), + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, nil) } if handle == INVALID_HANDLE_VALUE { @@ -518,10 +518,9 @@ extension FileManager { let hFile: HANDLE = try FileManager.default._fileSystemRepresentation(withPath: path) { // BACKUP_SEMANTICS are (confusingly) required in order to receive a // handle to a directory - CreateFileW($0, /*dwDesiredAccess=*/DWORD(0), - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - /*lpSecurityAttributes=*/nil, DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_BACKUP_SEMANTICS), /*hTemplateFile=*/nil) + CreateFileW($0, 0, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nil) } if hFile == INVALID_HANDLE_VALUE { return try FileManager.default._fileSystemRepresentation(withPath: path) { @@ -744,10 +743,8 @@ extension FileManager { do { faAttributes = try windowsFileAttributes(atPath: path) } catch { return false } if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT { let handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path) { - CreateFileW($0, /* dwDesiredAccess= */ DWORD(0), - DWORD(FILE_SHARE_READ), /* lpSecurityAttributes= */ nil, - DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_BACKUP_SEMANTICS), /* hTemplateFile= */ nil) + CreateFileW($0, 0, FILE_SHARE_READ, nil, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, nil) }) ?? INVALID_HANDLE_VALUE if handle == INVALID_HANDLE_VALUE { return false } defer { CloseHandle(handle) } @@ -822,11 +819,9 @@ extension FileManager { var statInfo = stat() let handle = - CreateFileW(_fsRep, /*dwDesiredAccess=*/DWORD(0), - DWORD(FILE_SHARE_READ), /*lpSecurityAttributes=*/nil, - DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS), - /*hTemplateFile=*/nil) + CreateFileW(_fsRep, 0, FILE_SHARE_READ, nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, + nil) if handle == INVALID_HANDLE_VALUE { throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) } @@ -872,9 +867,9 @@ extension FileManager { internal func _contentsEqual(atPath path1: String, andPath path2: String) -> Bool { let path1Handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path1) { CreateFileW($0, GENERIC_READ, - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - nil, DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS), + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, nil) }) ?? INVALID_HANDLE_VALUE if path1Handle == INVALID_HANDLE_VALUE { return false } @@ -882,9 +877,9 @@ extension FileManager { let path2Handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path2) { CreateFileW($0, GENERIC_READ, - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - nil, DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS), + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, nil) }) ?? INVALID_HANDLE_VALUE if path2Handle == INVALID_HANDLE_VALUE { return false } @@ -972,8 +967,8 @@ extension FileManager { FILETIME(from: time_t((modificationTime ?? stat.lastModificationDate).timeIntervalSince1970)) let hFile: HANDLE = - CreateFileW(fsr, DWORD(GENERIC_WRITE), DWORD(FILE_SHARE_WRITE), - nil, DWORD(OPEN_EXISTING), 0, nil) + CreateFileW(fsr, GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, + nil) if hFile == INVALID_HANDLE_VALUE { throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path]) } diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 5305f927df..1aa3038a01 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -1300,11 +1300,10 @@ public struct FileAttributeType : RawRepresentable, Equatable, Hashable { } else if attributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT { // A reparse point may or may not actually be a symbolic link, we need to read the reparse tag let handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path) { - CreateFileW($0, /*dwDesiredAccess=*/DWORD(0), - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE), - /*lpSecurityAttributes=*/nil, DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS), - /*hTemplateFile=*/nil) + CreateFileW($0, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nil, + OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, + nil) }) ?? INVALID_HANDLE_VALUE if handle == INVALID_HANDLE_VALUE { self = .typeUnknown diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index 9cd0338172..da9b959e39 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -762,13 +762,9 @@ internal func _NSCreateTemporaryFile(_ filePath: String) throws -> (Int32, Strin throw _NSErrorWithWindowsError(GetLastError(), reading: false) } let pathResult = FileManager.default.string(withFileSystemRepresentation: String(decoding: buf, as: UTF16.self), length: wcslen(buf)) - guard let h = CreateFileW(buf, - GENERIC_READ | DWORD(GENERIC_WRITE), - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - nil, - DWORD(OPEN_EXISTING), - FILE_ATTRIBUTE_NORMAL, - nil), + guard let h = CreateFileW(buf, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nil), h != INVALID_HANDLE_VALUE else { throw _NSErrorWithWindowsError(GetLastError(), reading: false) } diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index e1b2e27fba..9b121d6681 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -927,9 +927,8 @@ extension NSURL { #if os(Windows) let hFile: HANDLE = absolutePath.withCString(encodedAs: UTF16.self) { CreateFileW($0, GENERIC_READ, - DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), - nil, DWORD(OPEN_EXISTING), - DWORD(FILE_FLAG_BACKUP_SEMANTICS), nil) + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nil) } guard hFile == INVALID_HANDLE_VALUE else { defer { CloseHandle(hFile) } diff --git a/Sources/Foundation/WinSDK+Extensions.swift b/Sources/Foundation/WinSDK+Extensions.swift index 98b75e4b43..65c904f181 100644 --- a/Sources/Foundation/WinSDK+Extensions.swift +++ b/Sources/Foundation/WinSDK+Extensions.swift @@ -32,4 +32,32 @@ internal var FILE_ATTRIBUTE_READONLY: DWORD { internal var FILE_ATTRIBUTE_REPARSE_POINT: DWORD { DWORD(WinSDK.FILE_ATTRIBUTE_REPARSE_POINT) } + +internal var FILE_FLAG_BACKUP_SEMANTICS: DWORD { + DWORD(WinSDK.FILE_FLAG_BACKUP_SEMANTICS) +} + +internal var FILE_FLAG_OPEN_REPARSE_POINT: DWORD { + DWORD(WinSDK.FILE_FLAG_OPEN_REPARSE_POINT) +} + +internal var FILE_SHARE_DELETE: DWORD { + DWORD(WinSDK.FILE_SHARE_DELETE) +} + +internal var FILE_SHARE_READ: DWORD { + DWORD(WinSDK.FILE_SHARE_READ) +} + +internal var FILE_SHARE_WRITE: DWORD { + DWORD(WinSDK.FILE_SHARE_WRITE) +} + +internal var GENERIC_WRITE: DWORD { + DWORD(WinSDK.GENERIC_WRITE) +} + +internal var OPEN_EXISTING: DWORD { + DWORD(WinSDK.OPEN_EXISTING) +} #endif diff --git a/Tests/Foundation/Tests/TestFileHandle.swift b/Tests/Foundation/Tests/TestFileHandle.swift index 09879e4572..1211529a5b 100644 --- a/Tests/Foundation/Tests/TestFileHandle.swift +++ b/Tests/Foundation/Tests/TestFileHandle.swift @@ -133,9 +133,9 @@ class TestFileHandle : XCTestCase { // NOTE(compnerd) we need the FILE_FLAG_BACKUP_SEMANTICS so that we // can create the handle to the directory. CreateFileW($0, GENERIC_READ, - DWORD(FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE), - nil, DWORD(OPEN_EXISTING), - DWORD(FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS), nil) + FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, + nil, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, nil) } if hDirectory == INVALID_HANDLE_VALUE { fatalError("unable to create handle to current directory")