Use FSR for Process executable path on Windows #4999
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Within
Process
, thelaunchPath
here is equivalent toexecutableURL.path
. Just before launching the process, we call.withCString(encodedAs: UTF16.self)
to convert the invocation to UTF-16. However, now thatURL
is re-cored on swift-foundation'sURL
, Windows paths are represented following RFC8089 which contains a leading/
before a drive letter. The various file system representation functions remove this preceding slash before calling to an SDK API, howeverProcess
did not do this resulting in a path such as/C:/Users/jmschonfeld/foo.exe
being passed toCreateProcessW
which failed to find the file. This standardizes the path to its file system representation before it is combined with the various arguments and converted to UTF-16 later.This fixes a failure that occurred during a windows toolchain build where SwiftPM (using the new Foundation) was unable to invoke
swiftc.exe
due to this issue.