From ad7d8bf63c49905a341039eac6c96d4f7fa33f29 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 1 Mar 2020 19:09:58 +0100 Subject: Optimize: Stop iteration for viewing on broken pipe error Signed-off-by: Matthias Beyer --- lib/entry/libimagentryview/src/lib.rs | 1 + lib/entry/libimagentryview/src/viewer.rs | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/entry/libimagentryview/src/lib.rs b/lib/entry/libimagentryview/src/lib.rs index 328e5113..485aaec8 100644 --- a/lib/entry/libimagentryview/src/lib.rs +++ b/lib/entry/libimagentryview/src/lib.rs @@ -37,6 +37,7 @@ while_true, )] +#[macro_use] extern crate log; extern crate toml; extern crate textwrap; extern crate failure; diff --git a/lib/entry/libimagentryview/src/viewer.rs b/lib/entry/libimagentryview/src/viewer.rs index ca599e15..1fa2271c 100644 --- a/lib/entry/libimagentryview/src/viewer.rs +++ b/lib/entry/libimagentryview/src/viewer.rs @@ -130,8 +130,15 @@ impl<'a, I, V, W, F, T> Iterator for ViewIter<'a, I, V, W, F, T> fn next(&mut self) -> Option { if let Some(next) = self.inner.next() { if let Some(entry) = (self.func)(&next) { - if let Err(e) = self.viewer.view_entry(&entry, self.sink) { - return Some(Err(e).map_err(failure::Error::from)) + let r = self.viewer.view_entry(&entry, self.sink); + trace!("Viewing resulted in {:?}", r); + match r { + Ok(_) => { /* nothing */ }, + Err(crate::error::Error::Io(ref e)) if e.kind() == std::io::ErrorKind::BrokenPipe => { + trace!("Stopping iteration, because of broken pipe error!"); + return None + }, + Err(e) => return Some(Err(failure::Error::from(e))) } } -- cgit v1.2.3