@@ -57,20 +57,39 @@ extension FileManager.SearchPathDomainMask {
57
57
}
58
58
}
59
59
60
+ func _SearchPathURLs( for directory: FileManager . SearchPathDirectory , in domain: FileManager . SearchPathDomainMask , expandTilde: Bool ) -> some Sequence < URL > {
61
+ #if canImport(Darwin)
62
+ _DarwinSearchPaths ( for: directory, in: domain, expandTilde: expandTilde) . map {
63
+ URL ( filePath: $0, directoryHint: . isDirectory)
64
+ }
65
+ #else
66
+ var result = Set < URL > ( )
67
+ var domain = domain. intersection ( . valid)
68
+ while let currentDomain = domain. firstMask {
69
+ domain. remove ( currentDomain)
70
+ #if os(Windows)
71
+ let url = _WindowsSearchPathURL ( for: directory, in: currentDomain)
72
+ #else
73
+ let url = _XDGSearchPathURL ( for: directory, in: currentDomain)
74
+ #endif
75
+ if let url {
76
+ result. insert ( url)
77
+ }
78
+ }
79
+ return result
80
+ #endif
81
+ }
82
+
83
+ #if canImport(Darwin)
60
84
#if FOUNDATION_FRAMEWORK
61
85
@_cdecl ( " _NSSearchPathsForDirectoryInDomain " )
62
- func _NSSearchPaths( for directory: FileManager . SearchPathDirectory , in domain: FileManager . SearchPathDomainMask , expandTilde: Bool ) -> [ String ] {
63
- _SearchPathURLs ( for: directory, in: domain, expandTilde: expandTilde) . map ( \. path)
64
- }
65
86
#endif
66
-
67
- func _SearchPathURLs( for directory: FileManager . SearchPathDirectory , in domain: FileManager . SearchPathDomainMask , expandTilde: Bool ) -> some Sequence < URL > {
68
- #if canImport(Darwin)
87
+ func _DarwinSearchPaths( for directory: FileManager . SearchPathDirectory , in domain: FileManager . SearchPathDomainMask , expandTilde: Bool ) -> [ String ] {
69
88
let basic = _DarwinSearchPathsSequence ( directory: directory, domainMask: domain. intersection ( . valid) ) . lazy. map {
70
89
if expandTilde {
71
- return URL ( filePath : $0. expandingTildeInPath, directoryHint : . isDirectory )
90
+ $0. expandingTildeInPath
72
91
} else {
73
- return URL ( filePath : $0 , directoryHint : . isDirectory )
92
+ $0
74
93
}
75
94
}
76
95
@@ -80,32 +99,17 @@ func _SearchPathURLs(for directory: FileManager.SearchPathDirectory, in domain:
80
99
if domain. contains ( . _sharedUserDomainMask) || compatibleSharedUserDomainMask {
81
100
var result = Array ( basic)
82
101
for path in _DarwinSearchPathsSequence ( directory: directory, domainMask: . userDomainMask) {
83
- let expandedURL = URL ( filePath : expandTilde ? path. replacingTildeWithRealHomeDirectory : path, directoryHint : . isDirectory )
102
+ let expandedPath = expandTilde ? path. replacingTildeWithRealHomeDirectory : path
84
103
// Avoid duplicates, which would occur with (NSUserDomainMask | NSSharedUserDomainMask) in non-sandboxed apps.
85
- if !result. contains ( expandedURL ) {
104
+ if !result. contains ( expandedPath ) {
86
105
// Insert this path after NSUserDomainMask and before any of the more general paths.
87
106
let insertionIndex = domain. contains ( . userDomainMask) ? 1 : 0
88
- result. insert ( expandedURL , at: insertionIndex)
107
+ result. insert ( expandedPath , at: insertionIndex)
89
108
}
90
109
}
91
110
return result
92
111
}
93
112
#endif
94
113
return Array ( basic)
95
- #else
96
- var result = Set < URL > ( )
97
- var domain = domain. intersection ( . valid)
98
- while let currentDomain = domain. firstMask {
99
- domain. remove ( currentDomain)
100
- #if os(Windows)
101
- let url = _WindowsSearchPathURL ( for: directory, in: currentDomain)
102
- #else
103
- let url = _XDGSearchPathURL ( for: directory, in: currentDomain)
104
- #endif
105
- if let url {
106
- result. insert ( url)
107
- }
108
- }
109
- return result
110
- #endif
111
114
}
115
+ #endif
0 commit comments