Skip to content

Commit 819299f

Browse files
committedJun 16, 2023
Windows: extend some type conversion definitions
Add some more type conversion helpers for macros used in `CreateFileW` which adds verbosity by explicitly casting the imported types to `DWORD`.

File tree

6 files changed

+59
-42
lines changed

6 files changed

+59
-42
lines changed
 

‎Sources/Foundation/FileManager+Win32.swift

+19-24
Original file line numberDiff line numberDiff line change
@@ -404,9 +404,9 @@ extension FileManager {
404404

405405
let handle: HANDLE = try FileManager.default._fileSystemRepresentation(withPath: path) {
406406
CreateFileW($0, GENERIC_READ,
407-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
408-
nil, DWORD(OPEN_EXISTING),
409-
DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS),
407+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
408+
nil, OPEN_EXISTING,
409+
FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS,
410410
nil)
411411
}
412412
if handle == INVALID_HANDLE_VALUE {
@@ -518,10 +518,9 @@ extension FileManager {
518518
let hFile: HANDLE = try FileManager.default._fileSystemRepresentation(withPath: path) {
519519
// BACKUP_SEMANTICS are (confusingly) required in order to receive a
520520
// handle to a directory
521-
CreateFileW($0, /*dwDesiredAccess=*/DWORD(0),
522-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
523-
/*lpSecurityAttributes=*/nil, DWORD(OPEN_EXISTING),
524-
DWORD(FILE_FLAG_BACKUP_SEMANTICS), /*hTemplateFile=*/nil)
521+
CreateFileW($0, 0,
522+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
523+
nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nil)
525524
}
526525
if hFile == INVALID_HANDLE_VALUE {
527526
return try FileManager.default._fileSystemRepresentation(withPath: path) {
@@ -744,10 +743,8 @@ extension FileManager {
744743
do { faAttributes = try windowsFileAttributes(atPath: path) } catch { return false }
745744
if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT {
746745
let handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path) {
747-
CreateFileW($0, /* dwDesiredAccess= */ DWORD(0),
748-
DWORD(FILE_SHARE_READ), /* lpSecurityAttributes= */ nil,
749-
DWORD(OPEN_EXISTING),
750-
DWORD(FILE_FLAG_BACKUP_SEMANTICS), /* hTemplateFile= */ nil)
746+
CreateFileW($0, 0, FILE_SHARE_READ, nil, OPEN_EXISTING,
747+
FILE_FLAG_BACKUP_SEMANTICS, nil)
751748
}) ?? INVALID_HANDLE_VALUE
752749
if handle == INVALID_HANDLE_VALUE { return false }
753750
defer { CloseHandle(handle) }
@@ -822,11 +819,9 @@ extension FileManager {
822819

823820
var statInfo = stat()
824821
let handle =
825-
CreateFileW(_fsRep, /*dwDesiredAccess=*/DWORD(0),
826-
DWORD(FILE_SHARE_READ), /*lpSecurityAttributes=*/nil,
827-
DWORD(OPEN_EXISTING),
828-
DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS),
829-
/*hTemplateFile=*/nil)
822+
CreateFileW(_fsRep, 0, FILE_SHARE_READ, nil, OPEN_EXISTING,
823+
FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS,
824+
nil)
830825
if handle == INVALID_HANDLE_VALUE {
831826
throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path])
832827
}
@@ -872,19 +867,19 @@ extension FileManager {
872867
internal func _contentsEqual(atPath path1: String, andPath path2: String) -> Bool {
873868
let path1Handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path1) {
874869
CreateFileW($0, GENERIC_READ,
875-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
876-
nil, DWORD(OPEN_EXISTING),
877-
DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS),
870+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
871+
nil, OPEN_EXISTING,
872+
FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS,
878873
nil)
879874
}) ?? INVALID_HANDLE_VALUE
880875
if path1Handle == INVALID_HANDLE_VALUE { return false }
881876
defer { CloseHandle(path1Handle) }
882877

883878
let path2Handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path2) {
884879
CreateFileW($0, GENERIC_READ,
885-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
886-
nil, DWORD(OPEN_EXISTING),
887-
DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS),
880+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
881+
nil, OPEN_EXISTING,
882+
FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS,
888883
nil)
889884
}) ?? INVALID_HANDLE_VALUE
890885
if path2Handle == INVALID_HANDLE_VALUE { return false }
@@ -972,8 +967,8 @@ extension FileManager {
972967
FILETIME(from: time_t((modificationTime ?? stat.lastModificationDate).timeIntervalSince1970))
973968

974969
let hFile: HANDLE =
975-
CreateFileW(fsr, DWORD(GENERIC_WRITE), DWORD(FILE_SHARE_WRITE),
976-
nil, DWORD(OPEN_EXISTING), 0, nil)
970+
CreateFileW(fsr, GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0,
971+
nil)
977972
if hFile == INVALID_HANDLE_VALUE {
978973
throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path])
979974
}

