mirror of
https://github.com/apple/container.git
synced 2026-08-28 19:36:31 +00:00
CLI (run): Only ask for stdin for -i (#483)
Today if you asked for a pty and also wanted to detach we'd open stdin and then immediately close that pipe which would close the guest relay as well. I don't believe we need stdin open unless it's asked for with -i. Truthfully there's one extra bit here that is needed which is if -i and -d are supplied we need to tell the daemon to open stdin, but not send an fd (as they're client supplied and the client/cli is going to exit immediately). That will need to be a followup, as it's mainly useful for attach which we don't have today.
This commit is contained in:
@@ -205,30 +205,28 @@ struct ProcessIO {
|
||||
var stdio = [FileHandle?](repeating: nil, count: 3)
|
||||
|
||||
let stdin: Pipe? = {
|
||||
if !interactive && !tty {
|
||||
if !interactive {
|
||||
return nil
|
||||
}
|
||||
return Pipe()
|
||||
}()
|
||||
|
||||
if let stdin {
|
||||
if interactive {
|
||||
let pin = FileHandle.standardInput
|
||||
let stdinOSFile = OSFile(fd: pin.fileDescriptor)
|
||||
let pipeOSFile = OSFile(fd: stdin.fileHandleForWriting.fileDescriptor)
|
||||
try stdinOSFile.makeNonBlocking()
|
||||
nonisolated(unsafe) let buf = UnsafeMutableBufferPointer<UInt8>.allocate(capacity: Int(getpagesize()))
|
||||
let pin = FileHandle.standardInput
|
||||
let stdinOSFile = OSFile(fd: pin.fileDescriptor)
|
||||
let pipeOSFile = OSFile(fd: stdin.fileHandleForWriting.fileDescriptor)
|
||||
try stdinOSFile.makeNonBlocking()
|
||||
nonisolated(unsafe) let buf = UnsafeMutableBufferPointer<UInt8>.allocate(capacity: Int(getpagesize()))
|
||||
|
||||
pin.readabilityHandler = { _ in
|
||||
Self.streamStdin(
|
||||
from: stdinOSFile,
|
||||
to: pipeOSFile,
|
||||
buffer: buf,
|
||||
) {
|
||||
pin.readabilityHandler = nil
|
||||
buf.deallocate()
|
||||
try? stdin.fileHandleForWriting.close()
|
||||
}
|
||||
pin.readabilityHandler = { _ in
|
||||
Self.streamStdin(
|
||||
from: stdinOSFile,
|
||||
to: pipeOSFile,
|
||||
buffer: buf,
|
||||
) {
|
||||
pin.readabilityHandler = nil
|
||||
buf.deallocate()
|
||||
try? stdin.fileHandleForWriting.close()
|
||||
}
|
||||
}
|
||||
stdio[0] = stdin.fileHandleForReading
|
||||
|
||||
Reference in New Issue
Block a user