summaryrefslogtreecommitdiffstats
path: root/buffered-reader
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2018-07-16 13:05:53 +0200
committerNeal H. Walfield <neal@pep.foundation>2018-07-16 13:09:56 +0200
commit51e95911d49c1bee8ea52553d82bac88b1c140ae (patch)
treee5b799b74f2cca7d0892f969885f2b526bc4e93f /buffered-reader
parent004b3862a7c5e5b8be424c6cf8cf4fd7739aefdd (diff)
buffered-reader: Have drop_eof return if any content was dropped
Diffstat (limited to 'buffered-reader')
-rw-r--r--buffered-reader/src/lib.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs
index 945de531..7ff77578 100644
--- a/buffered-reader/src/lib.rs
+++ b/buffered-reader/src/lib.rs
@@ -174,20 +174,29 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug {
/// Like steal_eof, but instead of returning the data, the data is
/// discarded.
- fn drop_eof(&mut self) -> Result<(), std::io::Error> {
+ ///
+ /// One success, returns whether any data (i.e., at least one
+ /// byte) was discarded.
+ fn drop_eof(&mut self) -> Result<bool, std::io::Error> {
+ let mut at_least_one_byte = false;
loop {
match self.data_consume(DEFAULT_BUF_SIZE) {
- Ok(ref buffer) =>
+ Ok(ref buffer) => {
+ if buffer.len() > 0 {
+ at_least_one_byte = true;
+ }
+
if buffer.len() < DEFAULT_BUF_SIZE {
// EOF.
break;
- },
+ }
+ }
Err(err) =>
return Err(err),
}
}
- Ok(())
+ Ok(at_least_one_byte)
}
fn into_inner<'a>(self: Box<Self>) -> Option<Box<BufferedReader<C> + 'a>>
@@ -296,7 +305,7 @@ impl <'a, C> BufferedReader<C> for Box<BufferedReader<C> + 'a> {
return self.as_mut().steal_eof();
}
- fn drop_eof(&mut self) -> Result<(), std::io::Error> {
+ fn drop_eof(&mut self) -> Result<bool, std::io::Error> {
return self.as_mut().drop_eof();
}