Skip to content

Use FSR for Process executable path on Windows #4999

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 8, 2024

Conversation

jmschonfeld
Copy link
Contributor

Within Process, the launchPath here is equivalent to executableURL.path. Just before launching the process, we call .withCString(encodedAs: UTF16.self) to convert the invocation to UTF-16. However, now that URL is re-cored on swift-foundation's URL, 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, however Process did not do this resulting in a path such as /C:/Users/jmschonfeld/foo.exe being passed to CreateProcessW 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.

@@ -499,7 +499,7 @@ open class Process: NSObject {
}

#if os(Windows)
var command: [String] = [launchPath]
var command: [String] = [try FileManager.default._fileSystemRepresentation(withPath: launchPath) { String(decodingCString: $0, as: UTF16.self) }]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does _fileSystemRepresentation need to/can be applied on other platforms as well (just to be consistent)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, it doesn't have the same level of effect on other platforms but I'll add it for good measure

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants