From ef32e32134e6c7c15aa836b29ff6612b1215d456 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sun, 2 Jul 2023 08:54:10 -0700 Subject: [PATCH] Fix the `openpty` tests for FreeBSD 12. --- tests/pty/openpty.rs | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/tests/pty/openpty.rs b/tests/pty/openpty.rs index 4eac0f51c..20632a009 100644 --- a/tests/pty/openpty.rs +++ b/tests/pty/openpty.rs @@ -1,72 +1,76 @@ use rustix::fs::{openat, Mode, OFlags, CWD}; use rustix::pty::*; use std::fs::File; -use std::io; use std::io::{Read, Write}; #[test] -fn openpty_basic() -> io::Result<()> { +fn openpty_basic() { // Use `CLOEXEC` if we can. #[cfg(any(linux_kernel, target_os = "freebsd", target_os = "netbsd"))] let flags = OpenptFlags::RDWR | OpenptFlags::NOCTTY | OpenptFlags::CLOEXEC; #[cfg(not(any(linux_kernel, target_os = "freebsd", target_os = "netbsd")))] let flags = OpenptFlags::RDWR | OpenptFlags::NOCTTY; - let controller = openpt(flags)?; + let controller = openpt(flags).unwrap(); - grantpt(&controller)?; - unlockpt(&controller)?; + grantpt(&controller).unwrap(); + unlockpt(&controller).unwrap(); - let name = ptsname(&controller, Vec::new())?; + let name = match ptsname(&controller, Vec::new()) { + Ok(name) => name, + #[cfg(target_os = "freebsd")] + Err(rustix::io::Errno::NOSYS) => return, // FreeBSD 12 doesn't support this + Err(err) => Err(err).unwrap(), + }; let user = openat( CWD, name, OFlags::RDWR | OFlags::NOCTTY | OFlags::CLOEXEC, Mode::empty(), - )?; + ) + .unwrap(); let mut controller = File::from(controller); let mut user = File::from(user); // The '\x04' is Ctrl-D, the default EOF control code. - controller.write_all(b"Hello, world!\n\x04")?; + controller.write_all(b"Hello, world!\n\x04").unwrap(); let mut s = String::new(); - user.read_to_string(&mut s)?; + user.read_to_string(&mut s).unwrap(); assert_eq!(s, "Hello, world!\n"); - Ok(()) } // Like `openpty_basic` but use `ioctl_tiocgptpeer` instead of `ptsname`. #[cfg(target_os = "linux")] #[test] -fn openpty_get_peer() -> io::Result<()> { +fn openpty_get_peer() { // Use `CLOEXEC` if we can. #[cfg(any(linux_kernel, target_os = "freebsd", target_os = "netbsd"))] let flags = OpenptFlags::RDWR | OpenptFlags::NOCTTY | OpenptFlags::CLOEXEC; #[cfg(not(any(linux_kernel, target_os = "freebsd", target_os = "netbsd")))] let flags = OpenptFlags::RDWR | OpenptFlags::NOCTTY; - let controller = openpt(flags)?; + let controller = openpt(flags).unwrap(); - grantpt(&controller)?; - unlockpt(&controller)?; + grantpt(&controller).unwrap(); + unlockpt(&controller).unwrap(); let user = ioctl_tiocgptpeer( &controller, OpenptFlags::RDWR | OpenptFlags::NOCTTY | OpenptFlags::CLOEXEC, - )?; + ) + .unwrap(); let mut controller = File::from(controller); let mut user = File::from(user); // The '\x04' is Ctrl-D, the default EOF control code. - controller.write_all(b"Hello, world!\n\x04")?; + controller.write_all(b"Hello, world!\n\x04").unwrap(); let mut s = String::new(); - user.read_to_string(&mut s)?; + user.read_to_string(&mut s).unwrap(); assert_eq!(s, "Hello, world!\n"); - Ok(()) }