@@ -1285,17 +1285,21 @@ public struct FileAttributeType : RawRepresentable, Equatable, Hashable {
1285
1285
self = . typeCharacterSpecial
1286
1286
} else if attributes. dwFileAttributes & DWORD ( FILE_ATTRIBUTE_REPARSE_POINT) == DWORD ( FILE_ATTRIBUTE_REPARSE_POINT) {
1287
1287
// A reparse point may or may not actually be a symbolic link, we need to read the reparse tag
1288
- let handle = path. withCString ( encodedAs: UTF16 . self) {
1289
- CreateFileW ( $0, /*dwDesiredAccess=*/DWORD ( 0 ) , DWORD ( FILE_SHARE_READ | FILE_SHARE_WRITE) , /*lpSecurityAttributes=*/nil ,
1290
- DWORD ( OPEN_EXISTING) , DWORD ( FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS) , /*hTemplateFile=*/nil )
1291
- }
1292
- guard handle != INVALID_HANDLE_VALUE else {
1288
+ let handle : HANDLE = ( try ? FileManager . default. _fileSystemRepresentation ( withPath: path) {
1289
+ CreateFileW ( $0, /*dwDesiredAccess=*/DWORD ( 0 ) ,
1290
+ DWORD ( FILE_SHARE_READ | FILE_SHARE_WRITE) ,
1291
+ /*lpSecurityAttributes=*/nil , DWORD ( OPEN_EXISTING) ,
1292
+ DWORD ( FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS) ,
1293
+ /*hTemplateFile=*/nil )
1294
+ } ) ?? INVALID_HANDLE_VALUE
1295
+ if handle == INVALID_HANDLE_VALUE {
1293
1296
self = . typeUnknown
1294
1297
return
1295
1298
}
1296
1299
defer { CloseHandle ( handle) }
1297
1300
var tagInfo = FILE_ATTRIBUTE_TAG_INFO ( )
1298
- guard GetFileInformationByHandleEx ( handle, FileAttributeTagInfo, & tagInfo, DWORD ( MemoryLayout< FILE_ATTRIBUTE_TAG_INFO> . size) ) else {
1301
+ if !GetFileInformationByHandleEx( handle, FileAttributeTagInfo, & tagInfo,
1302
+ DWORD ( MemoryLayout< FILE_ATTRIBUTE_TAG_INFO> . size) ) {
1299
1303
self = . typeUnknown
1300
1304
return
1301
1305
}
0 commit comments