diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-12-29 21:38:22 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-12-29 21:38:22 -0500 |
commit | f1779c4549c88e7996031b7211a556e8e4b54963 (patch) | |
tree | 414aebffb9bd5494abe2374f7c5d436e7b2150b9 /src | |
parent | c9b4ff92040d02b3dd3d050c41e148b2fa8e6b60 (diff) | |
download | pty-process-f1779c4549c88e7996031b7211a556e8e4b54963.tar.gz pty-process-f1779c4549c88e7996031b7211a556e8e4b54963.zip |
i don't think we need to open pts multiple times?
Diffstat (limited to 'src')
-rw-r--r-- | src/blocking/command.rs | 2 | ||||
-rw-r--r-- | src/blocking/pty.rs | 16 | ||||
-rw-r--r-- | src/command.rs | 2 | ||||
-rw-r--r-- | src/pty.rs | 16 | ||||
-rw-r--r-- | src/sys.rs | 4 |
5 files changed, 20 insertions, 20 deletions
diff --git a/src/blocking/command.rs b/src/blocking/command.rs index 0460add..0ec55db 100644 --- a/src/blocking/command.rs +++ b/src/blocking/command.rs @@ -104,7 +104,7 @@ impl Command { pty: &crate::blocking::Pty, ) -> crate::Result<std::process::Child> { let (stdin, stdout, stderr, mut pre_exec) = - crate::sys::setup_subprocess(pty, pty.pts()?)?; + crate::sys::setup_subprocess(pty, pty.pts())?; self.inner.stdin(self.stdin.take().unwrap_or(stdin)); self.inner.stdout(self.stdout.take().unwrap_or(stdout)); diff --git a/src/blocking/pty.rs b/src/blocking/pty.rs index 6b1a2a3..d864bd6 100644 --- a/src/blocking/pty.rs +++ b/src/blocking/pty.rs @@ -1,24 +1,24 @@ pub struct Pty { pt: std::fs::File, - ptsname: std::path::PathBuf, + pts: std::fs::File, } impl Pty { pub fn new() -> crate::Result<Self> { let (pt, ptsname) = crate::sys::create_pt()?; - Ok(Self { pt, ptsname }) + let pts = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&ptsname)?; + Ok(Self { pt, pts }) } pub fn resize(&self, size: crate::Size) -> crate::Result<()> { Ok(crate::sys::set_term_size(self, size)?) } - pub(crate) fn pts(&self) -> std::io::Result<std::fs::File> { - let fh = std::fs::OpenOptions::new() - .read(true) - .write(true) - .open(&self.ptsname)?; - Ok(fh) + pub(crate) fn pts(&self) -> &std::fs::File { + &self.pts } } diff --git a/src/command.rs b/src/command.rs index 3867bf2..171e764 100644 --- a/src/command.rs +++ b/src/command.rs @@ -104,7 +104,7 @@ impl Command { pty: &crate::Pty, ) -> crate::Result<async_process::Child> { let (stdin, stdout, stderr, mut pre_exec) = - crate::sys::setup_subprocess(pty, pty.pts()?)?; + crate::sys::setup_subprocess(pty, pty.pts())?; self.inner.stdin(self.stdin.take().unwrap_or(stdin)); self.inner.stdout(self.stdout.take().unwrap_or(stdout)); @@ -1,25 +1,25 @@ pub struct Pty { pt: async_io::Async<std::fs::File>, - ptsname: std::path::PathBuf, + pts: std::fs::File, } impl Pty { pub fn new() -> crate::Result<Self> { let (pt, ptsname) = crate::sys::create_pt()?; let pt = async_io::Async::new(pt)?; - Ok(Self { pt, ptsname }) + let pts = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&ptsname)?; + Ok(Self { pt, pts }) } pub fn resize(&self, size: crate::Size) -> crate::Result<()> { Ok(crate::sys::set_term_size(self, size)?) } - pub(crate) fn pts(&self) -> std::io::Result<std::fs::File> { - let fh = std::fs::OpenOptions::new() - .read(true) - .write(true) - .open(&self.ptsname)?; - Ok(fh) + pub(crate) fn pts(&self) -> &std::fs::File { + &self.pts } } @@ -40,7 +40,7 @@ pub fn set_term_size( pub fn setup_subprocess( pt: &impl std::os::unix::io::AsRawFd, - pts: impl std::os::unix::io::IntoRawFd, + pts: &impl std::os::unix::io::AsRawFd, ) -> nix::Result<( std::process::Stdio, std::process::Stdio, @@ -48,7 +48,7 @@ pub fn setup_subprocess( impl FnMut() -> std::io::Result<()>, )> { let pt_fd = pt.as_raw_fd(); - let pts_fd = pts.into_raw_fd(); + let pts_fd = pts.as_raw_fd(); let stdin = nix::unistd::dup(pts_fd)?; let stdout = nix::unistd::dup(pts_fd)?; |