diff --git a/Cargo.lock b/Cargo.lock index b98013e19..a1239702e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -402,6 +402,7 @@ name = "fish-util" version = "0.0.0" dependencies = [ "fish-widestring", + "nix", "rand", ] diff --git a/crates/util/Cargo.toml b/crates/util/Cargo.toml index d8cfd179c..781e92040 100644 --- a/crates/util/Cargo.toml +++ b/crates/util/Cargo.toml @@ -8,6 +8,7 @@ license.workspace = true [dependencies] fish-widestring.workspace = true +nix.workspace = true rand.workspace = true [lints] diff --git a/crates/util/src/lib.rs b/crates/util/src/lib.rs index b0b5d3db9..60c444c9b 100644 --- a/crates/util/src/lib.rs +++ b/crates/util/src/lib.rs @@ -3,6 +3,7 @@ use fish_widestring::prelude::*; use rand::{SeedableRng as _, rngs::SmallRng}; use std::cmp::Ordering; +use std::os::fd::{BorrowedFd, RawFd}; use std::time; /// Compares two wide character strings with an (arguably) intuitive ordering. This function tries @@ -234,6 +235,10 @@ fn wcsfilecmp_leading_digits(a: &wstr, b: &wstr) -> (Ordering, usize, usize) { (ret, ai, bi) } +pub fn write_to_fd(input: &[u8], fd: RawFd) -> nix::Result { + nix::unistd::write(unsafe { BorrowedFd::borrow_raw(fd) }, input) +} + #[cfg(test)] mod tests { use super::wcsfilecmp; diff --git a/src/flog.rs b/src/flog.rs index 983063af9..9c269bdc9 100644 --- a/src/flog.rs +++ b/src/flog.rs @@ -1,7 +1,7 @@ use crate::prelude::*; use crate::wildcard::wildcard_match; -use crate::wutil::write_to_fd; use crate::{parse_util::unescape_wildcards, wutil::unescape_bytes_and_write_to_fd}; +use fish_util::write_to_fd; use fish_wcstringutil::wcs2bytes; use libc::c_int; use std::sync::atomic::{AtomicI32, Ordering}; diff --git a/src/reader/reader.rs b/src/reader/reader.rs index 936c8fedd..fb231011c 100644 --- a/src/reader/reader.rs +++ b/src/reader/reader.rs @@ -113,13 +113,14 @@ TtyHandoff, get_tty_protocols_active, initialize_tty_protocols, safe_deactivate_tty_protocols, }; use crate::wildcard::wildcard_has; -use crate::wutil::{fstat, perror, write_to_fd, wstat}; +use crate::wutil::{fstat, perror, wstat}; use crate::{abbrs, event, function}; use assert_matches::assert_matches; use errno::{Errno, errno}; use fish_common::{UTF8_BOM_WCHAR, help_section}; use fish_fallback::fish_wcwidth; use fish_fallback::lowercase; +use fish_util::write_to_fd; use fish_wcstringutil::{ CaseSensitivity, IsPrefix, StringFuzzyMatch, count_preceding_backslashes, is_prefix, join_strings, string_prefixes_string, string_prefixes_string_case_insensitive, diff --git a/src/wutil/mod.rs b/src/wutil/mod.rs index 14abd3279..4590e1280 100644 --- a/src/wutil/mod.rs +++ b/src/wutil/mod.rs @@ -13,6 +13,7 @@ use crate::signal::SigChecker; use crate::topic_monitor::Topic; use errno::errno; +use fish_util::write_to_fd; use fish_wcstringutil::{join_strings, str2bytes_callback, wcs2bytes, wcs2osstring, wcs2zstring}; use fish_widestring::{IntoCharIter, L, WExt as _, WString, wstr}; use nix::unistd::AccessFlags; @@ -351,10 +352,6 @@ pub fn wrename(old_name: &wstr, new_name: &wstr) -> io::Result<()> { fs::rename(old_narrow, new_narrow) } -pub fn write_to_fd(input: &[u8], fd: RawFd) -> nix::Result { - nix::unistd::write(unsafe { BorrowedFd::borrow_raw(fd) }, input) -} - /// Write a wide string to a file descriptor. This avoids doing any additional allocation. /// Returns nothing when interrupted by ctrl-c or HUP. pub fn unescape_bytes_and_write_to_fd(input: impl IntoCharIter, fd: RawFd) -> Option {