diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2023-09-30 23:01:17 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2023-09-30 23:01:17 +0200 |
commit | a0ab26a7677eed4698f9728e42a13c760fa85e7c (patch) | |
tree | 139cd6a2297b07c14f851be6341713c673f40f9c /crates/runner/src/util | |
parent | bbc7bd79393de9f284fa4f50905936dc8cb2aaa0 (diff) | |
download | rebel-a0ab26a7677eed4698f9728e42a13c760fa85e7c.tar rebel-a0ab26a7677eed4698f9728e42a13c760fa85e7c.zip |
runner: jobserver: use OwnedFds
Diffstat (limited to 'crates/runner/src/util')
-rw-r--r-- | crates/runner/src/util/unix.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/crates/runner/src/util/unix.rs b/crates/runner/src/util/unix.rs index c3e9ddb..156e441 100644 --- a/crates/runner/src/util/unix.rs +++ b/crates/runner/src/util/unix.rs @@ -10,9 +10,11 @@ use common::error::*; use super::fs; -pub fn set_blocking(fd: RawFd, blocking: bool) -> Result<()> { +pub fn set_blocking<Fd: AsFd>(fd: &Fd, blocking: bool) -> Result<()> { + let raw_fd = fd.as_fd().as_raw_fd(); + let flags = - OFlag::from_bits_retain(fcntl::fcntl(fd, FcntlArg::F_GETFL).context("fcntl(F_GETFL)")?); + OFlag::from_bits_retain(fcntl::fcntl(raw_fd, FcntlArg::F_GETFL).context("fcntl(F_GETFL)")?); let new_flags = if blocking { flags & !OFlag::O_NONBLOCK @@ -21,15 +23,18 @@ pub fn set_blocking(fd: RawFd, blocking: bool) -> Result<()> { }; if new_flags != flags { - fcntl::fcntl(fd, FcntlArg::F_SETFL(new_flags)).context("fcntl(F_SETFL)")?; + fcntl::fcntl(raw_fd, FcntlArg::F_SETFL(new_flags)).context("fcntl(F_SETFL)")?; } Ok(()) } -pub fn set_cloexec(fd: RawFd, cloexec: bool) -> Result<()> { - let flags = - FdFlag::from_bits_retain(fcntl::fcntl(fd, FcntlArg::F_GETFD).context("fcntl(F_GETFD)")?); +pub fn set_cloexec<Fd: AsFd>(fd: &Fd, cloexec: bool) -> Result<()> { + let raw_fd = fd.as_fd().as_raw_fd(); + + let flags = FdFlag::from_bits_retain( + fcntl::fcntl(raw_fd, FcntlArg::F_GETFD).context("fcntl(F_GETFD)")?, + ); let new_flags = if cloexec { flags | FdFlag::FD_CLOEXEC @@ -38,7 +43,7 @@ pub fn set_cloexec(fd: RawFd, cloexec: bool) -> Result<()> { }; if new_flags != flags { - fcntl::fcntl(fd, FcntlArg::F_SETFD(new_flags)).context("fcntl(F_SETFD)")?; + fcntl::fcntl(raw_fd, FcntlArg::F_SETFD(new_flags)).context("fcntl(F_SETFD)")?; } Ok(()) |