1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
Index: linescroll/Cargo.toml
===================================================================
--- linescroll.orig/Cargo.toml
+++ linescroll/Cargo.toml
@@ -36,4 +36,5 @@ version = "0.4"
version = "0.2"
[dependencies.nix]
-version = "0.26"
+version = ">= 0.26, < 0.30"
+features = ["poll","fs","signal"]
Index: linescroll/src/main.rs
===================================================================
--- linescroll.orig/src/main.rs
+++ linescroll/src/main.rs
@@ -247,6 +247,32 @@ fn line_val(u: &str) -> u64 {
}
}
+use std::os::fd::BorrowedFd;
+use std::os::fd::AsFd;
+
+trait MyFrom<T>: Sized {
+ fn myfrom(value: T) -> Self;
+}
+
+impl<T> MyFrom<T> for T {
+ fn myfrom(t: T) -> T {
+ t
+ }
+}
+
+impl MyFrom<&BorrowedFd<'_>> for RawFd {
+ fn myfrom(t: &BorrowedFd) -> RawFd {
+ t.as_raw_fd()
+ }
+}
+
+impl<'a> MyFrom<&'a BorrowedFd<'a>> for BorrowedFd<'a> {
+ fn myfrom(t: &'a BorrowedFd<'a>) -> BorrowedFd<'a> {
+ t.as_fd()
+ }
+}
+
+
fn spawn_reader(count: Arc<Mutex<u64>>, path: Option<String>, settings: Settings) {
thread::spawn(move || {
let settings = settings;
@@ -261,16 +287,16 @@ fn spawn_reader(count: Arc<Mutex<u64>>,
fail_exit: bool,
) {
let mut counter: u64 = 0;
- let original_inode = match nix::sys::stat::fstat(fd) {
+ let fd = unsafe { BorrowedFd::borrow_raw(fd) };
+ let original_inode = match nix::sys::stat::fstat(MyFrom::myfrom(&fd)) {
Ok(i) => Some(i.st_ino),
Err(_) => None,
};
- if fcntl(fd, FcntlArg::F_SETFL(OFlag::O_NONBLOCK)).is_err() {
+ if fcntl(MyFrom::myfrom(&fd), FcntlArg::F_SETFL(OFlag::O_NONBLOCK)).is_err() {
println!("could not set fd to non-blocking");
}
-
- let pfds_orig = vec![PollFd::new(fd, PollFlags::POLLIN)];
+ let pfds_orig = vec![PollFd::new(MyFrom::myfrom(&fd), PollFlags::POLLIN)];
loop {
let now = SystemTime::now();
@@ -286,7 +312,7 @@ fn spawn_reader(count: Arc<Mutex<u64>>,
Ok(_y) => {
if let Some(x) = pfds[0].revents() {
if x | PollFlags::POLLIN == PollFlags::POLLIN {
- while let Ok(size) = nix::unistd::read(fd, &mut buffer[..])
+ while let Ok(size) = nix::unistd::read(MyFrom::myfrom(&fd), &mut buffer[..])
{
if raw {
let s: String = str::from_utf8(
|