From c876904bda7bb51ef2d3ec1661281df75fad60be Mon Sep 17 00:00:00 2001 From: Jake Stanger Date: Sat, 18 May 2024 21:58:32 +0100 Subject: [PATCH] refactor: update `nix` crate to latest version Fixes #573 --- Cargo.lock | 24 ++++++++++++++++--- Cargo.toml | 2 +- src/clients/wayland/wlr_data_control/mod.rs | 7 +++--- src/clients/wayland/wlr_data_control/offer.rs | 8 +++---- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85e3adae..e3e24f95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -435,6 +435,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" version = "0.4.38" @@ -1596,7 +1602,7 @@ dependencies = [ "mlua", "mpd-utils", "mpris", - "nix 0.27.1", + "nix 0.28.0", "notify", "regex", "reqwest", @@ -1663,9 +1669,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.150" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libcorn" @@ -1948,6 +1954,18 @@ dependencies = [ "libc", ] +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nom" version = "7.1.3" diff --git a/Cargo.toml b/Cargo.toml index 274acead..4c505670 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -125,7 +125,7 @@ mlua = { version = "0.9.7", optional = true, features = ["luajit"] } cairo-rs = { version = "0.18.5", optional = true, features = ["png"] } # clipboard -nix = { version = "0.27.1", optional = true, features = ["event"] } +nix = { version = "0.28.0", optional = true, features = ["event", "fs"] } # clock chrono = { version = "0.4.38", optional = true, default_features = false, features = ["clock", "unstable-locales"] } diff --git a/src/clients/wayland/wlr_data_control/mod.rs b/src/clients/wayland/wlr_data_control/mod.rs index 5bc63120..dbe5f8e9 100644 --- a/src/clients/wayland/wlr_data_control/mod.rs +++ b/src/clients/wayland/wlr_data_control/mod.rs @@ -11,7 +11,7 @@ use crate::{lock, try_send, Ironbar}; use device::DataControlDevice; use glib::Bytes; use nix::fcntl::{fcntl, F_GETPIPE_SZ, F_SETPIPE_SZ}; -use nix::sys::epoll::{Epoll, EpollCreateFlags, EpollEvent, EpollFlags}; +use nix::sys::epoll::{Epoll, EpollCreateFlags, EpollEvent, EpollFlags, EpollTimeout}; use smithay_client_toolkit::data_device_manager::WritePipe; use smithay_client_toolkit::reexports::calloop::{PostAction, RegistrationToken}; use std::cmp::min; @@ -274,7 +274,7 @@ impl DataControlDeviceHandler for Environment { Ok(token) => { cur_offer.token.replace(token); } - Err(err) => error!("{err:?}"), + Err(err) => error!("Failed to insert read pipe event: {err:?}"), } } } @@ -349,11 +349,12 @@ impl DataControlSourceHandler for Environment { .add(fd, epoll_event) .expect("to send valid epoll operation"); + let timeout = EpollTimeout::from(100u16); while !bytes.is_empty() { let chunk = &bytes[..min(pipe_size as usize, bytes.len())]; epoll_fd - .wait(&mut events, 100) + .wait(&mut events, timeout) .expect("Failed to wait to epoll"); match file.write(chunk) { diff --git a/src/clients/wayland/wlr_data_control/offer.rs b/src/clients/wayland/wlr_data_control/offer.rs index a078adeb..73f06f6d 100644 --- a/src/clients/wayland/wlr_data_control/offer.rs +++ b/src/clients/wayland/wlr_data_control/offer.rs @@ -5,7 +5,7 @@ use nix::unistd::{close, pipe2}; use smithay_client_toolkit::data_device_manager::data_offer::DataOfferError; use smithay_client_toolkit::data_device_manager::ReadPipe; use std::ops::DerefMut; -use std::os::fd::{BorrowedFd, FromRawFd}; +use std::os::fd::{AsFd, AsRawFd}; use std::sync::{Arc, Mutex}; use tracing::{trace, warn}; use wayland_client::{Connection, Dispatch, Proxy, QueueHandle}; @@ -176,11 +176,11 @@ pub unsafe fn receive( // create a pipe let (readfd, writefd) = pipe2(OFlag::O_CLOEXEC)?; - offer.receive(mime_type, BorrowedFd::borrow_raw(writefd)); + offer.receive(mime_type, writefd.as_fd()); - if let Err(err) = close(writefd) { + if let Err(err) = close(writefd.as_raw_fd()) { warn!("Failed to close write pipe: {}", err); } - Ok(FromRawFd::from_raw_fd(readfd)) + Ok(ReadPipe::from(readfd)) }