‎Sources/Foundation/FileManager.swift

+4-5
Original file line numberDiff line numberDiff line change
@@ -1300,11 +1300,10 @@ public struct FileAttributeType : RawRepresentable, Equatable, Hashable {
13001300
} else if attributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT {
13011301
// A reparse point may or may not actually be a symbolic link, we need to read the reparse tag
13021302
let handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path) {
1303-
CreateFileW($0, /*dwDesiredAccess=*/DWORD(0),
1304-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE),
1305-
/*lpSecurityAttributes=*/nil, DWORD(OPEN_EXISTING),
1306-
DWORD(FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS),
1307-
/*hTemplateFile=*/nil)
1303+
CreateFileW($0, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nil,
1304+
OPEN_EXISTING,
1305+
FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS,
1306+
nil)
13081307
}) ?? INVALID_HANDLE_VALUE
13091308
if handle == INVALID_HANDLE_VALUE {
13101309
self = .typeUnknown

‎Sources/Foundation/NSPathUtilities.swift

+3-7
Original file line numberDiff line numberDiff line change
@@ -762,13 +762,9 @@ internal func _NSCreateTemporaryFile(_ filePath: String) throws -> (Int32, Strin
762762
throw _NSErrorWithWindowsError(GetLastError(), reading: false)
763763
}
764764
let pathResult = FileManager.default.string(withFileSystemRepresentation: String(decoding: buf, as: UTF16.self), length: wcslen(buf))
765-
guard let h = CreateFileW(buf,
766-
GENERIC_READ | DWORD(GENERIC_WRITE),
767-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
768-
nil,
769-
DWORD(OPEN_EXISTING),
770-
FILE_ATTRIBUTE_NORMAL,
771-
nil),
765+
guard let h = CreateFileW(buf, GENERIC_READ | GENERIC_WRITE,
766+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
767+
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nil),
772768
h != INVALID_HANDLE_VALUE else {
773769
throw _NSErrorWithWindowsError(GetLastError(), reading: false)
774770
}

‎Sources/Foundation/NSURL.swift

+2-3
Original file line numberDiff line numberDiff line change
@@ -927,9 +927,8 @@ extension NSURL {
927927
#if os(Windows)
928928
let hFile: HANDLE = absolutePath.withCString(encodedAs: UTF16.self) {
929929
CreateFileW($0, GENERIC_READ,
930-
DWORD(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
931-
nil, DWORD(OPEN_EXISTING),
932-
DWORD(FILE_FLAG_BACKUP_SEMANTICS), nil)
930+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
931+
nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nil)
933932
}
934933
guard hFile == INVALID_HANDLE_VALUE else {
935934
defer { CloseHandle(hFile) }

‎Sources/Foundation/WinSDK+Extensions.swift

+28
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,32 @@ internal var FILE_ATTRIBUTE_READONLY: DWORD {
3232
internal var FILE_ATTRIBUTE_REPARSE_POINT: DWORD {
3333
DWORD(WinSDK.FILE_ATTRIBUTE_REPARSE_POINT)
3434
}
35+
36+
internal var FILE_FLAG_BACKUP_SEMANTICS: DWORD {
37+
DWORD(WinSDK.FILE_FLAG_BACKUP_SEMANTICS)
38+
}
39+
40+
internal var FILE_FLAG_OPEN_REPARSE_POINT: DWORD {
41+
DWORD(WinSDK.FILE_FLAG_OPEN_REPARSE_POINT)
42+
}
43+
44+
internal var FILE_SHARE_DELETE: DWORD {
45+
DWORD(WinSDK.FILE_SHARE_DELETE)
46+
}
47+
48+
internal var FILE_SHARE_READ: DWORD {
49+
DWORD(WinSDK.FILE_SHARE_READ)
50+
}
51+
52+
internal var FILE_SHARE_WRITE: DWORD {
53+
DWORD(WinSDK.FILE_SHARE_WRITE)
54+
}
55+
56+
internal var GENERIC_WRITE: DWORD {
57+
DWORD(WinSDK.GENERIC_WRITE)
58+
}
59+
60+
internal var OPEN_EXISTING: DWORD {
61+
DWORD(WinSDK.OPEN_EXISTING)
62+
}
3563
#endif

‎Tests/Foundation/Tests/TestFileHandle.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ class TestFileHandle : XCTestCase {
133133
// NOTE(compnerd) we need the FILE_FLAG_BACKUP_SEMANTICS so that we
134134
// can create the handle to the directory.
135135
CreateFileW($0, GENERIC_READ,
136-
DWORD(FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE),
137-
nil, DWORD(OPEN_EXISTING),
138-
DWORD(FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS), nil)
136+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
137+
nil, OPEN_EXISTING,
138+
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, nil)
139139
}
140140
if hDirectory == INVALID_HANDLE_VALUE {
141141
fatalError("unable to create handle to current directory")

0 commit comments

Comments
 (0)
Please sign in to comment.