File: nix-0.27.diff

package info (click to toggle)
rust-linescroll 0.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 188 kB
  • sloc: makefile: 23
file content (78 lines) | stat: -rw-r--r-- 2,791 bytes parent folder | download
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(