diff --git a/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCloseFrom.swift b/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCloseFrom.swift index b0efc45f73..e436a80d53 100644 --- a/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCloseFrom.swift +++ b/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCloseFrom.swift @@ -44,7 +44,7 @@ enum PosixSpawnFileActionsCloseFrom { startingAt minimumFileDescriptor: Int32) throws { #if canImport(Glibc) - try self.check(posix_spawn_file_actions_addclosefrom_np(&fileActions, minimumFileDescriptor)) + try self.check(PosixSpawnFileActionsCompatibility.addCloseFrom(&fileActions, startingAt: minimumFileDescriptor)) #else for descriptor in try self.descriptorsToClose(startingAt: minimumFileDescriptor) { try self.check(posix_spawn_file_actions_addclose(&fileActions, descriptor)) diff --git a/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCompatibility.swift b/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCompatibility.swift new file mode 100644 index 0000000000..9f3a96a055 --- /dev/null +++ b/Sources/CodexBarCore/Host/Process/PosixSpawnFileActionsCompatibility.swift @@ -0,0 +1,47 @@ +#if canImport(Darwin) +import Darwin +#elseif canImport(Glibc) +import Glibc +#elseif canImport(Musl) +import Musl +#endif + +#if canImport(Darwin) +typealias PosixSpawnFileActionsHandle = posix_spawn_file_actions_t? +#else +typealias PosixSpawnFileActionsHandle = posix_spawn_file_actions_t +#endif + +#if canImport(Glibc) +@_silgen_name("posix_spawn_file_actions_addchdir_np") +private func glibc_posix_spawn_file_actions_addchdir_np( + _ actions: UnsafeMutablePointer, + _ path: UnsafePointer) -> Int32 + +@_silgen_name("posix_spawn_file_actions_addclosefrom_np") +private func glibc_posix_spawn_file_actions_addclosefrom_np( + _ actions: UnsafeMutablePointer, + _ fileDescriptor: Int32) -> Int32 +#endif + +enum PosixSpawnFileActionsCompatibility { + static func addChangeDirectory( + _ fileActions: inout PosixSpawnFileActionsHandle, + path: UnsafePointer) -> Int32 + { + #if canImport(Glibc) + glibc_posix_spawn_file_actions_addchdir_np(&fileActions, path) + #else + posix_spawn_file_actions_addchdir_np(&fileActions, path) + #endif + } + + #if canImport(Glibc) + static func addCloseFrom( + _ fileActions: inout PosixSpawnFileActionsHandle, + startingAt minimumFileDescriptor: Int32) -> Int32 + { + glibc_posix_spawn_file_actions_addclosefrom_np(&fileActions, minimumFileDescriptor) + } + #endif +} diff --git a/Sources/CodexBarCore/Host/Process/SpawnedProcessGroup.swift b/Sources/CodexBarCore/Host/Process/SpawnedProcessGroup.swift index 88e28daf3c..c8d13f8e83 100644 --- a/Sources/CodexBarCore/Host/Process/SpawnedProcessGroup.swift +++ b/Sources/CodexBarCore/Host/Process/SpawnedProcessGroup.swift @@ -469,7 +469,7 @@ package final class SpawnedProcessGroup: @unchecked Sendable { } if let workingDirectory { fileActionResults.append(workingDirectory.path.withCString { path in - posix_spawn_file_actions_addchdir_np(&fileActions, path) + PosixSpawnFileActionsCompatibility.addChangeDirectory(&fileActions, path: path) }) } #if canImport(Glibc) || canImport(Musl) diff --git a/Sources/CodexBarCore/Providers/Antigravity/AntigravityCLISession.swift b/Sources/CodexBarCore/Providers/Antigravity/AntigravityCLISession.swift index d86d9296fc..3d5d6ca1da 100644 --- a/Sources/CodexBarCore/Providers/Antigravity/AntigravityCLISession.swift +++ b/Sources/CodexBarCore/Providers/Antigravity/AntigravityCLISession.swift @@ -884,7 +884,7 @@ struct AntigravityPTYProcessLauncher: AntigravityCLIProcessLaunching { let homeDirectory = NSHomeDirectory() _ = homeDirectory.withCString { path in - posix_spawn_file_actions_addchdir_np(&fileActions, path) + PosixSpawnFileActionsCompatibility.addChangeDirectory(&fileActions, path: path) } #if canImport(Glibc) || canImport(Musl) do {