summaryrefslogtreecommitdiff
path: root/src/status_cmd.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/status_cmd.rs')
-rw-r--r--src/status_cmd.rs15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/status_cmd.rs b/src/status_cmd.rs
index 539ee3a..217ddab 100644
--- a/src/status_cmd.rs
+++ b/src/status_cmd.rs
@@ -1,12 +1,9 @@
-use std::io::{BufWriter, Write};
+use std::io::{self, BufWriter, ErrorKind, Write};
use std::os::unix::io::{AsRawFd, RawFd};
use std::process::{Child, ChildStdin, ChildStdout, Command, Stdio};
use anyhow::Result;
-use nix::errno::Errno;
-use nix::libc;
-
use crate::i3bar_protocol::{Block, Event, Protocol};
#[derive(Debug)]
@@ -44,7 +41,7 @@ impl StatusCmd {
match read_to_vec(self.output.as_raw_fd(), &mut self.buf) {
Ok(0) => bail!("status command exited"),
Ok(_n) => (),
- Err(Errno::EAGAIN) => return Ok(None),
+ Err(e) if e.kind() == ErrorKind::WouldBlock => return Ok(None),
Err(e) => bail!(e),
}
@@ -68,7 +65,7 @@ impl StatusCmd {
/// Read from a raw file descriptor to the vector.
///
/// Appends data at the end of the buffer. Resizes vector as needed.
-pub fn read_to_vec(fd: RawFd, buf: &mut Vec<u8>) -> nix::Result<usize> {
+pub fn read_to_vec(fd: RawFd, buf: &mut Vec<u8>) -> io::Result<usize> {
if buf.capacity() - buf.len() < 1024 {
buf.reserve(buf.capacity().max(1024));
}
@@ -81,7 +78,11 @@ pub fn read_to_vec(fd: RawFd, buf: &mut Vec<u8>) -> nix::Result<usize> {
)
};
- let read = Errno::result(res)? as usize;
+ if res == -1 {
+ return Err(io::Error::last_os_error());
+ }
+
+ let read = res as usize;
unsafe { buf.set_len(buf.len() + read) };
Ok(read)